AAMP: Difference between revisions
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 == | ||
{{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 == |