CMDL (Donkey Kong Country Returns): Difference between revisions
>Aruki |
>Aruki |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
The '''CMDL format''' is DKCR's model format. It's similar to the CMDL format found in the Metroid Prime trilogy, but with a lot of additions and changes, and some layout changes. | The '''CMDL format''' is DKCR's model format. It's similar to the CMDL format found in the Metroid Prime trilogy, but with a lot of additions and changes, and some layout changes. | ||
{{research|moderate| | {{research|moderate|The visibility group data in the header has a lot of unknown values.}} | ||
__TOC__ | __TOC__ | ||
Line 16: | Line 16: | ||
! Offset | ! Offset | ||
! Type | ! Type | ||
! | ! Count | ||
! | ! Name | ||
! Notes | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | u16 | ||
| | | 1 | ||
| | | '''Magic''' | ||
| Always <code>0x9381</code> | |||
|- | |||
| 0x2 | |||
| u16 | |||
| 1 | |||
| '''Version''' | |||
| Always 0xA. See [[CMDL (File Format)|hub article]] for a list of possible version numbers. | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
| u32 | | u32 | ||
| | | 1 | ||
| '''Flags''' | | '''Flags''' | ||
| [[#Flags|See below]] | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
| float | | float | ||
| | | 6 | ||
| '''Model Bounding Box''' | | '''Model Bounding Box''' | ||
| | |||
|- | |- | ||
| 0x20 | | 0x20 | ||
| u32 | | u32 | ||
| | | 1 | ||
| '''Section | | '''Section Count''' | ||
| Count of data sections in the file. | |||
|- | |- | ||
| 0x24 | | 0x24 | ||
| u32 | | u32 | ||
| | | 1 | ||
| '''Material | | '''Material Set Count''' | ||
| Count of material sets in the model. | |||
|- | |- | ||
| 0x28 | | 0x28 | ||
| | | [[#Visibility Groups|Visibility Groups]] | ||
| | | 1 | ||
| '''Visibility | | '''Visibility Group Data''' | ||
| Only present if flag 0x10 is set. | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | ''Section Count'' | ||
| '''Section | | '''Section Sizes''' | ||
| | |||
|- | |- | ||
| colspan= | | colspan=5 {{unknown|End of header; pad to multiple of 32 before first section starts}} | ||
|} | |} | ||
Line 68: | Line 82: | ||
| 0 | | 0 | ||
| 0x1 | | 0x1 | ||
| | | Indicates the model is skinned | ||
|- | |- | ||
| 1 | | 1 | ||
Line 93: | Line 107: | ||
==== Visibility Groups ==== | ==== Visibility Groups ==== | ||
Visibility group data is present in the header if bit 0x10 is set, after the material set count and before the section sizes. Visibility groups are used to toggle the visibility of certain | Visibility group data is present in the header if bit 0x10 is set, after the material set count and before the section sizes. Visibility groups are used to toggle the visibility of certain surfaces on or off during animations; for instance, Diddy's jetpack is part of his model but doesn't render in most of his animations. | ||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
! Type | ! Type | ||
! | ! Count | ||
! | ! Name | ||
! Notes | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
| u32 | | u32 | ||
| | | 1 | ||
| '''Visibility Group | | '''Visibility Group Count''' | ||
| | | | ||
|- | |- | ||
| | | 0x8 | ||
| | | [[#Visibility Group Name|Visibility Group Name]] | ||
| | | ''Visibility Group Count'' | ||
| '' | | '''Visibility Group Name Array''' | ||
| | |||
| '''Visibility Group | |||
| | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| | | {{none}} | ||
| u32 | | u32 | ||
| | | 1 | ||
| {{unknown|'''Unknown'''}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|} | |} | ||
=== | ===== Visibility Group Name ===== | ||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
! Type | ! Type | ||
! | ! Count | ||
! | ! Name | ||
! Notes | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| u32 | | u32 | ||
| 1 | | 1 | ||
| '''Name Length''' | |||
| | |||
|- | |- | ||
| | | 0x4 | ||
| | | char | ||
| | | ''Name Length'' | ||
| '''Visibility Group Name''' | |||
| Zero-terminated. | |||
| ''' | |||
|- | |||
|} | |} | ||
=== Materials === | |||
''See [[Materials (Metroid Prime 3)]]'' | |||
DKCR uses the same material format as Metroid Prime 3, with the main differences being what pass types and UV animation modes are supported (a few have been added/removed). The only other significant difference in DKCR compared to Prime 3 is that in Prime 3, each material set would get its own section. In DKCR, every material set is in the same section. Each material set begins with a material count, and each material begins with its own size. | |||
=== Geometry === | |||
''See [[Geometry (Donkey Kong Country Returns)]]'' | |||
[[Category:File Formats]] | [[Category:File Formats]] | ||
[[Category:Donkey Kong Country Returns]] | [[Category:Donkey Kong Country Returns]] |
Latest revision as of 12:49, 8 September 2016
See CMDL (File Format) for the other revisions of this format.
The CMDL format is DKCR's model format. It's similar to the CMDL format found in the Metroid Prime trilogy, but with a lot of additions and changes, and some layout changes.
This file format needs more research The visibility group data in the header has a lot of unknown values. |
Format
Like the previous CMDL formats, DKCR CMDL 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.
Header
Offset | Type | Count | Name | Notes |
---|---|---|---|---|
0x0 | u16 | 1 | Magic | Always 0x9381
|
0x2 | u16 | 1 | Version | Always 0xA. See hub article for a list of possible version numbers. |
0x4 | u32 | 1 | Flags | See below |
0x8 | float | 6 | Model Bounding Box | |
0x20 | u32 | 1 | Section Count | Count of data sections in the file. |
0x24 | u32 | 1 | Material Set Count | Count of material sets in the model. |
0x28 | Visibility Groups | 1 | Visibility Group Data | Only present if flag 0x10 is set. |
u32 | Section Count | Section Sizes | ||
End of header; pad to multiple of 32 before first section starts |
Flags
The following flags are possible:
Bit | Hex | Description |
---|---|---|
0 | 0x1 | Indicates the model is skinned |
1 | 0x2 | Unknown |
2 | 0x4 | Unknown |
3 | 0x8 | Unknown |
4 | 0x10 | Enable visibility groups |
5 | 0x20 | Store vertex positions as shorts |
Visibility Groups
Visibility group data is present in the header if bit 0x10 is set, after the material set count and before the section sizes. Visibility groups are used to toggle the visibility of certain surfaces on or off during animations; for instance, Diddy's jetpack is part of his model but doesn't render in most of his animations.
Offset | Type | Count | Name | Notes |
---|---|---|---|---|
0x0 | u32 | 1 | Unknown | |
0x4 | u32 | 1 | Visibility Group Count | |
0x8 | Visibility Group Name | Visibility Group Count | Visibility Group Name Array | |
u32 | 1 | Unknown | ||
u32 | 1 | Unknown | ||
u32 | 1 | Unknown | ||
u32 | 1 | Unknown | ||
u32 | 1 | Unknown |
Visibility Group Name
Offset | Type | Count | Name | Notes |
---|---|---|---|---|
0x0 | u32 | 1 | Name Length | |
0x4 | char | Name Length | Visibility Group Name | Zero-terminated. |
Materials
See Materials (Metroid Prime 3)
DKCR uses the same material format as Metroid Prime 3, with the main differences being what pass types and UV animation modes are supported (a few have been added/removed). The only other significant difference in DKCR compared to Prime 3 is that in Prime 3, each material set would get its own section. In DKCR, every material set is in the same section. Each material set begins with a material count, and each material begins with its own size.