AAMP: Difference between revisions

→‎Structure: fix struct definitions (offsets and counts are packed as a single u32; they are not separate fields)
imported>Leoetlino
(→‎Structure: Clarify that AAMP files are the same on both platforms *in BotW*, not in general)
(→‎Structure: fix struct definitions (offsets and counts are packed as a single u32; they are not separate fields))
 
(3 intermediate revisions by one other user not shown)
Line 17: Line 17:
=== Section order ===
=== Section order ===
* Header
* Header
* Parameter lists, objects, parameters (the official ordering algorithm is unknown)
* Parameter lists
** It appears that Nintendo's official parameter archive generator writes all parameter lists before objects.
* Parameter objects
* Parameters
* Data section (to store parameter data)
* Data section (to store parameter data)
* String section (to store strings)
* String section (to store strings)
* Unknown uint32 section (unused?)
* Unknown uint32 section (unused?)
For more information on the ordering, refer to the [https://github.com/zeldamods/oead/blob/v0.9.0-2/src/aamp.cpp#L262 oead source code].


=== Header ===
=== Header ===
Line 37: Line 40:
| 0x10 || u32 || Parameter IO version
| 0x10 || u32 || Parameter IO version
|-
|-
| 0x14 || u32 || Offset to parameter IO (multiple of 4)
| 0x14 || u32 || Offset to parameter IO relative to 0x30
|-
|-
| 0x18 || u32 || Number of lists (including parameter IO)
| 0x18 || u32 || Number of lists (including parameter IO)
Line 60: Line 63:
| 0x0 || u32 || Name CRC32
| 0x0 || u32 || Name CRC32
|-
|-
| 0x4 || u16 || Offset to child lists, divided by 4 and relative to parameter list start
| 0x4 || u32 ||
* Bits 0-15: Offset to child lists, divided by 4 and relative to parameter list start
* Bits 16-31: Number of child lists
|-
|-
| 0x6 || u16 || Number of child lists
| 0x8 || u32 ||
|-
* Bits 0-15: Offset to child objects, divided by 4 and relative to parameter list start
| 0x8 || u16 || Offset to child objects, divided by 4 and relative to parameter list start
* Bits 16-31: Number of child objects
|-
| 0xa || u16 || Number of child objects
|}
|}


Line 75: Line 78:
| 0x0 || u32 || Name CRC32
| 0x0 || u32 || Name CRC32
|-
|-
| 0x4 || u16 || Offset to child parameters, divided by 4 and relative to parameter object start
| 0x4 || u32 ||
|-
* Bits 0-15: Offset to child parameters, divided by 4 and relative to parameter object start
| 0x6 || u16 || Number of child parameters
* Bits 16-31: Number of child parameters
|}
|}


Line 86: Line 89:
| 0x0 || u32 || Name CRC32
| 0x0 || u32 || Name CRC32
|-
|-
| 0x4 || u24 || Offset to data, divided by 4 and relative to parameter start.<br>For strings, this points to a string in the string section. For other parameter types, this points to the data section.
| 0x4 || u32 ||
|-
* Bits 0-23: Offset to data, divided by 4 and relative to parameter start.<br>For strings, this points to a string in the string section. For other parameter types, this points to the data section.
| 0x7 || ParameterType (u8) || Type
* Bits 24-31: Parameter type
|}
|}


Line 189: Line 192:


== Usage in ''Breath of the Wild'' ==
== Usage in ''Breath of the Wild'' ==
AAMP files are used in ''Breath of the Wild'' to store parameters that define the game's behaviour. They are very frequently used inside [[bactorpack]] archives, where they define most of an Actor's characteristics.
AAMP files are used in ''Breath of the Wild'' to store parameters that define the game's behaviour. They are very frequently used inside [[actor pack]] archives, where they define most of an Actor's characteristics.


=== Naming conventions for arrays ===
=== Naming conventions for arrays ===