PATH (File Format): Difference between revisions
Jump to navigation
Jump to search
>Aruki mNo edit summary |
imported>Jackoalan (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 20: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 |