Difference between revisions of "MAPA (File Format)"

From Retro Modding Wiki
Jump to: navigation, search
(Header)
(MP2 Types)
 
(13 intermediate revisions by 4 users not shown)
Line 1: Line 1:
The '''.MAPA file format''' defines the minimap models used in the Metroid Prime series. MAPA or '''MAP A'''rea consists of several sections: The header, Point Of Interest entries, Vertices, Primitive Headers, and the primitives.
+
The '''.MAPA file format''' defines the minimap models used in the Metroid Prime series. MAPA or '''MAP A'''rea consists of several sections: The header, Mappable Object entries, Vertices, Primitive Headers, and the primitives.
  
{{research|2|A few things are unknown in the header and POI Entries}}
+
{{research|2|A few things are unknown in the header and Mappable Object Entries}}
  
 
__TOC__
 
__TOC__
 
== Format ==
 
== Format ==
 
=== Header ===
 
=== Header ===
The header is very straight forward, and has some minor differences depending on version, the unknown values don't seem to do anything, however not much research has been put into them.
+
The header is very straightforward, and has some minor differences depending on version.
 
+
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 35: Line 34:
 
|-
 
|-
 
|u32
 
|u32
|{{unknown|Unknown}}
+
|'''Visibility Mode'''; <ol start=0><li>Always Visible (Map Universe Area)</li><li>Visible on Visit or Map Station (most MP1 areas)</li><li>Visible on Visit only (latter areas of Ruins and Phendrana)</li><li>Never Visible</li></ol>
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
|CAABox
+
|{{AABox}}
 
|'''Bounding Box'''
 
|'''Bounding Box'''
 
|{{check}}
 
|{{check}}
Line 46: Line 45:
 
|{{check}}
 
|{{check}}
 
|-
 
|-
|u32
+
|{{Vector3f}}
|{{unknown|Unknown}}
+
|'''Map Adjustment'''
 
|{{nocheck}}
 
|{{nocheck}}
 
|{{check}}
 
|{{check}}
Line 55: Line 54:
 
|{{unknown|Unknown}}
 
|{{unknown|Unknown}}
 
|{{nocheck}}
 
|{{nocheck}}
|{{check}}
+
|{{nocheck}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
 
|u32
 
|u32
|{{unknown|Unknown}}
+
|'''Mappable Object Count'''
|{{nocheck}}
+
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
|-
 
|u32
 
|{{unknown|Unknown}}
 
|{{nocheck}}
 
|{{nocheck}}
 
 
|{{check}}
 
|{{check}}
 
|-
 
|-
 
|u32
 
|u32
|'''POI Count'''
+
|'''Vertex Count'''
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
Line 77: Line 70:
 
|-
 
|-
 
|u32
 
|u32
|'''Vertex Count'''
+
|'''Primitive Count'''
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
Line 83: Line 76:
 
|-
 
|-
 
|u32
 
|u32
|'''Primitive Count'''
+
|'''Environment Variable Section Size'''
|{{check}}
+
|{{nocheck}}
 +
|{{nocheck}}
 
|{{check}}
 
|{{check}}
 +
|-
 +
|u32
 +
|'''Environment Variable Count'''
 +
|{{nocheck}}
 +
|{{nocheck}}
 
|{{check}}
 
|{{check}}
 +
|-
 +
| colspan=5 {{unknown|End of Header}}
 
|}
 
|}
  
Line 105: Line 106:
 
|}
 
|}
  
=== Point of Interest ===
+
=== Environment Variables ===
A Point of Interest in the Metroid Prime series can include: Mission Objectives, Elevators, Doors, Map Stations, and Missile Stations. Each Point of Interest entry consists of the following struct:
+
Only exists in Corruption; used for some areas with Landing Sites.
 +
{|class="wikitable"
 +
!Type
 +
!Count
 +
!Description
 +
|-
 +
|string
 +
|Environment Variable Count
 +
|'''Environment Variable'''
 +
|-
 +
| colspan=3 {{unknown|Pad to 4 bytes}}
 +
|-
 +
| colspan=3 {{unknown|End of Environment Variables}}
 +
|}
 +
 
 +
=== Mappable Objects ===
 +
A Mappable Object in the Metroid Prime series can include: Elevators, Doors, and Save/Missile Stations. Each Mappable Object entry consists of the following struct:
 
{|class="wikitable"
 
{|class="wikitable"
 
!Type
 
!Type
Line 114: Line 131:
 
|-
 
|-
 
|u32
 
|u32
|{{unknown|Unknown}}
+
|'''Type'''; See table below for MP1 and MP2 types
|{{nocheck}}
+
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
 
|u32
 
|u32
|'''Type'''; All valid values are not currently known
+
|'''Visibility Mode'''; <ol start=0><li>Always Visible</li><li>Visible on Map Station or Area Visit</li><li>Visible on Door Visit</li><li>Never Visible</li><li>Visible on Map Station or Area Visit</li></ol>
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
 
|u32
 
|u32
|{{unknown|Unknown}}
+
|'''Editor ID'''; Same ID format as SCLY, indicates associated world object
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
|u16
+
|[[Saved State ID]]
|{{unknown|Unknown}}
+
|'''Saved State ID'''
|{{check}}
+
 
|{{nocheck}}
 
|{{nocheck}}
|-
 
|u16
 
|'''ID'''; Which door, elevator etc.
 
 
|{{check}}
 
|{{check}}
|{{nocheck}}
 
 
|-
 
|-
|CVector4f
+
|u32
 
|{{unknown|Unknown}}
 
|{{unknown|Unknown}}
|{{nocheck}}
 
|{{check}}
 
|-
 
|u32
 
|'''Padding'''; always -1
 
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
|CTransform4f
+
|{{Transform4f}}
|'''Tranform Matrix''' The Point of Interest's position in '''world''' space.
+
|'''Transform Matrix''' The Mappable Object's position in '''world''' space.
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|-
 
|-
 
|u32 * 4
 
|u32 * 4
|'''Padding'''; four values of -1
+
|{{unknown|Unknown}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 
|{{check}}
 +
|-
 +
| colspan=4 {{unknown|End of Mappable Object}}
 +
|}
 +
 +
==== MP1 Types ====
 +
{|class="wikitable"
 +
!Type
 +
!Description
 +
|-
 +
|0
 +
|Normal Door
 +
|-
 +
|1
 +
|Shield Door
 +
|-
 +
|2
 +
|Ice Door
 +
|-
 +
|3
 +
|Wave Door
 +
|-
 +
|4
 +
|Plasma Door
 +
|-
 +
|5
 +
|Big Door
 +
|-
 +
|6
 +
|Big Door 2
 +
|-
 +
|7
 +
|Ice Door Ceiling
 +
|-
 +
|8
 +
|Ice Door Floor
 +
|-
 +
|9
 +
|Wave Door Ceiling
 +
|-
 +
|10
 +
|Wave Door Floor
 +
|-
 +
|11
 +
|Plasma Door Ceiling
 +
|-
 +
|12
 +
|Plasma Door Floor
 +
|-
 +
|13
 +
|Ice Door Floor 2
 +
|-
 +
|14
 +
|Wave Door Floor 2
 +
|-
 +
|15
 +
|Plasma Door Floor 2
 +
|-
 +
|27
 +
|Down Arrow Yellow (Maintenance Tunnel)
 +
|-
 +
|28
 +
|Up Arrow Yellow (Phazon Processing Center)
 +
|-
 +
|29
 +
|Down Arrow Green (Elevator A)
 +
|-
 +
|30
 +
|Up Arrow Green (Elite Control Access)
 +
|-
 +
|31
 +
|Down Arrow Red (Elevator B)
 +
|-
 +
|32
 +
|Up Arrow Red (Fungal Hall Access)
 +
|-
 +
|33
 +
|Elevator
 +
|-
 +
|34
 +
|Save Station
 +
|-
 +
|37
 +
|Missile Station
 +
|}
 +
 +
 +
==== MP2 Types ====
 +
{|class="wikitable"
 +
!Type
 +
!Description
 +
|-
 +
|0
 +
|Normal Door
 +
|-
 +
|1
 +
|Missile Door
 +
|-
 +
|2
 +
|Dark Door
 +
|-
 +
|3
 +
|Annihilator Door
 +
|-
 +
|4
 +
|Light Door
 +
|-
 +
|5
 +
|Super Missile Door
 +
|-
 +
|6
 +
|Seeker Missile Door
 +
|-
 +
|7
 +
|Power Bomb Door
 +
|-
 +
|16
 +
|Elevator
 +
|-
 +
|17
 +
|Save Station
 +
|-
 +
|20
 +
|Ammo Station
 +
|-
 +
|21
 +
|Portal
 +
|-
 +
|23
 +
|Translator
 +
|-
 +
|24
 +
|Up Arrow Yellow
 +
|-
 +
|25
 +
|Down Arrow Yellow
 
|}
 
|}
  
Line 171: Line 313:
 
!Description
 
!Description
 
|-
 
|-
|CVector3f
+
|{{Vector3f}}
 
|'''Normal'''
 
|'''Normal'''
 
|-
 
|-
|CVector3f
+
|{{Vector3f}}
 
|'''Center of Mass'''
 
|'''Center of Mass'''
 
|-
 
|-
Line 181: Line 323:
 
|-
 
|-
 
|u32
 
|u32
|'''Primitive Table End'''; relative to the end of the header
+
|'''Border Table Start'''; relative to the end of the header
 
|}
 
|}
  

Latest revision as of 21:21, 26 December 2020

The .MAPA file format defines the minimap models used in the Metroid Prime series. MAPA or MAP Area consists of several sections: The header, Mappable Object entries, Vertices, Primitive Headers, and the primitives.


Morphball wirerender.png This file format needs more research
A few things are unknown in the header and Mappable Object Entries


Format

Header

The header is very straightforward, and has some minor differences depending on version.

Type Description MP1 MP2 MP3
u32 Magic; Always 0xDEADD00D
u32 Version; See below
u32 Type; unknown function in MP1/3, specifies whether the area appears on the Light (0) or Dark (1) map in MP2
u32 Visibility Mode;
  1. Always Visible (Map Universe Area)
  2. Visible on Visit or Map Station (most MP1 areas)
  3. Visible on Visit only (latter areas of Ruins and Phendrana)
  4. Never Visible
AABox Bounding Box
Vector3f Map Adjustment
u32 Unknown
u32 Mappable Object Count
u32 Vertex Count
u32 Primitive Count
u32 Environment Variable Section Size
u32 Environment Variable Count
End of Header

Version

The version value listed above can have the following values:

Game Value
Metroid Prime 1 2
Metroid Prime 2: Echoes 3
Metroid Prime 3: Corruption 5

Environment Variables

Only exists in Corruption; used for some areas with Landing Sites.

Type Count Description
string Environment Variable Count Environment Variable
Pad to 4 bytes
End of Environment Variables

Mappable Objects

A Mappable Object in the Metroid Prime series can include: Elevators, Doors, and Save/Missile Stations. Each Mappable Object entry consists of the following struct:

Type Description MP1 & MP2 MP3
u32 Type; See table below for MP1 and MP2 types
u32 Visibility Mode;
  1. Always Visible
  2. Visible on Map Station or Area Visit
  3. Visible on Door Visit
  4. Never Visible
  5. Visible on Map Station or Area Visit
u32 Editor ID; Same ID format as SCLY, indicates associated world object
Saved State ID Saved State ID
u32 Unknown
Template:Transform4f Transform Matrix The Mappable Object's position in world space.
u32 * 4 Unknown
End of Mappable Object

MP1 Types

Type Description
0 Normal Door
1 Shield Door
2 Ice Door
3 Wave Door
4 Plasma Door
5 Big Door
6 Big Door 2
7 Ice Door Ceiling
8 Ice Door Floor
9 Wave Door Ceiling
10 Wave Door Floor
11 Plasma Door Ceiling
12 Plasma Door Floor
13 Ice Door Floor 2
14 Wave Door Floor 2
15 Plasma Door Floor 2
27 Down Arrow Yellow (Maintenance Tunnel)
28 Up Arrow Yellow (Phazon Processing Center)
29 Down Arrow Green (Elevator A)
30 Up Arrow Green (Elite Control Access)
31 Down Arrow Red (Elevator B)
32 Up Arrow Red (Fungal Hall Access)
33 Elevator
34 Save Station
37 Missile Station


MP2 Types

Type Description
0 Normal Door
1 Missile Door
2 Dark Door
3 Annihilator Door
4 Light Door
5 Super Missile Door
6 Seeker Missile Door
7 Power Bomb Door
16 Elevator
17 Save Station
20 Ammo Station
21 Portal
23 Translator
24 Up Arrow Yellow
25 Down Arrow Yellow

Vertices

Vertices are a simple array of CVector3f. Geometry in MAPAs is, almost always, centered around the origin (0, 0, 0) and are simplified, full sized, versions of the map they replicate. Each vertex is referenced at least twice: once for the primitive, once for the line border.

Primitive Headers

The Primitive headers are extremely simple, they merely have a bounding box followed by the primitive table start and end point, relative to the end of the current primitive header. In other words: read in the header, seek to the start of the table from the current position, then read the primitives tables.

Type Description
Vector3f Normal
Vector3f Center of Mass
u32 Primitive Table Start; relative to the end of the header
u32 Border Table Start; relative to the end of the header

Primitive Table

The Primitive is also fairly simple, each one consists of two parts: The GX Primitive list, and the Border list.

Type Description
u32 Primitive Count (PC)
Primitive * PC Primitives
u32 Border Count (BC)
Border * (BC) Borders

Primitive

A primitive in a MAPA is a simple 4 byte aligned list of indices into the vertex list, starting with the GX Primitive type, a count, then an array of indices, each index taking up one byte.

Border

A border in a MAPA is a simple count followed by a 4 byte aligned list indices into the vertex list, each index taking up one byte. A border is simply drawn using GX_LINESTRIP.