MREA (Metroid Prime)

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.

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.

Geometry
See Geometry (Metroid Prime)

MREA files have one material section, followed by a number of meshes, each of which has its own set of geometry sections. Each mesh starts with an extra header section which is formatted like this:

There's couple small differences you'll usually see on MREA meshes compared to CMDL ones:


 * Vertices are always normals, so vertex format 0 is never used.
 * Most MREA meshes use lightmaps, so normally the first UV coordinate on each texture 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.
 * Submeshes will usually have a bounding box in the extra data in the submesh header. This bounding box is used for depth sorting.

AROT
The AROT section operates on terrain geometry; it's used to implement things like shot collision. It's mostly unknown.

SCLY
The SCLY section contains data for objects.

Collision
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 lights and usually just contains a single 32-bit "1". Purpose is unknown.

Lights
This section is for dynamic lights.

Empty Section
This is usually listed with a size of 0. Currently unknown what this actually is.

Path
This is the final section in the file; it's always 0x20 bytes, and its only value is a single PATH file ID.