AAMP: Difference between revisions

Jump to navigation Jump to search
4,085 bytes added ,  6 years ago
no edit summary
imported>Leoetlino
(use DynamicPageList to generate a list of extensions)
imported>Leoetlino
No edit summary
Line 3: Line 3:
</onlyinclude>
</onlyinclude>
== Structure ==
== Structure ==
The basic structure of AAMP files is documented on the [[mk8:AAMP (File Format)|MK8 wiki]].
{{expand section}}


Unlike some other file formats, AAMP files have the exact same structure and endianness on Wii U and Switch, so these files are interchangeable between the consoles.
Unlike some other file formats, AAMP files have the exact same structure and endianness on Wii U and Switch, so these files are interchangeable between the consoles.
=== Parameter types ===
The following parameter type and class names are ''official'' and come from Nintendo's AAMP library.
{|class="wikitable"
! ID !! Type !! Parameter type
|-
| 0  || bool || <code>agl::utl::Parameter<bool></code>
|-
| 1  || f32  || <code>agl::utl::Parameter<float></code>
|-
| 2  || int  || <code>agl::utl::Parameter<int></code>
|-
| 3  || vec2 || <code>agl::utl::Parameter<sead::Vector2<float>></code>
|-
| 4  || vec3 || <code>agl::utl::Parameter<sead::Vector3<float>></code>
|-
| 5  || vec4 || <code>agl::utl::Parameter<sead::Vector4<float>></code>
|-
| 6  || color || <code>agl::utl::Parameter<sead::Color4f></code>
|-
| 7  || string32 || <code>agl::utl::Parameter<sead::FixedSafeString<32>></code>
|-
| 8  || string64 || <code>agl::utl::Parameter<sead::FixedSafeString<64>></code>
|-
| 9  || curve1 || <code>agl::utl::ParameterCurve<1u></code>
|-
| 10 || curve2 || <code>agl::utl::ParameterCurve<2u></code>
|-
| 11 || curve3 || <code>agl::utl::ParameterCurve<3u></code> (unused in BotW?)
|-
| 12 || curve4 || <code>agl::utl::ParameterCurve<4u></code>
|-
| 13 || buffer_int || <code>agl::utl::ParameterBuffer<int></code>
|-
| 14 || buffer_f32 || <code>agl::utl::ParameterBuffer<float></code>
|-
| 15 || string256 || <code>agl::utl::Parameter<sead::FixedSafeString<256>></code>
|-
| 16 || quat || <code>agl::utl::Parameter<sead::Quat<float>></code>
|-
| 17 || u32 || <code>agl::utl::Parameter<uint></code>
|-
| 18 || buffer_u32 || <code>agl::utl::ParameterBuffer<unsigned int></code>
|-
| 19 || buffer_binary || <code>agl::utl::ParameterBuffer<unsigned char></code>
|-
| 20 || stringRef || <code>agl::utl::Parameter<sead::SafeStringBase<char>></code>
|-
| 21 || (none, special) || <code>agl::utl::Parameter<int *></code>, <code>agl::utl::Parameter<float *></code>, <code>agl::utl::Parameter<unsigned int *></code>, <code>agl::utl::Parameter<unsigned char *></code>
|}


== Usage in ''Breath of the Wild'' ==
== Usage in ''Breath of the Wild'' ==
Line 14: Line 65:


<DynamicPageList>category = File extensions (AAMP)</DynamicPageList>
<DynamicPageList>category = File extensions (AAMP)</DynamicPageList>
=== Internal usage ===
Parameter classes (e.g. Bdmgparam) inherit from agl::utl::IParameterIO -> agl::utl::IParameterList.
In their constructors or in an init function, agl::utl::Parameter objects are created and initialised by passing the key name, the description and help strings (see agl::utl::ParameterBase::initializeListNode). The CRC32 for the keys are stored and then the Parameter object is added to a agl::utl::IParameterObj list.
Finally, to actually load the AAMP binary data into all the parameter objects, the game constructs a agl::utl::ResParameterArchive::ResParameterArchive and then passes it to applyResParameterArchive().
==== Structures ====
agl::utl::ResParameterArchive holds a pointer to agl::utl::ResParameterArchiveData (which is the AAMP header structure).
Elements like param_root are parameter lists (agl::utl::IParameterList, tag: param_list). The binary structure for lists is agl::utl::ResParameterList.
A param list holds parameter objects (agl::utl::IParameterObj, tag: param_array) or other parameter lists. The binary structure for objects is agl::utl::ResParameterObj.
Param objects store parameters (agl::utl::ParameterBase, tag: param). The binary structure for parameters is agl::utl::ResParameter.
=== Parameter list name ===
agl::utl::IParameterIO (in Nintendo's AAMP library) automatically sets the 'parameter list name' / tag name to param_root.
== al::Parameter ==
''Super Mario Odyssey'''s al::Parameter classes are extremely similar to the agl::utl::Parameter utils and appear to be an improved version. They share most of the public interface, presumably because Nintendo wanted to make switching to al:: easier.
The human readable format is YAML instead of XML and the binary format uses BYML. Key names are stored in plain text unlike agl::utl::Parameter which stores only the hashes of the key strings.
* Parameters have the same purpose as in the agl:: implementation.
* ParameterLists are dicts (key-value mapping, with keys being strings) that contain Parameters, ParameterObjects, ParameterArrays and ParameterLists.
* ParameterObjects are dicts that contain Parameters and ParameterArrays.
* ParameterArrays are arrays of ParameterObjects. This is a new structure. 


== Tools ==
== Tools ==
Anonymous user

Navigation menu