User Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
paper_mario_the_thousand_year_door:character_and_object_models [2016/11/21 09:01]
ladestitute Been away for quite a while (will return to adding more documentation soon)
paper_mario_the_thousand_year_door:character_and_object_models [2017/06/23 10:49] (current)
shygoo ↷ Links adapted because of a move operation
Line 1: Line 1:
-//(credit goes to Retriever II)// +//(credit goes to Retriever II, original article is [[http://hocuspocus.taloncrossing.com/​rii/​tplvtx.txt|here]])//​\\
- +
-If you can contribute to this documentation,​ please tell me what you find. +
-You can shoot me an email at jaquadro@penguinia.net.  I'll keep this document +
-updated and credit all contributors. ​ While I've made every effort to keep +
-this document accurate, there may be errors, which I correct as I find them +
-or as they are reported.+
  
 The file format is broken down into 26 distinct data structures, or blocks. ​ A The file format is broken down into 26 distinct data structures, or blocks. ​ A
-27th block is identified as an extention ​to block 26, and contains a set of+27th block is identified as an extension ​to block 26, and contains a set of
 9 distinct sub-blocks, making it a format within a format. 9 distinct sub-blocks, making it a format within a format.
  
Line 16: Line 10:
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
  
-BLOCK INDEX HIERARCHY +BLOCK INDEX HIERARCHY\\ 
-Based on references to indeces ​of other blocks. ​ Currently blocks 19+Based on references to indices ​of other blocks. ​ Currently blocks 19
 and 26 don't fit into the model. ​ This model is also only a best guess, but and 26 don't fit into the model. ​ This model is also only a best guess, but
 for what I've been able to test, it works. for what I've been able to test, it works.
  
-                      BLOCK 25                         BLOCK 26 +{{paper_mario_the_thousand_year_door:​blockindices.png?​500}}\\
-                         | +
-              +----------+----------+ +
-              |          |          | +
-           BLOCK 2    BLOCK 23   BLOCK 24 +
-              | +
-   ​+----------+----------+ +
-   ​| ​         |          | +
-BLOCK 4    BLOCK 18   BLOCK 22 +
-                         | +
-   ​+----------+----------+----------+-----------+----------+ +
-   ​| ​         |          |          |           ​| ​         | +
-BLOCK 3    BLOCK 5    BLOCK 9    BLOCK 7    BLOCK 20   BLOCK 10 +
-                         ​| ​         |           | +
-                         ​| ​         |           | +
-                         ​| ​         |           | +
-                      BLOCK 8    BLOCK 6    BLOCK 21+
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Global Structure Arrangement +Global Structure Arrangement\\ 
-Block Name SIZE Description +Block Name SIZE Description\\ 
-Block 1 432 File Header +Block 1 432 File Header\\ 
-Block 2 168 Planes +Block 2 168 Planes\\ 
-Block 3 8 Polygons +Block 3 8 Polygons\\ 
-Block 4 12 Verteces +Block 4 12 Vertices\\ 
-Block 5 4 Polygon Point/​Vertex Order +Block 5 4 Polygon Point/​Vertex Order\\ 
-Block 6 12 Normals +Block 6 12 Normals\\ 
-Block 7 4 Normal Order +Block 7 4 Normal Order\\ 
-Block 8 4 Colors [RGBA8] +Block 8 4 Colors [RGBA8]\\ 
-Block 9 4 Color Order  +Block 9 4 Color Order \\ 
-Block 10 4 Texture Point/​Vertex Order +Block 10 4 Texture Point/​Vertex Order\\ 
-.. (Blocks 11-17 never observed) +.. (Blocks 11-17 never observed)\\ 
-Block 18 8 Texture Vertex +Block 18 8 Texture Vertex\\ 
-Block 19 24 Unknown +Block 19 24 Unknown\\ 
-Block 20 8 Texture Map +Block 20 8 Texture Map\\ 
-Block 21 64 Texture Path Block (what purpose does this serve?) +Block 21 64 Texture Path Block (what purpose does this serve?)\\ 
-Block 22 108 Polygon / Texture Map +Block 22 108 Polygon / Texture Map\\ 
-Block 23 1 Plane Display +Block 23 1 Plane Display\\ 
-Block 24 4 Transformation +Block 24 4 Transformation\\ 
-Block 25 88 Scene Graph +Block 25 88 Scene Graph\\ 
-Block 26 64 Animation Sequence Identifer +Block 26 64 Animation Sequence Identifer\\ 
-Block 27 VAR Animation Sequence - data extention ​of block 26+Block 27 VAR Animation Sequence - data extension ​of block 26\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 1 (Header) (432 bytes)+Block 1 (Header) (432 bytes)\\
 Mainly serves to list address offsets for block sets 2-27, and the number of Mainly serves to list address offsets for block sets 2-27, and the number of
 blocks contained within each set.  Still, contains some values whose purpose blocks contained within each set.  Still, contains some values whose purpose
 I don't yet know. I don't yet know.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Data offset Block 27, size of Blocks 1 - 26 +0x0000 4 Data offset Block 27, size of Blocks 1 - 26\\ 
-0x0004 64 Filename +0x0004 64 Filename\\ 
-0x0044 64 Texture Filename (Minus dash) +0x0044 64 Texture Filename (Minus dash)\\ 
-0x0084 64 Date String +0x0084 64 Date String\\ 
-0x00C4 4 Unknown +0x00C4 4 Unknown\\ 
-0x00C8 4 Unknown +0x00C8 4 Unknown\\ 
-0x00CC 4 Unknown +0x00CC 4 Unknown\\ 
-0x00D0 4f Point1-x 'Main Plane'?​ +0x00D0 4f Point1-x 'Main Plane'?​\\ 
-0x00D4 4f Point1-y 'Main Plane'?​ +0x00D4 4f Point1-y 'Main Plane'?​\\ 
-0x00D8 4f Point1-z 'Main Plane'?​ +0x00D8 4f Point1-z 'Main Plane'?​\\ 
-0x00DC 4f Point4-x 'Main Plane'?​ +0x00DC 4f Point4-x 'Main Plane'?​\\ 
-0x00E0 4f Point4-y 'Main Plane'?​ +0x00E0 4f Point4-y 'Main Plane'?​\\ 
-0x00E4 4f Point4-z 'Main Plane'?​ +0x00E4 4f Point4-z 'Main Plane'?​\\ 
-0x00E8 4 Number blocks in Block 2 +0x00E8 4 Number blocks in Block 2\\ 
-0x00EC 4 Number blocks in Block 3 +0x00EC 4 Number blocks in Block 3\\ 
-0x00F0 4 Number blocks in Block 4 +0x00F0 4 Number blocks in Block 4\\ 
-0x00F4 4 Number blocks in Block 5 +0x00F4 4 Number blocks in Block 5\\ 
-0x00F8 4 Number blocks in Block 6 +0x00F8 4 Number blocks in Block 6\\ 
-0x00FC 4 Number blocks in Block 7 +0x00FC 4 Number blocks in Block 7\\ 
-0x0100 4 Number blocks in Block 8 +0x0100 4 Number blocks in Block 8\\ 
-0x0104 4 Number blocks in Block 9 +0x0104 4 Number blocks in Block 9\\ 
-0x0108 4 Number blocks in Block 10 +0x0108 4 Number blocks in Block 10\\ 
-0x010C 4 Number blocks in Block 11 (*) +0x010C 4 Number blocks in Block 11 (*)\\ 
-0x0110 4 Number blocks in Block 12 (*) +0x0110 4 Number blocks in Block 12 (*)\\ 
-0x0114 4 Number blocks in Block 13 (*) +0x0114 4 Number blocks in Block 13 (*)\\ 
-0x0118 4 Number blocks in Block 14 (*) +0x0118 4 Number blocks in Block 14 (*)\\ 
-0x011C 4 Number blocks in Block 15 (*) +0x011C 4 Number blocks in Block 15 (*)\\ 
-0x0120 4 Number blocks in Block 16 (*) +0x0120 4 Number blocks in Block 16 (*)\\ 
-0x0124 4 Number blocks in Block 17 (*) +0x0124 4 Number blocks in Block 17 (*)\\ 
-0x0128 4 Number blocks in Block 18 +0x0128 4 Number blocks in Block 18\\ 
-0x012C 4 Number blocks in Block 19 +0x012C 4 Number blocks in Block 19\\ 
-0x0130 4 Number blocks in Block 20 +0x0130 4 Number blocks in Block 20\\ 
-0x0134 4 Number blocks in Block 21 +0x0134 4 Number blocks in Block 21\\ 
-0x0138 4 Number blocks in Block 22 +0x0138 4 Number blocks in Block 22\\ 
-0x013C 4 Number blocks in Block 23 +0x013C 4 Number blocks in Block 23\\ 
-0x0140 4 Number blocks in Block 24 +0x0140 4 Number blocks in Block 24\\ 
-0x0144 4 Number blocks in Block 25 +0x0144 4 Number blocks in Block 25\\ 
-0x0148 4 Number blocks in Block 26 +0x0148 4 Number blocks in Block 26\\ 
-0x014C 4 Data offset Block 2 (always 1B0) +0x014C 4 Data offset Block 2 (always 1B0)\\ 
-0x0150 4 Data offset Block 3 +0x0150 4 Data offset Block 3\\ 
-0x0154 4 Data offset Block 4 +0x0154 4 Data offset Block 4\\ 
-0x0158 4 Data offset Block 5 +0x0158 4 Data offset Block 5\\ 
-0x015C 4 Data offset Block 6 +0x015C 4 Data offset Block 6\\ 
-0x0160 4 Data offset Block 7 +0x0160 4 Data offset Block 7\\ 
-0x0164 4 Data offset Block 8 +0x0164 4 Data offset Block 8\\ 
-0x0168 4 Data offset Block 9 +0x0168 4 Data offset Block 9\\ 
-0x016C 4 Data offset Block 10 +0x016C 4 Data offset Block 10\\ 
-0x0170 4 Data offset Block 11 +0x0170 4 Data offset Block 11\\ 
-0x0174 4 Data offset Block 12 +0x0174 4 Data offset Block 12\\ 
-0x0178 4 Data offset Block 13 +0x0178 4 Data offset Block 13\\ 
-0x017C 4 Data offset Block 14 +0x017C 4 Data offset Block 14\\ 
-0x0180 4 Data offset Block 15 +0x0180 4 Data offset Block 15\\ 
-0x0184 4 Data offset Block 16 +0x0184 4 Data offset Block 16\\ 
-0x0188 4 Data offset Block 17 +0x0188 4 Data offset Block 17\\ 
-0x018C 4 Data offset Block 18 +0x018C 4 Data offset Block 18\\ 
-0x0190 4 Data offset Block 19 +0x0190 4 Data offset Block 19\\ 
-0x0194 4 Data offset Block 20 +0x0194 4 Data offset Block 20\\ 
-0x0198 4 Data offset Block 21 +0x0198 4 Data offset Block 21\\ 
-0x019C 4 Data offset Block 22 +0x019C 4 Data offset Block 22\\ 
-0x01A0 4 Data offset Block 23 +0x01A0 4 Data offset Block 23\\ 
-0x01A4 4 Data offset Block 24 +0x01A4 4 Data offset Block 24\\ 
-0x01A8 4 Data offset Block 25 +0x01A8 4 Data offset Block 25\\ 
-0x01AC 4 Data offset Block 26 +0x01AC 4 Data offset Block 26\\ 
-* Always observed as 0.  No Blocks.+* Always observed as 0.  No Blocks.\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 2 (Plane) (168 bytes)+Block 2 (Plane) (168 bytes)\\
 Defines a "​plane"​. ​ Named because Paper Mario characters are composed mostly Defines a "​plane"​. ​ Named because Paper Mario characters are composed mostly
 of single quadrilateral planes, I'm defining a plane to be a collection of of single quadrilateral planes, I'm defining a plane to be a collection of
Line 143: Line 121:
 characters, a plane will contain only one polygon in one Block 22, but for 3D  characters, a plane will contain only one polygon in one Block 22, but for 3D 
 characters or 3D objects, a plane will almost always contain many polygons, ​ characters or 3D objects, a plane will almost always contain many polygons, ​
-which might be split accross ​more than one Block 22.+which might be split across ​more than one Block 22.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 64?​ Name String +0x0000 64?​ Name String\\ 
-0x0040 4 Index Block 4 (Starting Vertex) +0x0040 4 Index Block 4 (Starting Vertex)\\ 
-0x0044 4 Number Block 4 (Vertices in plane) +0x0044 4 Number Block 4 (Vertices in plane)\\ 
-0x0048 4 Unknown +0x0048 4 Unknown\\ 
-0x004C 4 Unknown +0x004C 4 Unknown\\ 
-0x0050 4 Unknown +0x0050 4 Unknown\\ 
-0x0054 4 Unknown +0x0054 4 Unknown\\ 
-0x0058 4 Index Block 18 (Starting Texture Vertex) +0x0058 4 Index Block 18 (Starting Texture Vertex)\\ 
-0x005C 4 Number Block 18 (Texture vertices in plane) +0x005C 4 Number Block 18 (Texture vertices in plane)\\ 
-0x0060 4 Index of Ending Vertex + 1? What purpose? +0x0060 4 Index of Ending Vertex + 1? What purpose?\\ 
-0x0064 4 Unknown +0x0064 4 Unknown\\ 
-0x0068 4 Unknown (Same as 0x0060?) +0x0068 4 Unknown (Same as 0x0060?)\\ 
-0x006C 4 Unknown +0x006C 4 Unknown\\ 
-0x0070 4 Unknown (Same as 0x0060?) +0x0070 4 Unknown (Same as 0x0060?)\\ 
-0x0074 4 Unknown +0x0074 4 Unknown\\ 
-0x0078 4 Unknown (Same as 0x0060?) +0x0078 4 Unknown (Same as 0x0060?)\\ 
-0x007C 4 Unknown +0x007C 4 Unknown\\ 
-0x0080 4 Unknown (Same as 0x0060?) +0x0080 4 Unknown (Same as 0x0060?)\\ 
-0x0084 4 Unknown +0x0084 4 Unknown\\ 
-0x0088 4 Unknown (Same as 0x0060?) +0x0088 4 Unknown (Same as 0x0060?)\\ 
-0x008C 4 Unknown +0x008C 4 Unknown\\ 
-0x0090 4 Unknown (Same as 0x0060?) +0x0090 4 Unknown (Same as 0x0060?)\\ 
-0x0094 4 Unknown +0x0094 4 Unknown\\ 
-0x0098 4 Index Block 22 +0x0098 4 Index Block 22\\ 
-0x009C 4 Num Block 22 +0x009C 4 Num Block 22\\ 
-0x00A0 4 Unknown (Observed values: 0*, 1, 2, 3) +0x00A0 4 Unknown (Observed values: 0*, 1, 2, 3)\\ 
-0x00A4 4 Unknown (Cull Options?) (Observed values: 1[=CullBack?​],​ 3*[=No Cull?]) +0x00A4 4 Unknown (Cull Options?) (Observed values: 1[=CullBack?​],​ 3*[=No Cull?])\\ 
-* Most common values+* Most common values\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 3 (Polygon) (8 bytes)+Block 3 (Polygon) (8 bytes)\\
 Defines a single polygon and the number of vertices that compose that polyon. Defines a single polygon and the number of vertices that compose that polyon.
 Also shows the relative index offset for Polygon Vertex Order Points (Block 5)  Also shows the relative index offset for Polygon Vertex Order Points (Block 5) 
 from the Polygon Vertex Order Point Index provided by the parent Block 22. from the Polygon Vertex Order Point Index provided by the parent Block 22.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Relative Polygon Point Index Offset (Also means number points +0x0000 4 Relative Polygon Point Index Offset (Also means number points ​previously ​defined by polygons in the current Block22)\\ 
- Previously ​defined by polygons in the current Block22) +0x0004 4 Number Points in polygon\\
-0x0004 4 Number Points in polygon+
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 4 (Vertex) (12 bytes)+Block 4 (Vertex) (12 bytes)\\
 Defines a single polygon within the model. ​ A vertex might be shared by many Defines a single polygon within the model. ​ A vertex might be shared by many
-polygons.  ​Verteces ​appear to represent a local assembly of sorts, and many+polygons.  ​Vertices ​appear to represent a local assembly of sorts, and many
 of the models will display as scattered sub-models until appropriate of the models will display as scattered sub-models until appropriate
 transformations are applied (presumably by a combination of Block25 and Block24). transformations are applied (presumably by a combination of Block25 and Block24).
-Some models however display perfectly assembled by the possitioning ​of the +Some models however display perfectly assembled by the positioning ​of the 
-verteces ​alone, even where other transformations are defined.+vertices ​alone, even where other transformations are defined.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4f X Coordinate +0x0000 4f X Coordinate\\ 
-0x0004 4f Y Coordinate +0x0004 4f Y Coordinate\\ 
-0x0008 4f Z Coordinate+0x0008 4f Z Coordinate\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 5 (Polygon Vertex Order) (4 bytes) +Block 5 (Polygon Vertex Order) (4 bytes)\\ 
-Defines the collection of verteces ​used for each polygon. ​ Because any polygon +Defines the collection of vertices ​used for each polygon. ​ Because any polygon 
-within a given Plane can potentially share the same verteces, the verteces +within a given Plane can potentially share the same vertices, the vertices 
-listed are from the same pool starting at the plane'​s ​vertexIndex, and ending +listed are from the same pool starting at the plane'​s ​vertixIndex, and ending 
-at vertexIndex ​+ the highest offset listed in a Block 5 in the given Plane.+at vertixIndex ​+ the highest offset listed in a Block 5 in the given Plane.
 Duplicate vertices listed indicates that the vertex is shared by more than Duplicate vertices listed indicates that the vertex is shared by more than
 one polygon. one polygon.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Index of vertex from base vertex of plane+0x0000 4 Index of vertex from base vertex of plane\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 6 (Normals) (12 bytes)+Block 6 (Normals) (12 bytes)\\
 Best guess is this defines normals for X, Y, and Z for each vertex in each Best guess is this defines normals for X, Y, and Z for each vertex in each
-polygon. ​ Lately I've had fairly ​possitive ​results where lighting affected+polygon. ​ Lately I've had fairly ​positive ​results where lighting affected
 the model. the model.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4f X Normal +0x0000 4f X Normal\\ 
-0x0004 4f Y Normal +0x0004 4f Y Normal\\ 
-0x0008 4f Z Normal+0x0008 4f Z Normal\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 7 (Normal Order) (4 bytes)+Block 7 (Normal Order) (4 bytes)\\
 Most of these values increment by 1 from start to finish, but this is not always Most of these values increment by 1 from start to finish, but this is not always
 true.  They define the order in which normals are applied, which is accessed by true.  They define the order in which normals are applied, which is accessed by
 Block 22. Block 22.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Index Block 6 (Normal)+0x0000 4 Index Block 6 (Normal)\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 8 (Color Values) (4 bytes)+Block 8 (Color Values) (4 bytes)\\
 Best guess is this defines color for each vertex in each polygon. ​ The color Best guess is this defines color for each vertex in each polygon. ​ The color
-value is represnted ​in RGBA8 format. ​ Most models are white for brightest+value is represented ​in RGBA8 format. ​ Most models are white for brightest
 possible textures under given lighting conditions, but some of the 3D models possible textures under given lighting conditions, but some of the 3D models
 have color defined. ​ I'm still having difficulty properly displaying this data have color defined. ​ I'm still having difficulty properly displaying this data
 in a model. in a model.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4u Color value in RGBA8 format+0x0000 4u Color value in RGBA8 format\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 9 (Color Order) (4 bytes) +Block 9 (Color Order) (4 bytes)\\ 
-Same as Block 7, but for colors. ​ Why is this levle of indirection needed anyway?+Same as Block 7, but for colors. ​ Why is this level of indirection needed anyway?
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Index Block 8 (Color)+0x0000 4 Index Block 8 (Color)\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 10 (Texture Point/​Vertex Order) (4 bytes)+Block 10 (Texture Point/​Vertex Order) (4 bytes)\\
 Similar to Block 5, but this defines the order of vertices used in polygons Similar to Block 5, but this defines the order of vertices used in polygons
 for applying textures. ​ In many models, this block will be identical to Block 5. for applying textures. ​ In many models, this block will be identical to Block 5.
-In cases where no texture is defined for a Block22, ​verteces ​for polygons within+In cases where no texture is defined for a Block22, ​vertices ​for polygons within
 that Block22 will not be listed. ​ In a model with no textures, this block will that Block22 will not be listed. ​ In a model with no textures, this block will
 be empty. be empty.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Index of vertex from base vertex of plane+0x0000 4 Index of vertex from base vertex of plane\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 18 (Texture Vertex) (8 bytes)+Block 18 (Texture Vertex) (8 bytes)\\
 Defines X Y coordinates for mapping a texture. Defines X Y coordinates for mapping a texture.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 s +0x0000 4 s\\ 
-0x0004 4 t+0x0004 4 t\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 19 (Unknown) (24 bytes)+Block 19 (Unknown) (24 bytes)\\
 I do not know what this block does.  In every model I've checked, the first I do not know what this block does.  In every model I've checked, the first
 3 floats are 0, the next 2 are 1, and the last float is 0.  This block may be 3 floats are 0, the next 2 are 1, and the last float is 0.  This block may be
 texture related as it has the same number of blocks as Block 20 (Texture Map), texture related as it has the same number of blocks as Block 20 (Texture Map),
 and is located among other texture-related blocks. ​ I also have not seen a and is located among other texture-related blocks. ​ I also have not seen a
-reference to indeces ​in this block, but there could be an implied relationship+reference to indices ​in this block, but there could be an implied relationship
 between these blocks and Texture Map Blocks. between these blocks and Texture Map Blocks.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4f Unknown +0x0000 4f Unknown\\ 
-0x0004 4f Unknown +0x0004 4f Unknown\\ 
-0x0008 4f Unknown +0x0008 4f Unknown\\ 
-0x000C 4f Unknown +0x000C 4f Unknown\\ 
-0x0010 4f Unknown +0x0010 4f Unknown\\ 
-0x0014 4f Unknown+0x0014 4f Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 20 (Texture Map) (8 bytes)+Block 20 (Texture Map) (8 bytes)\\
 The first value in this block points to one of the textures defined in the The first value in this block points to one of the textures defined in the
 Texture path Block (Block 21).  The second value is usually, but not always, 0. Texture path Block (Block 21).  The second value is usually, but not always, 0.
Line 293: Line 270:
 a given Block 22. a given Block 22.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Texture index +0x0000 4 Texture index\\ 
-0x0004 4 Unknown+0x0004 4 Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 21 (Texture Path Block) (64 bytes)+Block 21 (Texture Path Block) (64 bytes)\\
 This block has a nice text representation of a texture defined in an associated This block has a nice text representation of a texture defined in an associated
 TPL file.  The index at the second value doesn'​t point to any other block, and TPL file.  The index at the second value doesn'​t point to any other block, and
-no block lists indeces ​of itself, so it probably points to a texture index within+no block lists indices ​of itself, so it probably points to a texture index within
 the TPL file. the TPL file.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Unknown +0x0000 4 Unknown\\ 
-0x0004 4 Index?​ (index of a texture in the associated TPL) +0x0004 4 Index?​ (index of a texture in the associated TPL)\\ 
-0x0008 4 Unknown +0x0008 4 Unknown\\ 
-0x000C ?​ Name String +0x000C ?​ Name String\\ 
-...+...\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 22 (Polygon / Texture Map) (108 bytes)+Block 22 (Polygon / Texture Map) (108 bytes)\\
 This block actually maps more than just textures, but is more like a sub-plane. This block actually maps more than just textures, but is more like a sub-plane.
 This block defines the number of polygons within it and their index offsets, as This block defines the number of polygons within it and their index offsets, as
Line 320: Line 297:
 of the last 7 values which always appear to be 0. of the last 7 values which always appear to be 0.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Unknown +0x0000 4 Unknown\\ 
-0x0004 4 Unknown +0x0004 4 Unknown\\ 
-0x0008 4 Unknown +0x0008 4 Unknown\\ 
-0x000C 4 Unknown +0x000C 4 Unknown\\ 
-0x0010 4 Texture Map Index (Index Block 20) +0x0010 4 Texture Map Index (Index Block 20)\\ 
-0x0014 4 Unknown +0x0014 4 Unknown\\ 
-0x0018 4 Unknown +0x0018 4 Unknown\\ 
-0x001C 4 Unknown +0x001C 4 Unknown\\ 
-0x0020 4 Unknown +0x0020 4 Unknown\\ 
-0x0024 4 Unknown +0x0024 4 Unknown\\ 
-0x0028 4 Unknown +0x0028 4 Unknown\\ 
-0x002C 4 Unknown +0x002C 4 Unknown\\ 
-0x0030 4 Unknown +0x0030 4 Unknown\\ 
-0x0034 4 Unknown +0x0034 4 Unknown\\ 
-0x0038 4 Polygon Index (Index Block 3) +0x0038 4 Polygon Index (Index Block 3)\\ 
-0x003C 4 Number Polygons +0x003C 4 Number Polygons\\ 
-0x0040 4 Index Block 5 +0x0040 4 Index Block 5\\ 
-0x0044 4 Index Block 7 +0x0044 4 Index Block 7\\ 
-0x0048 4 Index Block 9 +0x0048 4 Index Block 9\\ 
-0x004C 4 Index Block 10 +0x004C 4 Index Block 10\\ 
-0x0050 4 Unknown +0x0050 4 Unknown\\ 
-0x0054 4 Unknown +0x0054 4 Unknown\\ 
-0x0058 4 Unknown +0x0058 4 Unknown\\ 
-0x005C 4 Unknown +0x005C 4 Unknown\\ 
-0x0060 4 Unknown +0x0060 4 Unknown\\ 
-0x0064 4 Unknown +0x0064 4 Unknown\\ 
-0x0068 4 Unknown+0x0068 4 Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 23 (Block25 Plane Control) (1 byte)+Block 23 (Block25 Plane Control) (1 byte)\\
 I've only seen this value set to 0 and 1.  It's referenced by Block 25, and I've only seen this value set to 0 and 1.  It's referenced by Block 25, and
 when used to hide the display of Block25 objects that reference a 0 here, objects when used to hide the display of Block25 objects that reference a 0 here, objects
Line 358: Line 335:
 associated with that Block 25. associated with that Block 25.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 1 (0=Hide Block22, 1=Display Block22)?+0x0000 1 (0=Hide Block22, 1=Display Block22)?\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 24 (Transformations) (4 bytes)+Block 24 (Transformations) (4 bytes)\\
 Referenced by Block 25, these come in sets of 24 and are broken down into 8 Referenced by Block 25, these come in sets of 24 and are broken down into 8
 sets of three, which are used for translating,​ scaling, and rotating the objects sets of three, which are used for translating,​ scaling, and rotating the objects
Line 375: Line 352:
 please send me an email. please send me an email.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4f Float value for various XYZ Translation,​Scaling,​Rotation+0x0000 4f Float value for various XYZ Translation,​Scaling,​Rotation\\
  
-Best Guess (Works 99% of the time) of order and application of transformations +Best Guess (Works 99% of the time) of order and application of transformations\\ 
-Order appled: 1, 7, 2, 8, 4, 5, 3, 6+Order appled: 1, 7, 2, 8, 4, 5, 3, 6\\
  
-subset 1: 0-2: Translation +subset 1: 0-2: Translation\\ 
-subset 2: 3-5: Scale +subset 2: 3-5: Scale\\ 
-subset 3: 6-8: Rotation (half-angle,​ ZYX) +subset 3: 6-8: Rotation (half-angle,​ ZYX)\\ 
-subset 4: 9-11: Rotation (full-angle,​ ZYX) +subset 4: 9-11: Rotation (full-angle,​ ZYX)\\ 
-subset 5: 12-14: Rotation Translation +subset 5: 12-14: Rotation Translation\\ 
-subset 6: 15-17: Rotation Counter-Translation +subset 6: 15-17: Rotation Counter-Translation\\ 
-subset 7: 18-20: Scale Translation +subset 7: 18-20: Scale Translation\\ 
-subset 8: 21-23: Scale Counter-Translation+subset 8: 21-23: Scale Counter-Translation\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 25 (Scene Graph) (88 bytes)+Block 25 (Scene Graph) (88 bytes)\\
 This block is like the superset of all others. ​ After the description,​ the first This block is like the superset of all others. ​ After the description,​ the first
 2 values I believe define a hierarchy of Planes. ​ The first value references 2 values I believe define a hierarchy of Planes. ​ The first value references
Line 398: Line 375:
 to put several children under a single parent. ​ It's assumed that the children to put several children under a single parent. ​ It's assumed that the children
 inherit all transformations from their parents before they are drawn. ​ The last inherit all transformations from their parents before they are drawn. ​ The last
-value appears to be assoicated ​with joints. ​ The name string references planes,+value appears to be associated ​with joints. ​ The name string references planes,
 locators, groups, joints, and a few other things. ​ I don't know what the real locators, groups, joints, and a few other things. ​ I don't know what the real
 difference is between these (planes are obvious), but those designated as a joint difference is between these (planes are obvious), but those designated as a joint
 have their last value set to 1 instead of 0. have their last value set to 1 instead of 0.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 64 Name String +0x0000 64 Name String\\ 
-0x0040 4 Additional Child Block25 of parent Block25 +0x0040 4 Additional Child Block25 of parent Block25\\ 
-0x0044 4 Child Block25 +0x0044 4 Child Block25\\ 
-0x0048 4 Index Block 2 +0x0048 4 Index Block 2\\ 
-0x004C 4 Index Block 23 +0x004C 4 Index Block 23\\ 
-0x0050 4 Index Block 24 +0x0050 4 Index Block 24\\ 
-0x0054 4 Joint Related?+0x0054 4 Joint Related?\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 26 (Animation Sequence Identifier) (64 bytes)+Block 26 (Animation Sequence Identifier) (64 bytes)\\
 This block acts as a pointer to an animation sequence. ​ It doesn'​t appear to be This block acts as a pointer to an animation sequence. ​ It doesn'​t appear to be
 tied to any other block, and is used to track animation sequences which can't tied to any other block, and is used to track animation sequences which can't
 be tracked in the main header because of their variable size. be tracked in the main header because of their variable size.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 42?​ Name String +0x0000 42?​ Name String\\ 
-0x003C 4 Data offset to associated Block 27 (Animation Sequence) +0x003C 4 Data offset to associated Block 27 (Animation Sequence)\\
  
-#################################################################################​ 
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27 (Variable Size, block substructure) ANIMATION SEQUENCE+Block 27 (Variable Size, block substructure) ANIMATION SEQUENCE\\
 Each Block 27 contains an animation sequence. ​ So far texture animation (as in Each Block 27 contains an animation sequence. ​ So far texture animation (as in
 changing of textures) is the only identified form of animation, but it appears changing of textures) is the only identified form of animation, but it appears
Line 435: Line 410:
 designed to play through once.  I can't yet tell them apart definitively. designed to play through once.  I can't yet tell them apart definitively.
  
-Block 27.1 (Header) (92 bytes) +Block 27.1 (Header) (92 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Size of block +0x0000 4 Size of block\\ 
-0x0004 4 Number Block 27.2 +0x0004 4 Number Block 27.2\\ 
-0x0008 4 Number Block 27.3 +0x0008 4 Number Block 27.3\\ 
-0x000C 4 Number Block 27.4 +0x000C 4 Number Block 27.4\\ 
-0x0010 4 Number Block 27.5 +0x0010 4 Number Block 27.5\\ 
-0x0014 4 Number Block 27.6 +0x0014 4 Number Block 27.6\\ 
-0x0018 4 Number Block 27.7 +0x0018 4 Number Block 27.7\\ 
-0x001C 4 Number Block 27.8 +0x001C 4 Number Block 27.8\\ 
-0x0020 4 Number Block 27.9 +0x0020 4 Number Block 27.9\\ 
-0x0024 4 Relative Data Offset Block 27.2 +0x0024 4 Relative Data Offset Block 27.2\\ 
-0x0028 4 Relative Data Offset Block 27.3 +0x0028 4 Relative Data Offset Block 27.3\\ 
-0x002C 4 Relative Data Offset Block 27.4 +0x002C 4 Relative Data Offset Block 27.4\\ 
-0x0030 4 Relative Data Offset Block 27.5 +0x0030 4 Relative Data Offset Block 27.5\\ 
-0x0034 4 Relative Data Offset Block 27.6 +0x0034 4 Relative Data Offset Block 27.6\\ 
-0x0038 4 Relative Data Offset Block 27.7 +0x0038 4 Relative Data Offset Block 27.7\\ 
-0x003C 4 Relative Data Offset Block 27.8 +0x003C 4 Relative Data Offset Block 27.8\\ 
-0x0040 4 Relative Data Offset Block 27.9 +0x0040 4 Relative Data Offset Block 27.9\\ 
-0x0044 4f Unknown +0x0044 4f Unknown\\ 
-0x0048 4f Unknown +0x0048 4f Unknown\\ 
-0x004C 4f Unknown +0x004C 4f Unknown\\ 
-0x0050 4f Unknown +0x0050 4f Unknown\\ 
-0x0054 4f Unknown +0x0054 4f Unknown\\ 
-0x0058 4f Unknown+0x0058 4f Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.2 (12 bytes) +Block 27.2 (12 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Unknown (0=Single Pass? / 1=Loop?) +0x0000 4 Unknown (0=Single Pass? / 1=Loop?)\\ 
-0x0004 4 Unknown +0x0004 4 Unknown\\ 
-0x0008 4f Length of time in (milliseconds?​) animation sequence lasts+0x0008 4f Length of time in (milliseconds?​) animation sequence lasts\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.3 (Frame List) (44 bytes) +Block 27.3 (Frame List) (44 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4f Time value in (milliseconds?​) associated lines are evaluated +0x0000 4f Time value in (milliseconds?​) associated lines are evaluated\\ 
-0x0004 4 Index Block 27.4 +0x0004 4 Index Block 27.4\\ 
-0x0008 4 Num Associated Block 27.4 +0x0008 4 Num Associated Block 27.4\\ 
-0x000C 4 Index Block 27.5 +0x000C 4 Index Block 27.5\\ 
-0x0010 4 Num Associated Block 27.5 +0x0010 4 Num Associated Block 27.5\\ 
-0x0014 4 Index Block 27.6 +0x0014 4 Index Block 27.6\\ 
-0x0018 4 Num Associated Block 27.6 +0x0018 4 Num Associated Block 27.6\\ 
-0x001C 4 Index Block 27.7 +0x001C 4 Index Block 27.7\\ 
-0x0020 4 Num Associated Block 27.7 +0x0020 4 Num Associated Block 27.7\\ 
-0x0024 4 Index Block 27.8 +0x0024 4 Index Block 27.8\\ 
-0x0028 4 Num Associated Block 27.8+0x0028 4 Num Associated Block 27.8\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.4 (4 bytes) +Block 27.4 (4 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4* Unknown+0x0000 4* Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.5 (4 bytes) +Block 27.5 (4 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4* Unknown (4 signed bytes?)+0x0000 4* Unknown (4 signed bytes?)\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.6 (12 bytes)+Block 27.6 (12 bytes)\\
 I don't know why this block has 12 bytes. ​ The first 2 bytes are used in I don't know why this block has 12 bytes. ​ The first 2 bytes are used in
 changing or animating textures. ​ The first byte identifies the texture Map changing or animating textures. ​ The first byte identifies the texture Map
Line 503: Line 478:
 it may or may not depend on the other two unknown bytes. ​ I don't know. it may or may not depend on the other two unknown bytes. ​ I don't know.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 1 Index Block 20 (Texture Map) (See Block 27.7 for indexing) +0x0000 1 Index Block 20 (Texture Map) (See Block 27.7 for indexing)\\ 
-0x0001 1 Number to add to Texture Index of Block 20. +0x0001 1 Number to add to Texture Index of Block 20.\\ 
-0x0002 1 Unknown (0 or -1?) +0x0002 1 Unknown (0 or -1?)\\ 
-0x0003 1 Unknown (0 or -1?)+0x0003 1 Unknown (0 or -1?)\\
  
-0x0004 4* Unknown +0x0004 4* Unknown\\ 
-0x0008 4* Unknown+0x0008 4* Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.7 (Plane Control) (4 bytes)+Block 27.7 (Plane Control) (4 bytes)\\
 This block seems responsible for revealing and hiding the different planes. This block seems responsible for revealing and hiding the different planes.
 It also appears that the format is broken down into 4*n bytes where n is the It also appears that the format is broken down into 4*n bytes where n is the
Line 520: Line 495:
 byte identifying the index of the block25 or block23, and the second being set byte identifying the index of the block25 or block23, and the second being set
 to 1 or -1, which reveal and hide the planes respectively. ​ The index byte is only to 1 or -1, which reveal and hide the planes respectively. ​ The index byte is only
-the true index for the first pair in the set.  Any indeces ​after that are+the true index for the first pair in the set.  Any indices ​after that are
 calculated by adding the index value to all the previous index values. ​ This still  calculated by adding the index value to all the previous index values. ​ This still 
 leaves the second n byte pairs, which may not be paired at all.  Either way,  leaves the second n byte pairs, which may not be paired at all.  Either way, 
 I don't know their purpose. I don't know their purpose.
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-2x+0x0000 1 Index Block25 or Block23 +2x+0x0000 1 Index Block25 or Block23\\ 
-2x+0x0001 1 Reveal (1) or Hide (-1) +2x+0x0001 1 Reveal (1) or Hide (-1)\\ 
-2n+2x+0x0?​ 1 Unknown +2n+2x+0x0?​ 1 Unknown\\ 
-2n+2x+0x1?​ 1 Unknown +2n+2x+0x1?​ 1 Unknown\\ 
-for a set of n blocks with x as the current index+for a set of n blocks with x as the current index\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.8 (4 bytes)+Block 27.8 (4 bytes)\\
 Possible Purpose: Pivot animation, IE general animation Possible Purpose: Pivot animation, IE general animation
  
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4* Unknown+0x0000 4* Unknown\\
  
 --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
-Block 27.9 (8 bytes) +Block 27.9 (8 bytes)\\ 
-Rel Addr SIZE Description +Rel Addr SIZE Description\\ 
-0x0000 4 Unknown +0x0000 4 Unknown\\ 
-0x0004 4 Unknown+0x0004 4 Unknown\\
  
 * Unknown representation * Unknown representation