MLVL (File Format): Difference between revisions
Jump to navigation
Jump to search
m
→Audio Groups
>Claris No edit summary |
>Aruki m (→Audio Groups) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
The '''MLVL format''' defines worlds in the Metroid Prime trilogy and Donkey Kong Country Returns. While the [[MREA (File Format)|MREA format]] defines individual areas, the MLVL is what links together all the areas to create a single cohesive world. | The '''MLVL format''' defines worlds in the Metroid Prime trilogy and Donkey Kong Country Returns. While the [[MREA (File Format)|MREA format]] defines individual areas, the MLVL is what links together all the areas to create a single cohesive world. | ||
{{research|moderate|There's still a fair number of unknowns left in this format.}} | |||
__TOC__ | __TOC__ | ||
Line 110: | Line 112: | ||
| [[SAVW (File Format)|SAVW]] | | [[SAVW (File Format)|SAVW]] | ||
| 4/8 | | 4/8 | ||
| ''' | | '''SaveWorld ID''' | ||
| {{check}} | | {{check}} | ||
| {{check}} | | {{check}} | ||
Line 118: | Line 120: | ||
| [[CMDL (File Format)|CMDL]] | | [[CMDL (File Format)|CMDL]] | ||
| 4/8 | | 4/8 | ||
| '''World skybox | | '''World skybox CMDL ID''' | ||
| {{check}} | | {{check}} | ||
| {{check}} | | {{check}} | ||
Line 163: | Line 165: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
Line 168: | Line 174: | ||
| 4 | | 4 | ||
| '''Memory Relay instance ID''' | | '''Memory Relay instance ID''' | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
Line 173: | Line 183: | ||
| 4 | | 4 | ||
| '''Target instance ID''' | | '''Target instance ID''' | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
| | | u16 | ||
| 2 | | 2 | ||
| '''Message''' | | '''Message''' | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| | | 0x10 | ||
| u8 | | u8 | ||
| 1 | | 1 | ||
| {{unknown|'''Unknown''' (always 0)}} | | {{unknown|'''Unknown''' (always 0)}} | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 258: | Line 280: | ||
| {{check}} | | {{check}} | ||
|- | |- | ||
| u32 | | u32/u64 | ||
| 4/8 | | 4/8 | ||
| '''Area ID'''; used by layer-switching objects | | '''Area ID'''; used by layer-switching objects | ||
Line 265: | Line 287: | ||
| {{check}} | | {{check}} | ||
| {{check}} | | {{check}} | ||
|} | |||
==== Attached Areas ==== | |||
This part contains a small table listing what areas within the world are attached (connected) to this one. This is done by using indices into the MLVL's area table; so an index of 0 indicates the first area listed in the MLVL, for example. | |||
{| class="wikitable" | |||
! Type | |||
! Size | |||
! Description | |||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
| '''Attached area | | '''Attached area index count''' (AC) | ||
| {{check}} | | {{check}} | ||
| {{check}} | | {{check}} | ||
Line 276: | Line 312: | ||
| u16[] | | u16[] | ||
| 2 × AC | | 2 × AC | ||
| '''Attached area indices''' | | '''Attached area indices''' | ||
| {{check}} | | {{check}} | ||
| {{check}} | | {{check}} | ||
Line 302: | Line 338: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
Line 307: | Line 347: | ||
| 4 | | 4 | ||
| '''Layer count''' (LC) | | '''Layer count''' (LC) | ||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
Line 312: | Line 356: | ||
| 4 × LC | | 4 × LC | ||
| '''Layer dependency offsets''' | | '''Layer dependency offsets''' | ||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 322: | Line 370: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Dock count''' (DC) | | '''Dock count''' (DC) | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| [[#Dock|Dock]] | | [[#Dock|Dock]] | ||
| DC | | DC | ||
| '''Docks''' | | '''Docks''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 338: | Line 398: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Connecting dock count''' (CC) | | '''Connecting dock count''' (CC) | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| [[#Connecting Dock|Connecting dock]] | | [[#Connecting Dock|Connecting dock]] | ||
| CC | | CC | ||
| '''Connecting docks''' | | '''Connecting docks''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| {{unknown|'''Unknown''' (always 4; possibly dock coordinate count)}} | | {{unknown|'''Unknown''' (always 4; possibly dock coordinate count)}} | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| vec3 | | vec3 | ||
| 4 | | 4 | ||
| '''Dock coordinates''' | | '''Dock coordinates''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 362: | Line 442: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Area index''' | | '''Area index''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Dock index''' | | '''Dock index''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 380: | Line 472: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''.rel count''' (RC) | | '''.rel count''' (RC) | ||
| {{nocheck}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| string | | string | ||
| RC | | RC | ||
| '''.rel filenames''' (all zero-terminated) | | '''.rel filenames''' (all zero-terminated) | ||
| {{nocheck}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Layer count''' (LC) | | '''Layer count''' (LC) | ||
| {{nocheck}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u32 | | u32 | ||
| LC | | LC | ||
| '''Layer .rel offsets''' | | '''Layer .rel offsets''' | ||
| {{nocheck}} | |||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 411: | Line 523: | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
| {{unknown|'''Unknown'''; always 0 | | {{unknown|'''Unknown'''; always 0}} | ||
| {{nocheck}} | | {{nocheck}} | ||
| {{nocheck}} | | {{nocheck}} | ||
Line 434: | Line 546: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| [[MAPW (File Format)|MAPW]] | | [[MAPW (File Format)|MAPW]] | ||
| 4/8 | | 4/8 | ||
| '''World map''' | | '''World map''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| {{unknown|'''Unknown'''; always 0 | | {{unknown|'''Unknown'''; always 0}} | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|- | |- | ||
| u8 | | u8 | ||
| 1 | | 1 | ||
| {{unknown|'''Unknown'''; always 0 | | {{unknown|'''Unknown'''; always 0}} | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 456: | Line 584: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|- | |- | ||
| [[AGSC (File Format)|AGSC]] | | [[AGSC (File Format)|AGSC]] | ||
| 4 | | 4 | ||
| '''Audio Group file''' | | '''Audio Group file''' | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|} | |} | ||
There's | There's one byte following this, at the end of the AGSC table. | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 472: | Line 612: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u8 | | u8 | ||
| 1 | | 1 | ||
| {{unknown|'''Unknown'''; always 0 | | {{unknown|'''Unknown'''; always 0}} | ||
| {{check}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
|} | |} | ||
Line 496: | Line 640: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
| '''Area layer count''' | | '''Area layer count''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|- | |- | ||
| u64 | | u64 | ||
| 8 | | 8 | ||
| '''Area layer flags''' | | '''Area layer flags''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|} | |} | ||
Line 514: | Line 670: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Layer count''' (LC) | | '''Layer count''' (LC) | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|- | |- | ||
| string | | string | ||
| LC | | LC | ||
| '''Layer names''' (zero-terminated) | | '''Layer names''' (zero-terminated) | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|} | |} | ||
==== | ==== Layer IDs ==== | ||
This array is only present in Prime 3 and DKCR. | This array is only present in Prime 3 and DKCR, and is used by layer-switching objects. | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 532: | Line 700: | ||
! Size | ! Size | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
| '''Layer ID count''' (IC) | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{check}} | |||
| {{check}} | |||
|- | |- | ||
| | | u128 | ||
| 0x10 × | | 0x10 × IC | ||
| '''Layer ID''' | |||
| {{nocheck}} | |||
| {{nocheck}} | |||
| {{check}} | |||
| {{check}} | |||
|} | |} | ||
Line 550: | Line 730: | ||
! Count | ! Count | ||
! Description | ! Description | ||
! MP1 | |||
! MP2 | |||
! MP3 | |||
! DKCR | |||
|- | |- | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Area count''' (AC) | | '''Area count''' (AC) | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|- | |- | ||
| u32 | | u32 | ||
| AC | | AC | ||
| '''Area layer names offsets''' | | '''Area layer names offsets''' | ||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
| {{check}} | |||
|} | |} | ||