Difference between revisions of "PATH (File Format)"
From Retro Modding Wiki
m |
(Initial PATH doc) |
||
| Line 1: | Line 1: | ||
| − | The '''PATH format''' is used to store | + | {{research|2|The BSP tables at the end need research}} |
| + | The '''PATH format''' is used to store an area's [[wikipedia:Navigation Mesh]] in the ''Metroid Prime'' series. | ||
| + | Like navigation meshes in many other game engines (Unity, Source, etc...), the PATH format represents an ''n-gon mesh'' | ||
| + | partitioned into a BSP tree for rapid queries. | ||
| + | |||
| + | == Format == | ||
| + | |||
| + | {| class="wikitable" | ||
| + | !Data Type | ||
| + | !Description | ||
| + | !Notes | ||
| + | |- | ||
| + | |long | ||
| + | |Version | ||
| + | |Always 0x4 in GM8E-0-00 and Trilogy release. | ||
| + | |- | ||
| + | |long | ||
| + | |Vertex count | ||
| + | | | ||
| + | |- | ||
| + | |[[#Vertex Entry]] | ||
| + | |Vertex Table | ||
| + | | | ||
| + | |- | ||
| + | |long | ||
| + | |Edge count | ||
| + | | | ||
| + | |- | ||
| + | |[[#Edge Entry]] | ||
| + | |Edge Table | ||
| + | | | ||
| + | |- | ||
| + | |long | ||
| + | |Polygon count | ||
| + | | | ||
| + | |- | ||
| + | |[[#Polygon Entry]] | ||
| + | |Polygon Table | ||
| + | | | ||
| + | |- | ||
| + | |Unknown | ||
| + | |BSP Tables | ||
| + | | | ||
| + | |- | ||
| + | |} | ||
| + | |||
| + | === Vertex Entry === | ||
| + | |||
| + | {| class="wikitable" | ||
| + | !Offset | ||
| + | !Length | ||
| + | !Data Type | ||
| + | !Description | ||
| + | !Notes | ||
| + | |- | ||
| + | |0x0 | ||
| + | |12 | ||
| + | |float3 | ||
| + | |Vertex Position | ||
| + | | | ||
| + | |- | ||
| + | |0xC | ||
| + | |12 | ||
| + | |float3 | ||
| + | |Vertex Normal | ||
| + | | | ||
| + | |} | ||
| + | |||
| + | === Edge Entry === | ||
| + | |||
| + | {| class="wikitable" | ||
| + | !Offset | ||
| + | !Length | ||
| + | !Data Type | ||
| + | !Description | ||
| + | !Notes | ||
| + | |- | ||
| + | |0x0 | ||
| + | |4 | ||
| + | |long | ||
| + | |Polygon A index | ||
| + | | | ||
| + | |- | ||
| + | |0x4 | ||
| + | |4 | ||
| + | |long | ||
| + | |Polygon B index | ||
| + | | | ||
| + | |- | ||
| + | |0x8 | ||
| + | |4 | ||
| + | |float | ||
| + | |Edge Length | ||
| + | | | ||
| + | |- | ||
| + | |0xC | ||
| + | |4 | ||
| + | |float | ||
| + | |Unknown Normalized [0,1] Value | ||
| + | |Speculation: ''Cost'' of edge traversal (i.e. edge steepness). Characters may have a set threshold when selecting edges to traverse. | ||
| + | |} | ||
| + | |||
| + | === Polygon Entry === | ||
| + | |||
| + | {| class="wikitable" | ||
| + | !Offset | ||
| + | !Length | ||
| + | !Data Type | ||
| + | !Description | ||
| + | !Notes | ||
| + | |- | ||
| + | |0x0 | ||
| + | |4 | ||
| + | |long | ||
| + | |Vertex Count | ||
| + | |Specifies range of vertices | ||
| + | |- | ||
| + | |0x4 | ||
| + | |4 | ||
| + | |long | ||
| + | |Vertex Start Index | ||
| + | |References into [[#Vertex Table]] | ||
| + | |- | ||
| + | |0x8 | ||
| + | |4 | ||
| + | |long | ||
| + | |Edge Count | ||
| + | |Specifies range of edges | ||
| + | |- | ||
| + | |0xC | ||
| + | |4 | ||
| + | |long | ||
| + | |Edge Start Index | ||
| + | |References into [[#Edge Table]] | ||
| + | |- | ||
| + | |0x10 | ||
| + | |2 | ||
| + | |short | ||
| + | |Unknown | ||
| + | |Range [1,7] | ||
| + | |- | ||
| + | |0x12 | ||
| + | |2 | ||
| + | |short | ||
| + | |Unknown meta-data | ||
| + | |Possible Values (1,2,4) | ||
| + | |- | ||
| + | |0x14 | ||
| + | |4 | ||
| + | |float | ||
| + | |Polygon area | ||
| + | | | ||
| + | |- | ||
| + | |0x18 | ||
| + | |12 | ||
| + | |float3 | ||
| + | |Polygon normal | ||
| + | | | ||
| + | |- | ||
| + | |0x24 | ||
| + | |4 | ||
| + | |long | ||
| + | |Self-index | ||
| + | |References polygon's own index in table | ||
| + | |- | ||
| + | |0x28 | ||
| + | |12 | ||
| + | |float3 | ||
| + | |AABB-min | ||
| + | | | ||
| + | |- | ||
| + | |0x34 | ||
| + | |12 | ||
| + | |float3 | ||
| + | |AABB-max | ||
| + | | | ||
| + | |- | ||
| + | |0x40 | ||
| + | |12 | ||
| + | |float3 | ||
| + | |Polygon center position | ||
| + | | | ||
| + | |- | ||
| + | |0x4C | ||
| + | |4 | ||
| + | |long | ||
| + | |Self-index | ||
| + | |A duplicate of the 0x24 value for some reason | ||
| + | |} | ||
| + | |||
| − | |||
[[Category:File Formats]] | [[Category:File Formats]] | ||
Revision as of 14:05, 21 February 2015
| This file format needs more research The BSP tables at the end need research |
The PATH format is used to store an area's wikipedia:Navigation Mesh in the Metroid Prime series. Like navigation meshes in many other game engines (Unity, Source, etc...), the PATH format represents an n-gon mesh partitioned into a BSP tree for rapid queries.
Format
| Data Type | Description | Notes |
|---|---|---|
| long | Version | Always 0x4 in GM8E-0-00 and Trilogy release. |
| long | Vertex count | |
| #Vertex Entry | Vertex Table | |
| long | Edge count | |
| #Edge Entry | Edge Table | |
| long | Polygon count | |
| #Polygon Entry | Polygon Table | |
| Unknown | BSP Tables |
Vertex Entry
| Offset | Length | Data Type | Description | Notes |
|---|---|---|---|---|
| 0x0 | 12 | float3 | Vertex Position | |
| 0xC | 12 | float3 | Vertex Normal |
Edge Entry
| Offset | Length | Data Type | Description | Notes |
|---|---|---|---|---|
| 0x0 | 4 | long | Polygon A index | |
| 0x4 | 4 | long | Polygon B index | |
| 0x8 | 4 | float | Edge Length | |
| 0xC | 4 | float | Unknown Normalized [0,1] Value | Speculation: Cost of edge traversal (i.e. edge steepness). Characters may have a set threshold when selecting edges to traverse. |
Polygon Entry
| Offset | Length | Data Type | Description | Notes |
|---|---|---|---|---|
| 0x0 | 4 | long | Vertex Count | Specifies range of vertices |
| 0x4 | 4 | long | Vertex Start Index | References into #Vertex Table |
| 0x8 | 4 | long | Edge Count | Specifies range of edges |
| 0xC | 4 | long | Edge Start Index | References into #Edge Table |
| 0x10 | 2 | short | Unknown | Range [1,7] |
| 0x12 | 2 | short | Unknown meta-data | Possible Values (1,2,4) |
| 0x14 | 4 | float | Polygon area | |
| 0x18 | 12 | float3 | Polygon normal | |
| 0x24 | 4 | long | Self-index | References polygon's own index in table |
| 0x28 | 12 | float3 | AABB-min | |
| 0x34 | 12 | float3 | AABB-max | |
| 0x40 | 12 | float3 | Polygon center position | |
| 0x4C | 4 | long | Self-index | A duplicate of the 0x24 value for some reason |