MREA (Metroid Prime): Difference between revisions
>Aruki No edit summary |
>Aruki No edit summary |
||
Line 9: | Line 9: | ||
Like [[CMDL (Metroid Prime)|CMDL]], MREA files are split up into a number of 32-byte aligned sections. Every section both starts and ends on a 32-byte boundary. These are used to separate different parts of the file; different types of sections typically indicate different sets of data. The header declares the section count and the size of each one; using these is the only way to navigate the file. | Like [[CMDL (Metroid Prime)|CMDL]], MREA files are split up into a number of 32-byte aligned sections. Every section both starts and ends on a 32-byte boundary. These are used to separate different parts of the file; different types of sections typically indicate different sets of data. The header declares the section count and the size of each one; using these is the only way to navigate the file. | ||
These are the sections that appear in each MREA file, in the order they appear in the file: | |||
{| class="wikitable" | |||
! Identifier | |||
! Name | |||
|- | |||
| {{none}} | |||
| [[#World Geometry|World Geometry]] | |||
|- | |||
| <code>AROT</code> | |||
| [[#Area Octree|Area Octree]] | |||
|- | |||
| <code>SCLY</code> | |||
| [[#Script Layers|Script Layers]] | |||
|- | |||
| <code>0xDEAFBABE</code> | |||
| [[#Collision|Collision]] | |||
|- | |||
| {{none}} | |||
| {{unknown|[[#Unknown Section|Unknown]]}} | |||
|- | |||
| <code>0xBABEDEAD</code> | |||
| [[#Lights|Lights]] | |||
|- | |||
| <code>VISI</code> | |||
| [[#Visibility Tree|Visibility Tree]] | |||
|- | |||
| {{none}} | |||
| [[#Path|Path]] | |||
|} | |||
=== Header === | === Header === | ||
Line 106: | Line 137: | ||
|} | |} | ||
=== | === World Geometry === | ||
''See [[Materials (Metroid Prime)]] and [[Geometry (Metroid Prime)]]'' | ''See [[Materials (Metroid Prime)]] and [[Geometry (Metroid Prime)]]'' | ||
Line 179: | Line 177: | ||
|} | |} | ||
==== Visor Flags ==== | |||
{| class="wikitable" | {| class="wikitable" | ||
Line 210: | Line 208: | ||
|} | |} | ||
=== Area Octree === | |||
{{main|AROT (MREA Section)}} | {{main|AROT (MREA Section)}} | ||
Line 216: | Line 214: | ||
The AROT section stores the area's octree, accelerating back-to-front rendering of contained meshes, it is also used for spacial queries such as collision. | The AROT section stores the area's octree, accelerating back-to-front rendering of contained meshes, it is also used for spacial queries such as collision. | ||
=== Script Layers === | |||
{{todo|SCLY is definitely complicated enough to need its own article.}} | {{todo|SCLY is definitely complicated enough to need its own article.}} | ||
Line 222: | Line 220: | ||
The SCLY section contains data for objects. | The SCLY section contains data for objects. | ||
=== Collision === | |||
{{todo|Collision needs a separate article because it shares so many similarities with DCLN. How should we document the parts where the format diverges, though?}} | {{todo|Collision needs a separate article because it shares so many similarities with DCLN. How should we document the parts where the format diverges, though?}} | ||
Line 228: | Line 226: | ||
You have three guesses what the collision section is for, and the first two don't count. | You have three guesses what the collision section is for, and the first two don't count. | ||
=== Unknown Section === | |||
This one is sandwiched between collision and lights, and usually just contains a single 32-bit "1". Purpose is unknown. | This one is sandwiched between collision and lights, and usually just contains a single 32-bit "1". Purpose is unknown. | ||
=== Lights === | |||
This section is for dynamic lights, see the [[Lights_(Metroid_Prime)|Light]] article for details. | This section is for dynamic lights, see the [[Lights_(Metroid_Prime)|Light]] article for details. | ||
=== Visibility Tree === | |||
This section is labeled "VISI". This section is sometimes not actually present in the file, labeled with a size of 0. | This section is labeled "VISI". This section is sometimes not actually present in the file, labeled with a size of 0. | ||
=== Path === | |||
This is the final section in the file; it's always 0x20 bytes, and its only value is a single [[PATH (File Format)|PATH]] file ID. | This is the final section in the file; it's always 0x20 bytes, and its only value is a single [[PATH (File Format)|PATH]] file ID. |
Revision as of 02:00, 24 May 2016
See MREA (File Format) for the other revisions of this format.
The MREA format defines areas (rooms) in Metroid Prime. It's a massive format that contains tons of different data, including terrain geometry, collision, objects, lights, and more.
![]() |
To do: There's a LOT of sections that are mostly known, but need some documentation written up. SCLY and collision need separate articles (although the unique parts of the collision format, like the octree, could maybe be documented here). The rest should probably stay on this page. |
![]() |
This file format is almost completely documented Discounting unknowns within the actual data sections, the main thing that still isn't known is what the unknown data section is for. |
Format
Like CMDL, MREA files are split up into a number of 32-byte aligned sections. Every section both starts and ends on a 32-byte boundary. These are used to separate different parts of the file; different types of sections typically indicate different sets of data. The header declares the section count and the size of each one; using these is the only way to navigate the file.
These are the sections that appear in each MREA file, in the order they appear in the file:
Identifier | Name |
---|---|
World Geometry | |
AROT
|
Area Octree |
SCLY
|
Script Layers |
0xDEAFBABE
|
Collision |
Unknown | |
0xBABEDEAD
|
Lights |
VISI
|
Visibility Tree |
Path |
Header
Offset | Type | Count | Name | Notes |
---|---|---|---|---|
0x0 | u32 | 1 | Magic | Always 0xDEADBEEF .
|
0x4 | u32 | 1 | Version | See hub article for a list of possible version numbers. |
0x8 | float | 12 | Area Transform | Matrix that represents the area's transform from the origin. Most area data is pre-transformed, so this matrix is only used occasionally. |
0x38 | u32 | 1 | World Model Count | Number of world models in this area. |
0x3C | u32 | 1 | Data Section Count | Number of data sections in the file. |
0x40 | u32 | 1 | World Geometry Section | Section index for world geometry data. Always 0; starts on materials. |
0x44 | u32 | 1 | Script Layers Section | Section index for script layer data. |
0x48 | u32 | 1 | Collision Section | Section index for collision data. |
0x4C | u32 | 1 | Unknown Section | Section index for unknown data. |
0x50 | u32 | 1 | Lights Section | Section index for light data. |
0x54 | u32 | 1 | Visibility Tree Section | Section index for visibility tree data. |
0x58 | u32 | 1 | Path Section | Section index for path data. |
0x5C | u32 | 1 | Area Octree Section | Section index for area octree data. |
0x60 | u32 | Data Section Count | Data Section Sizes | Array containing the size of each data section in the file. Every size is always a multiple of 32. |
End of header; pad to 32 bytes before first data section begins |
World Geometry
See Materials (Metroid Prime) and Geometry (Metroid Prime)
MREA files have one material section, followed by a number of world models, each of which has its own set of geometry sections. There's couple small differences you'll usually see on world models compared to regular CMDL ones:
- Normals are always shorts, so vertex format 0 is never used.
- Most world models use lightmaps, so normally the first UV coordinate on each vertex will read from the short UV array. This isn't always the case, though; you need to make sure you check the material so you know where to read from.
- Surfaces will usually have a bounding box in the extra data in the surface header. This bounding box is used for depth sorting.
- Each world model starts with an extra header section which is formatted like this:
Offset | Type | Count | Name | Notes |
---|---|---|---|---|
0x0 | Visor Flags | 1 | Visor Flags | 32-bit bitfield that sets parameters controlling how the mesh renders in different visors. |
0x4 | float | 12 | World Model Transform | World model's transform from the area's local origin. The geometry data is pre-transformed, so this matrix can largely be ignored. |
0x34 | float | 6 | World Model Bounding Box | Pre-transformed axis-aligned bounding box for this model. |
0x4C | End of mesh header section |
Visor Flags
Bit | Hex | Description |
---|---|---|
0 | 0x1 | Unknown |
1 | 0x2 | Disable rendering in Combat/Scan Visor |
2 | 0x4 | Disable rendering in Thermal Visor |
3 | 0x8 | Disable rendering in X-Ray Visor |
4-5 | 0x30 | Thermal heat level.
|
Area Octree
Main article: AROT (MREA Section)
The AROT section stores the area's octree, accelerating back-to-front rendering of contained meshes, it is also used for spacial queries such as collision.
Script Layers
![]() |
To do: SCLY is definitely complicated enough to need its own article. |
The SCLY section contains data for objects.
Collision
![]() |
To do: Collision needs a separate article because it shares so many similarities with DCLN. How should we document the parts where the format diverges, though? |
You have three guesses what the collision section is for, and the first two don't count.
Unknown Section
This one is sandwiched between collision and lights, and usually just contains a single 32-bit "1". Purpose is unknown.
Lights
This section is for dynamic lights, see the Light article for details.
Visibility Tree
This section is labeled "VISI". This section is sometimes not actually present in the file, labeled with a size of 0.
Path
This is the final section in the file; it's always 0x20 bytes, and its only value is a single PATH file ID.
Tools
- Parax's MREA maxscript can import MREA terrain geometry into 3DS Max.