AAMP¶
Only version 2, little endian and UTF-8 binary parameter archives are supported.
All parameter types including buffers are supported.
The YAML output is compatible with the pure Python aamp library.
#include <oead/aamp.h>
Parameters¶
-
class
Parameter
¶ -
Note that unlike agl::utl::Parameter the name is not stored as part of the parameter class in order to make the parameter logic simpler and more efficient.
Public Types
-
enum
Type
¶ Values:
-
Bool
= 0¶
-
F32
¶
-
Int
¶
-
Vec2
¶
-
Vec3
¶
-
Vec4
¶
-
Color
¶
-
String32
¶
-
String64
¶
-
Curve1
¶
-
Curve2
¶
-
Curve3
¶
-
Curve4
¶
-
BufferInt
¶
-
BufferF32
¶
-
String256
¶
-
Quat
¶
-
U32
¶
-
BufferU32
¶
-
BufferBinary
¶
-
StringRef
¶
-
-
using
Value
= util::Variant<Type, bool, float, int, Vector2f, Vector3f, Vector4f, Color4f, std::unique_ptr<FixedSafeString<32>>, std::unique_ptr<FixedSafeString<64>>, std::unique_ptr<std::array<Curve, 1>>, std::unique_ptr<std::array<Curve, 2>>, std::unique_ptr<std::array<Curve, 3>>, std::unique_ptr<std::array<Curve, 4>>, std::unique_ptr<std::vector<int>>, std::unique_ptr<std::vector<float>>, std::unique_ptr<FixedSafeString<256>>, Quatf, U32, std::unique_ptr<std::vector<u32>>, std::unique_ptr<std::vector<u8>>, std::unique_ptr<std::string>>¶
Public Functions
-
Parameter
()¶
-
template<typename
T
, std::enable_if_t<std::is_constructible_v<Value, T>> * = nullptr>Parameter
(T value)¶
-
std::string_view
GetStringView
() const¶ Get the value as a string view. Throws a TypeError if the parameter is not a string.
-
auto &
GetVariant
()¶
-
const auto &
GetVariant
() const¶
-
enum
-
struct
Name
¶ Parameter structure name. This is a wrapper around a CRC32 hash.
Public Functions
-
constexpr
Name
(std::string_view name)¶
-
constexpr
Name
(const char *name)¶
-
constexpr
Name
(u32 name_crc32)¶
-
operator u32
() const¶
Public Members
-
u32
hash
¶ The CRC32 hash of the name.
-
constexpr
-
using
oead::aamp
::
ParameterMap
= tsl::ordered_map<Name, Parameter, absl::Hash<Name>, std::equal_to<Name>, std::allocator<std::pair<Name, Parameter>>, std::vector<std::pair<Name, Parameter>>>¶
-
using
oead::aamp
::
ParameterObjectMap
= tsl::ordered_map<Name, ParameterObject, absl::Hash<Name>, std::equal_to<Name>, std::allocator<std::pair<Name, ParameterObject>>, std::vector<std::pair<Name, ParameterObject>>>¶
-
using
oead::aamp
::
ParameterListMap
= tsl::ordered_map<Name, ParameterList, absl::Hash<Name>, std::equal_to<Name>, std::allocator<std::pair<Name, ParameterList>>, std::vector<std::pair<Name, ParameterList>>>¶
Note
oead::aamp::Name
can be constructed from either a hash or a string, so it is possible to access elements in a map by name rather than by hash. Both object.params[crc32_hash]
and object.params["NameString"]
will work.
-
struct
ParameterObject
¶ Parameter object. This is essentially a dictionary of parameters.
Public Functions
-
OEAD_DEFINE_FIELDS
(ParameterObject, params)¶
Public Members
-
ParameterMap
params
¶
-
-
struct
ParameterList
¶ Parameter list. This is essentially a dictionary of parameter objects and a dictionary of parameter lists.
Subclassed by oead::aamp::ParameterIO
Public Functions
-
OEAD_DEFINE_FIELDS
(ParameterList, objects, lists)¶
Public Members
-
ParameterObjectMap
objects
¶
-
tsl::ordered_map<Name, ParameterList, absl::Hash<Name>, std::equal_to<Name>, std::allocator<std::pair<Name, ParameterList>>, std::vector<std::pair<Name, ParameterList>>>
lists
¶
-
Parameter IO¶
-
struct
ParameterIO
: public oead::aamp::ParameterList¶ Parameter IO. This is the root parameter list and the only structure that can be serialized to or deserialized from a binary parameter archive.
Public Functions
-
OEAD_DEFINE_FIELDS
(ParameterIO, objects, lists, version, type)¶
-
std::vector<u8>
ToBinary
() const¶ Serialize the ParameterIO to a binary parameter archive.
-
std::string
ToText
() const¶ Serialize the ParameterIO to a YAML representation.
Public Members
-
u32
version
= 0¶ Data version (not the AAMP format version). Typically 0.
-
std::string
type
¶ Data type identifier. Typically “xml”.
Public Static Functions
-
static ParameterIO
FromBinary
(tcb::span<const u8> data)¶ Load a ParameterIO from a binary parameter archive.
-
static ParameterIO
FromText
(std::string_view yml_text)¶ Load a ParameterIO from a YAML representation.
-
Name utilities¶
Because binary parameter archives only store CRC32 hashes of structure names, recovering the original names – which is useful for converting archives to a human-readable format – requires the use of a name table.
When serializing to YAML, by default oead will use a table that contains strings from Breath of the Wild’s executable.
-
struct
NameTable
¶ A table of names that is used to recover original names in binary parameter archives which store only name hashes.
Public Functions
-
NameTable
(bool with_botw_strings = false)¶
-
std::optional<std::string_view>
GetName
(u32 hash, int index, u32 parent_name_hash)¶ Tries to guess the name that is associated with the given hash and index (of the parameter / object / list in its parent).
The table is automatically updated with any newly found names if an indice-based guess was necessary.
-
std::string_view
AddName
(std::string name)¶ Add a known string to the name table.
- Return
a view to the added string.
-
std::string_view
AddName
(u32 hash, std::string name)¶ Add a known string to the name table. This should be used if the string’s hash has already been computed in order to avoid recomputing it.
- Return
a view to the added string.
-
void
AddNameReference
(std::string_view name)¶ Add a known string to the name table.
- Warning
Since this is taking a string view, the actual string data must outlive this table.
Public Members
-
absl::flat_hash_map<u32, std::string_view>
names
¶ Hash to name map. The strings are only references.
-
absl::flat_hash_map<u32, std::string>
owned_names
¶ Hash to name map. The strings are owned.
-
std::vector<std::string_view>
numbered_names
¶ List of numbered names (i.e. names that contain a printf specifier for the index).
-