AAMP (Python)

Note

Because of the similarities between the C++ APIs and the Python APIs, only the former will be documented in detail. Please refer to the C++ documentation for more information.

  • 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.

Quick usage

import oead
with open("Horse.baiprog", "rb") as f:
   pio = oead.aamp.ParameterIO.from_binary(f.read())
pio.version
# 0
pio.type
# "xml"
pio.objects["DemoAIActionIdx"].params["Demo_Wait"]
# Parameter(107)
pio.objects["DemoAIActionIdx"].params["Demo_Wait"].v
# 107

Parameters

class oead.aamp.Parameter

See also oead::aamp::Parameter

class Type

Members:

Bool

F32

Int

Vec2

Vec3

Vec4

Color

String32

String64

Curve1

Curve2

Curve3

Curve4

BufferInt

BufferF32

String256

Quat

U32

BufferU32

BufferBinary

StringRef

Bool = Type.Bool
BufferBinary = Type.BufferBinary
BufferF32 = Type.BufferF32
BufferInt = Type.BufferInt
BufferU32 = Type.BufferU32
Color = Type.Color
Curve1 = Type.Curve1
Curve2 = Type.Curve2
Curve3 = Type.Curve3
Curve4 = Type.Curve4
F32 = Type.F32
Int = Type.Int
Quat = Type.Quat
String256 = Type.String256
String32 = Type.String32
String64 = Type.String64
StringRef = Type.StringRef
U32 = Type.U32
Vec2 = Type.Vec2
Vec3 = Type.Vec3
Vec4 = Type.Vec4
__init__(self: oead.aamp.Parameter.Type, arg0: int) → None
property name

handle) -> str

Type

(self

__init__(self: oead.aamp.Parameter, arg0: Union[bool, float, int, oead.Vector2f, oead.Vector3f, oead.Vector4f, oead.Color4f, oead.FixedSafeString32, oead.FixedSafeString64, List[oead.Curve[1]], List[oead.Curve[2]], List[oead.Curve[3]], List[oead.Curve[4]], oead.BufferInt, oead.BufferF32, oead.FixedSafeString256, oead.Quatf, oead.U32, oead.BufferU32, oead.Bytes, str]) → None
type(self: oead.aamp.Parameter) → oead.aamp.Parameter.Type
property v

Value

class oead.aamp.Name

See also oead::aamp::Name

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: oead.aamp.Name, name_crc32: int) -> None

  2. __init__(self: oead.aamp.Name, name: str) -> None

property hash
class oead.aamp.ParameterMap

Lightweight dict-like object wrapping a oead::aamp::ParameterMap.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: oead.aamp.ParameterMap) -> None

  2. __init__(self: oead.aamp.ParameterMap, iterator: iterator) -> None

  3. __init__(self: oead.aamp.ParameterMap, dictionary: dict) -> None

clear(self: aamp.ParameterMap) → None
get(self: aamp.ParameterMap, key: oead.aamp.Name, default: Optional[oead.aamp.Parameter] = None) → Optional[oead.aamp.Parameter]
items(self: aamp.ParameterMap) → iterator
keys(self: aamp.ParameterMap) → iterator
class oead.aamp.ParameterObjectMap

Lightweight dict-like object wrapping a oead::aamp::ParameterObjectMap.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: oead.aamp.ParameterObjectMap) -> None

  2. __init__(self: oead.aamp.ParameterObjectMap, iterator: iterator) -> None

  3. __init__(self: oead.aamp.ParameterObjectMap, dictionary: dict) -> None

clear(self: aamp.ParameterObjectMap) → None
get(self: aamp.ParameterObjectMap, key: oead.aamp.Name, default: Optional[oead.aamp.ParameterObject] = None) → Optional[oead.aamp.ParameterObject]
items(self: aamp.ParameterObjectMap) → iterator
keys(self: aamp.ParameterObjectMap) → iterator
class oead.aamp.ParameterListMap

Lightweight dict-like object wrapping a oead::aamp::ParameterListMap.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: oead.aamp.ParameterListMap) -> None

  2. __init__(self: oead.aamp.ParameterListMap, iterator: iterator) -> None

  3. __init__(self: oead.aamp.ParameterListMap, dictionary: dict) -> None

clear(self: aamp.ParameterListMap) → None
get(self: aamp.ParameterListMap, key: oead.aamp.Name, default: Optional[oead.aamp.ParameterList] = None) → Optional[oead.aamp.ParameterList]
items(self: aamp.ParameterListMap) → iterator
keys(self: aamp.ParameterListMap) → iterator

Note

Just like the C++ oead::aamp::Name, 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.

class oead.aamp.ParameterList

See also oead::aamp::ParameterList

__init__(self: oead.aamp.ParameterList) → None
property lists
property objects
class oead.aamp.ParameterObject

See also oead::aamp::ParameterObject

__init__(self: oead.aamp.ParameterObject) → None
property params

Parameter IO

class oead.aamp.ParameterIO

See also oead::aamp::ParameterIO

__init__(self: oead.aamp.ParameterIO) → None
static from_binary(buffer: BytesLike) → oead.aamp.ParameterIO
static from_text(yml_text: str) → oead.aamp.ParameterIO
to_binary(self: oead.aamp.ParameterIO) → oead.Bytes
to_text(self: oead.aamp.ParameterIO) → str
property type
property version

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.

class oead.aamp.NameTable

See also oead::aamp::NameTable

__init__(self: oead.aamp.NameTable, with_botw_strings: bool) → None
add_name(self: oead.aamp.NameTable, name: str) → str
get_name(self: oead.aamp.NameTable, hash: int, index: int, parent_name_hash: int) → Optional[str]

Note

For safety reasons, the underlying maps are not exposed.

oead.aamp.get_default_name_table() → oead.aamp.NameTable

Just like in C++, this returns the default instance of the name table. It is modifiable.

See also oead::aamp::GetDefaultNameTable()