<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://epd.zeldamods.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Watertoon</id>
	<title>EPD Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://epd.zeldamods.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Watertoon"/>
	<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/wiki/Special:Contributions/Watertoon"/>
	<updated>2026-04-28T13:44:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=159</id>
		<title>Bphsh</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=159"/>
		<updated>2026-02-20T12:02:51Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: /* Layer Hit Mask Array (Not Fully Confirmed) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bphsh is a &amp;quot;shape&amp;quot; file format. Responsible for storing the underlying physics engine&#039;s collision mesh data as well as relevant phive specific data. This page is focused on the version found in Nintendo Switch Online: Playtest Program (021), and Havok 2023.2.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
# Header&lt;br /&gt;
# Havok Tag File&lt;br /&gt;
# Material Array&lt;br /&gt;
# Unknown Array&lt;br /&gt;
&lt;br /&gt;
== Structures (phive) ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
[[Common Phive|Common phive]] header for shape. The sections consist of the Havok tagfile containing an hknpMeshShape, an array of phive materials, and a currently unknown section.&lt;br /&gt;
&lt;br /&gt;
=== Material Array ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Id. The PhiveConfig byaml stores an application&#039;s materials under MaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sub Material. The PhiveConfig byaml stores an application&#039;s sub materials under SubMaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|User Shape Tag Mask. Up to 64 tags can be present, each bit denotes whether a tag exists. The PhiveConfig byaml stores an application&#039;s tags under UserShapeTagCollection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Layer Hit Mask Array (Not Fully Confirmed) ===&lt;br /&gt;
In previous titles from NSO PT the layer hit masks were 32-bits each, making each element 0x8 bytes. A bphsh may have different counts for materials and layer hit masks. Phive clamps the size of the material array and layer hit mask array to the smaller of the two. HknpMeshShape shapeTags are presumably used to map Havok&#039;s geometry to Phive&#039;s material and layer hit masks.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|Layer Hit Mask.The PhiveConfig byaml stores an application&#039;s layers under LayerEntityCollection for entity rigid bodies and LayerSensorCollection for sensor rigid bodies. Each bit in the mask corresponds to a layer in the order they are defined by PhiveConfig.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|Sub Layer Hit Mask.The PhiveConfig byaml stores an application&#039;s sub layers under SubLayerEntityCollection for entity rigid bodies and SubLayerSensorCollection for sensor rigid bodies. Each bit in the mask corresponds to a layer in the order they are defined by PhiveConfig.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Structures (Havok Physics) ==&lt;br /&gt;
&lt;br /&gt;
=== Common ===&lt;br /&gt;
&lt;br /&gt;
==== hkEnum&amp;lt;T,B&amp;gt;, hkFlags&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
Enum of type T, with underlying storage of type B.&lt;br /&gt;
&lt;br /&gt;
==== hkRelPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the template type T.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArrayView&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
B is an integer type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_capacityAndFlags; Max capacity of elements the array can store, also flags.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== hknpMeshShape ===&lt;br /&gt;
Stores a collision mesh geometry and acceleration structures.&lt;br /&gt;
&lt;br /&gt;
Note; hkBaseObject has an alignment of 8, but hknpMeshShape promotes the alignment to 0x10 due to containing an hkVector4. Unmarked space is padding.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkBaseObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|u64&lt;br /&gt;
|0x8&lt;br /&gt;
|_vft_reserve; Vtable pointer, resolved at runtime.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkReferencedObject : hkBaseObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_sizeAndFlags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_refCount&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpShape : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpShapeType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_type; Should always be &amp;quot;MESH&amp;quot; (0x8) for an hknpMeshShape.&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpCollisionDispatchType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_dispatchType&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x2&lt;br /&gt;
|hkFlags&amp;lt;hknpShape::FlagsEnum, hkUint16&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numShapeKeyBits&lt;br /&gt;
|-&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkReal&lt;br /&gt;
|m_convexRadius&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUint64&lt;br /&gt;
|m_userData, this is set at runtime to a phive structure containing references to the material and unknown array.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hknpShapeProperties&lt;br /&gt;
|m_properties&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpCompositeShape : hknpShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_shapeTagCodecInfo&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShape : hknpCompositeShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x20&lt;br /&gt;
|hknpMeshShapeVertexConversionUtil&lt;br /&gt;
|m_vertexConversionUtil&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::ShapeTagTableEntry, int&amp;gt;&lt;br /&gt;
|m_shapeTagTable&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x18&lt;br /&gt;
|hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt;&lt;br /&gt;
|m_topLevelTree&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection, int&amp;gt;&lt;br /&gt;
|m_geometrySections; Appears to be a convex decomposition, or at least partitioning, of the mesh shape.&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpMeshShapePrimitiveMapping&amp;gt;&lt;br /&gt;
|m_primitiveMapping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SPHERE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CAPSULE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CYLINDER&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRIANGLE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BOX&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MESH&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EXTERN_MESH&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOUND&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD_BASE&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HEIGHT_FIELD&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PARTICLE_SYSTEM&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRANSFORMED&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED_COMPOUND&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BREAKABLE_COMPOUND&lt;br /&gt;
|0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LOD&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DUMMY&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LEGACY_COMPRESSED_MESH&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_SHAPE_TYPES&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INVALID&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpCollisionDispatchType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NONE&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_TYPES&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShape::FlagsEnum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_SHAPE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_POLYTOPE_SHAPE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_COMPOSITE_SHAPE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_HEIGHT_FIELD_SHAPE&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_SINGLE_POINT_MANIFOLD&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_INTERIOR_TRIANGLE&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SUPPORTS_COLLISIONS_WITH_INTERIOR_TRIANGLES&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_NORMAL_TO_FIND_SUPPORT_PLANE&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_TRIANGLE_OR_QUAD_SHAPE&lt;br /&gt;
|0x100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_QUAD_SHAPE&lt;br /&gt;
|0x200&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_SDF_EDGE_COLLISION_ENABLED&lt;br /&gt;
|0x400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HAS_SURFACE_VELOCITY&lt;br /&gt;
|0x800&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x2000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x4000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeProperties ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hknpShapeProperties::Entry&amp;gt;&lt;br /&gt;
|Optional shape properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpShapeProperties::Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpShapePropertyBase&amp;gt;&lt;br /&gt;
|Pointer to shape property. If present, likely a derived class such as hknpShapeConnectivityGraph, hknpRefDragProperties, hknpShapeMassProperties, hknpShapeMassPropertiesTree, hknpShapeMassConfigProperty, or hknpMaterialPalette.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== hknpShapePropertyBase ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_propertyKey; Appears to be a derived class unique identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapeVertexConversionUtil ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16; Appears to be vertex compression parameters.&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16Inv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::ShapeTagTableEntry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_meshPrimitiveKey&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_shapeTag&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
|m_nodes&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::hkcdSimdTree : hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_firstFreeIndex&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|bool&lt;br /&gt;
|m_isCompact&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::Node : hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x10&lt;br /&gt;
|hkUint32[4]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint8[4]&lt;br /&gt;
|m_filterMasks&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x1&lt;br /&gt;
|hkFlags&amp;lt;hkcdSimdTreeNamespace::Node::FlagsEnum, unsigned char&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x75&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_maxDepth&lt;br /&gt;
|-&lt;br /&gt;
|0x76&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_splittingAxisCache&lt;br /&gt;
|-&lt;br /&gt;
|0x77&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numAddRemoveOperationsSinceLastRebalance&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_parent&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_numLeaves&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node::FlagsEnum =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_LEAF&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_FREE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_NODES_ARE_REBALANCED&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_REINSERT_PASS_DID_NOP&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_LEAVES_ARE_REBALANCED&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::GeometrySection ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpAabb8TreeNode, int&amp;gt;&lt;br /&gt;
|m_sectionBvh&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection::Primitive, int&amp;gt;&lt;br /&gt;
|m_primitives&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_vertexBuffer&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_interiorPrimitiveBitField&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc&lt;br /&gt;
|hkUint32[3]&lt;br /&gt;
|m_sectionOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0xc&lt;br /&gt;
|hkFloat3&lt;br /&gt;
|m_bitScale8Inv&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x6&lt;br /&gt;
|hkInt16[3]&lt;br /&gt;
|m_bitOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpAabb8TreeNode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpAabb8TreeNode : hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x3&lt;br /&gt;
|hkUint8[3]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Primitive =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_aId&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_bId&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_cId&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_dId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Vertex16_3 =====&lt;br /&gt;
While m_vertexBuffer is untyped in later versions, in previous version it assumed this vertex format struct, which still appears to be the case (u8 mainly forces the m_vertexBuffer.m_size to be in bytes)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_x&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_y&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapePrimitiveMapping ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShapePrimitiveMapping : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkUint32&amp;gt;&lt;br /&gt;
|m_sectionStart&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;unsigned int&amp;gt;&lt;br /&gt;
|m_bitString&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_bitsPerEntry&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_triangleIndexBitMask&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=158</id>
		<title>Bphsh</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=158"/>
		<updated>2026-02-20T12:02:10Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add very likely (but not fully confirmed through code yet) guess for second array with caveat. Evidence includes: layer hit mask size change between games, layer hit masks being included in PhiveConfig MaterialPreset, clamping of size to material array&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bphsh is a &amp;quot;shape&amp;quot; file format. Responsible for storing the underlying physics engine&#039;s collision mesh data as well as relevant phive specific data. This page is focused on the version found in Nintendo Switch Online: Playtest Program (021), and Havok 2023.2.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
# Header&lt;br /&gt;
# Havok Tag File&lt;br /&gt;
# Material Array&lt;br /&gt;
# Unknown Array&lt;br /&gt;
&lt;br /&gt;
== Structures (phive) ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
[[Common Phive|Common phive]] header for shape. The sections consist of the Havok tagfile containing an hknpMeshShape, an array of phive materials, and a currently unknown section.&lt;br /&gt;
&lt;br /&gt;
=== Material Array ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Id. The PhiveConfig byaml stores an application&#039;s materials under MaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sub Material. The PhiveConfig byaml stores an application&#039;s sub materials under SubMaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|User Shape Tag Mask. Up to 64 tags can be present, each bit denotes whether a tag exists. The PhiveConfig byaml stores an application&#039;s tags under UserShapeTagCollection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Layer Hit Mask Array (Not Fully Confirmed) ===&lt;br /&gt;
In previous titles from NSO PT the layer hit masks were 32-bits each, making each element 0x8 bytes. A bphsh may have different counts for materials and layer hit masks. Phive clamps the size of the material array and layer hit mask array to the smaller of the two. HknpMeshShape shapeTags are presumably used to map Havok&#039;s geometry to Phive&#039;s material and layer hit masks.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|Layer Hit Mask.The PhiveConfig byaml stores an application&#039;s layers under LayerEntityCollection for entity rigid bodies and LayerSensorCollection for sensor rigid bodies. Each bit in the mask corresponds to a layer in the order they are defined by PhiveConfig.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|Sub Layer Hit Mask.The PhiveConfig byaml stores an application&#039;s layers under SubLayerEntityCollection for entity rigid bodies and SubLayerSensorCollection for sensor rigid bodies. Each bit in the mask corresponds to a layer in the order they are defined by PhiveConfig.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Structures (Havok Physics) ==&lt;br /&gt;
&lt;br /&gt;
=== Common ===&lt;br /&gt;
&lt;br /&gt;
==== hkEnum&amp;lt;T,B&amp;gt;, hkFlags&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
Enum of type T, with underlying storage of type B.&lt;br /&gt;
&lt;br /&gt;
==== hkRelPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the template type T.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArrayView&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
B is an integer type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_capacityAndFlags; Max capacity of elements the array can store, also flags.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== hknpMeshShape ===&lt;br /&gt;
Stores a collision mesh geometry and acceleration structures.&lt;br /&gt;
&lt;br /&gt;
Note; hkBaseObject has an alignment of 8, but hknpMeshShape promotes the alignment to 0x10 due to containing an hkVector4. Unmarked space is padding.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkBaseObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|u64&lt;br /&gt;
|0x8&lt;br /&gt;
|_vft_reserve; Vtable pointer, resolved at runtime.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkReferencedObject : hkBaseObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_sizeAndFlags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_refCount&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpShape : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpShapeType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_type; Should always be &amp;quot;MESH&amp;quot; (0x8) for an hknpMeshShape.&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpCollisionDispatchType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_dispatchType&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x2&lt;br /&gt;
|hkFlags&amp;lt;hknpShape::FlagsEnum, hkUint16&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numShapeKeyBits&lt;br /&gt;
|-&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkReal&lt;br /&gt;
|m_convexRadius&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUint64&lt;br /&gt;
|m_userData, this is set at runtime to a phive structure containing references to the material and unknown array.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hknpShapeProperties&lt;br /&gt;
|m_properties&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpCompositeShape : hknpShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_shapeTagCodecInfo&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShape : hknpCompositeShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x20&lt;br /&gt;
|hknpMeshShapeVertexConversionUtil&lt;br /&gt;
|m_vertexConversionUtil&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::ShapeTagTableEntry, int&amp;gt;&lt;br /&gt;
|m_shapeTagTable&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x18&lt;br /&gt;
|hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt;&lt;br /&gt;
|m_topLevelTree&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection, int&amp;gt;&lt;br /&gt;
|m_geometrySections; Appears to be a convex decomposition, or at least partitioning, of the mesh shape.&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpMeshShapePrimitiveMapping&amp;gt;&lt;br /&gt;
|m_primitiveMapping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SPHERE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CAPSULE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CYLINDER&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRIANGLE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BOX&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MESH&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EXTERN_MESH&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOUND&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD_BASE&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HEIGHT_FIELD&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PARTICLE_SYSTEM&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRANSFORMED&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED_COMPOUND&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BREAKABLE_COMPOUND&lt;br /&gt;
|0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LOD&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DUMMY&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LEGACY_COMPRESSED_MESH&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_SHAPE_TYPES&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INVALID&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpCollisionDispatchType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NONE&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_TYPES&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShape::FlagsEnum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_SHAPE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_POLYTOPE_SHAPE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_COMPOSITE_SHAPE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_HEIGHT_FIELD_SHAPE&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_SINGLE_POINT_MANIFOLD&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_INTERIOR_TRIANGLE&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SUPPORTS_COLLISIONS_WITH_INTERIOR_TRIANGLES&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_NORMAL_TO_FIND_SUPPORT_PLANE&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_TRIANGLE_OR_QUAD_SHAPE&lt;br /&gt;
|0x100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_QUAD_SHAPE&lt;br /&gt;
|0x200&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_SDF_EDGE_COLLISION_ENABLED&lt;br /&gt;
|0x400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HAS_SURFACE_VELOCITY&lt;br /&gt;
|0x800&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x2000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x4000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeProperties ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hknpShapeProperties::Entry&amp;gt;&lt;br /&gt;
|Optional shape properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpShapeProperties::Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpShapePropertyBase&amp;gt;&lt;br /&gt;
|Pointer to shape property. If present, likely a derived class such as hknpShapeConnectivityGraph, hknpRefDragProperties, hknpShapeMassProperties, hknpShapeMassPropertiesTree, hknpShapeMassConfigProperty, or hknpMaterialPalette.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== hknpShapePropertyBase ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_propertyKey; Appears to be a derived class unique identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapeVertexConversionUtil ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16; Appears to be vertex compression parameters.&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16Inv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::ShapeTagTableEntry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_meshPrimitiveKey&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_shapeTag&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
|m_nodes&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::hkcdSimdTree : hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_firstFreeIndex&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|bool&lt;br /&gt;
|m_isCompact&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::Node : hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x10&lt;br /&gt;
|hkUint32[4]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint8[4]&lt;br /&gt;
|m_filterMasks&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x1&lt;br /&gt;
|hkFlags&amp;lt;hkcdSimdTreeNamespace::Node::FlagsEnum, unsigned char&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x75&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_maxDepth&lt;br /&gt;
|-&lt;br /&gt;
|0x76&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_splittingAxisCache&lt;br /&gt;
|-&lt;br /&gt;
|0x77&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numAddRemoveOperationsSinceLastRebalance&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_parent&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_numLeaves&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node::FlagsEnum =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_LEAF&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_FREE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_NODES_ARE_REBALANCED&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_REINSERT_PASS_DID_NOP&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_LEAVES_ARE_REBALANCED&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::GeometrySection ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpAabb8TreeNode, int&amp;gt;&lt;br /&gt;
|m_sectionBvh&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection::Primitive, int&amp;gt;&lt;br /&gt;
|m_primitives&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_vertexBuffer&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_interiorPrimitiveBitField&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc&lt;br /&gt;
|hkUint32[3]&lt;br /&gt;
|m_sectionOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0xc&lt;br /&gt;
|hkFloat3&lt;br /&gt;
|m_bitScale8Inv&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x6&lt;br /&gt;
|hkInt16[3]&lt;br /&gt;
|m_bitOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpAabb8TreeNode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpAabb8TreeNode : hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x3&lt;br /&gt;
|hkUint8[3]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Primitive =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_aId&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_bId&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_cId&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_dId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Vertex16_3 =====&lt;br /&gt;
While m_vertexBuffer is untyped in later versions, in previous version it assumed this vertex format struct, which still appears to be the case (u8 mainly forces the m_vertexBuffer.m_size to be in bytes)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_x&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_y&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapePrimitiveMapping ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShapePrimitiveMapping : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkUint32&amp;gt;&lt;br /&gt;
|m_sectionStart&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;unsigned int&amp;gt;&lt;br /&gt;
|m_bitString&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_bitsPerEntry&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_triangleIndexBitMask&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=156</id>
		<title>Shaft::baseproc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=156"/>
		<updated>2026-02-16T08:58:21Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Remove &amp;quot;base procedure&amp;quot; for lack of source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &amp;quot;BaseProc&amp;quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcMgr ===&lt;br /&gt;
Manages BaseProcs and BaseProc related sub-managers. BaseProcs with the Calc, Sleeping, or Paused states create a job graph spanning 4 &amp;quot;stages&amp;quot; with 8 &amp;quot;priorities&amp;quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
BaseProcMgr has 5 main states it can move between by various api calls.&lt;br /&gt;
&lt;br /&gt;
===== Idle =====&lt;br /&gt;
The system is at rest. Accessing BaseProcs through BaseProcLinks outside the system is legal.&lt;br /&gt;
&lt;br /&gt;
===== Building =====&lt;br /&gt;
The system is building the job graph. BaseProcs in the Calc state will insert their jobs, and paused or sleeping BaseProcs will instead insert their sleep job if they have one.&lt;br /&gt;
&lt;br /&gt;
===== BaseProc Processing =====&lt;br /&gt;
The system is running the current job graph. Accessing BaseProcs through BaseProcLinks outside the system is illegal.&lt;br /&gt;
&lt;br /&gt;
===== Removal Processing =====&lt;br /&gt;
The system is processing removal requests. Successfully removed BaseProcs are scheduled for asynchronous deletion.&lt;br /&gt;
&lt;br /&gt;
===== Request Processing =====&lt;br /&gt;
The system is processing BaseProc requests. It may be illegal to access a BaseProc outside the system at this time.&lt;br /&gt;
&lt;br /&gt;
=== BaseProc ===&lt;br /&gt;
Harbors up to 1 job for each stage and priority. As well as up to 1 sleep job. Is a member of the BaseProc tree. Has global meta-data for being referenced by BaseProcLinks. Can have dependency relations with other BaseProcs.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
A BaseProc has 12 states one can logically group into 4 &amp;quot;cycles&amp;quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;br /&gt;
&lt;br /&gt;
===== Initialization =====&lt;br /&gt;
This group of states is progressed linearly along the creation of a BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Uninitialized ======&lt;br /&gt;
The default state on creation.&lt;br /&gt;
&lt;br /&gt;
====== PendingInitialize ======&lt;br /&gt;
The BaseProc is in the state of being initialized.&lt;br /&gt;
&lt;br /&gt;
====== Initialized ======&lt;br /&gt;
The BaseProc has been initialized. Next request processing a &amp;quot;PostInitialize&amp;quot; function will be called once per processing, if it fails the BaseProc may be deleted, or the system may try again under certain conditions. Trying again may not be intended.&lt;br /&gt;
&lt;br /&gt;
===== Live =====&lt;br /&gt;
This group of states represents a BaseProc that is &amp;quot;live&amp;quot; in the system. The initial state after &amp;quot;PostInitialize&amp;quot; succeeds is Ready, from there a BaseProc can move between Calc, Sleeping, or Paused.&lt;br /&gt;
&lt;br /&gt;
====== Ready ======&lt;br /&gt;
The initial &amp;quot;Live&amp;quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to change the BaseProc to Calc.&lt;br /&gt;
&lt;br /&gt;
====== Calc ======&lt;br /&gt;
The quintessential &amp;quot;Live&amp;quot; state. All of the BaseProc&#039;s Calc jobs will be used in job graph building.&lt;br /&gt;
&lt;br /&gt;
====== Sleeping ======&lt;br /&gt;
A heavyweight break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelSleep will attempt to change the BaseProc to Calc.&lt;br /&gt;
&lt;br /&gt;
====== Paused ======&lt;br /&gt;
A lighter break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelPause will unpause the BaseProc.&lt;br /&gt;
&lt;br /&gt;
===== Removal =====&lt;br /&gt;
After a delete request is processed, a BaseProc is transitioned to the PendingRemoval state.&lt;br /&gt;
&lt;br /&gt;
====== PendingRemoval ======&lt;br /&gt;
The BaseProc is removing itself from the application&#039;s subsystems. When the OnRemove callback succeeds the BaseProc immediately transitions to the Removal state.&lt;br /&gt;
&lt;br /&gt;
====== Removal ======&lt;br /&gt;
The BaseProc removes it&#039;s BaseProcLink meta data, invalidating all BaseProcLinks to it, calls the OnStateRemoval callback, and then immediately transitions to the Removed state.&lt;br /&gt;
&lt;br /&gt;
====== Removed ======&lt;br /&gt;
Next time there is space the BaseProc will be added to the asynchronous deletion queue and transitioned to the PendingFinalize state.&lt;br /&gt;
&lt;br /&gt;
===== Finalization =====&lt;br /&gt;
This group of states to track a BaseProc&#039;s asynchronous finalization up to it&#039;s deletion.&lt;br /&gt;
&lt;br /&gt;
====== PendingFinalization ======&lt;br /&gt;
The BaseProc will call it&#039;s PreFinalize callback, remove itself from the BaseProcMgr lists and trees, and then call it&#039;s PostFinalize callback before immediate transitioning to the Finalized state.&lt;br /&gt;
&lt;br /&gt;
====== Finalized ======&lt;br /&gt;
The BaseProc has completed finalization and will imminently be deleted, with it&#039;s memory freed back to it&#039;s parent heap.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcBinder ===&lt;br /&gt;
Allows watching for the asynchronous creation of a BaseProc. On completion a BaseProcLink to that BaseProc can be retrieved.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcLink ===&lt;br /&gt;
A &amp;quot;hyperlink&amp;quot; reference to a BaseProc. Used to retrieve scoped &amp;quot;read&amp;quot; or &amp;quot;write&amp;quot; accessors to a BaseProc. The accessors follow the C++ &amp;quot;optional&amp;quot; pattern, where retrieving one can fail to retrieve the underlying BaseProc. There are a few rules regarding when an accessor is legal to acquire. Read accessors are the least strict, and succeed as long as the BaseProc has not processed a delete request. Write accessors have 3 different rulesets for anywhere, outside the system, and a strict inside the system.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_nn::util&amp;diff=155</id>
		<title>Common nn::util</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_nn::util&amp;diff=155"/>
		<updated>2026-02-16T06:57:17Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Cleanup, add NWPtr&amp;lt;T&amp;gt; and NWString to use as helpers in the other NW file format pages.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are file structures common to multiple NintendoWare file formats. Namely the nn::gfx file formats [[Bntx]] and [[Bnsh]], the nn::g3d file formats [[Bfres]], and [[Bfsha]], the nn::vg file format [[Bnvg]], and the nn::bezel file formats [[Bea]], [[Bnbshpk]], and [[Nbmap]].&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== nn::util::BinaryFileHeader ===&lt;br /&gt;
The base struct of almost if not every file format using nn::util file structures.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|Magic (dependent on file type)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Micro version (no code breaking changes)&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Minor version&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Major version&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Endianess (0xfffe in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Packed alignment (alignment = 1 &amp;lt;&amp;lt; packed alignment)&lt;br /&gt;
|-&lt;br /&gt;
|0xf&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Always 64 (address size?)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File name offset&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Is relocated (set on runtime by nn::util::RelocationTable::Relocate to prevent double relocation)&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|First BinaryBlockHeader offset relative to this header&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|RelocationTable offset relative to this header&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::util::BinaryBlockHeader ===&lt;br /&gt;
A common base struct of sub sections in nn::util based files.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (dependent on file block type)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Next BinaryBlockHeader offset relative to this header&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of sub section&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Relocation Table ==&lt;br /&gt;
Relocation tables are iterated to relocate pointers all throughout the BinaryFileHeader derived file. Converting the file into just a collection of structs in memory.&lt;br /&gt;
&lt;br /&gt;
=== NWPtr&amp;lt;T&amp;gt; ===&lt;br /&gt;
A template type to a pointer to type T that is relocatable by the relocation table. The size should match the address size in the file header, in Switch games this is almost always 64-bits.&lt;br /&gt;
&lt;br /&gt;
=== nn::util::RelocationTable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;_RLT&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset of this table relative to the binary file header&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Section count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== nn::util::RelocationTable::Section ====&lt;br /&gt;
Immediately following the RelocationTable header is an array of section information. Which can divide up the file into distinct regions relative to a base offset.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Base pointer for file region offsets, if null the file region is relative to the BinaryFileHeader)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File region offset (relative to BinaryFileHeader or Base pointer)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File region size&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base entry index&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Entry count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== nn::util::RelocationTable::Entry (unofficial name) =====&lt;br /&gt;
Immediately following the Section array is an array of information about relocation entries. Each entry defines a set of continuous pointer arrays with a stride between each array.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File region offset (relative to section file region offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Array count&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Per array pointer count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Array stride (in pointer count, so (stride * sizeof(void*))&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
=== nn::util::ResDic ===&lt;br /&gt;
A dictionary, each element must have a unique string key.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;_DIC&amp;quot; in big-endian or 0x0)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count (does not count root node, which is part of the header)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x10&lt;br /&gt;
|nn::util::ResDic::Node&lt;br /&gt;
|Root node (null key)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x10 * Count&lt;br /&gt;
|nn::util::ResDic::Node[Count]&lt;br /&gt;
|Node array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== nn::util::ResDic::Node (unofficial name) ====&lt;br /&gt;
The ref bit is used for a radix tree style lookup.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Ref bit (bit 0-2 = right shift, bit 2-31 = length)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Left node index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Right node index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|String key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StringPool ==&lt;br /&gt;
&lt;br /&gt;
=== NWString ===&lt;br /&gt;
NintendoWare file string pointers are preceded by a u16 string length. The strings are also aligned to 2 bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|String Length&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1 * String Length&lt;br /&gt;
|char[String Length]&lt;br /&gt;
|String Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::util::StringPool ===&lt;br /&gt;
Header that precedes the deduplicated string table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;_STR&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Next BinaryBlockHeader offset relative to this header&lt;br /&gt;
|-&lt;br /&gt;
|0c8&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Empty String entry (0x0000, 0x00)&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|NWString[StringCount]&lt;br /&gt;
|String region&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Rsizetable&amp;diff=154</id>
		<title>Rsizetable</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Rsizetable&amp;diff=154"/>
		<updated>2026-02-16T06:29:22Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Ares]] implements a &amp;quot;resource size table&amp;quot; file format managed by ares::ResourceSizeTable. &#039;&#039;&#039;The earliest revision has no header&#039;&#039;&#039;, only containing the crc32b array, the size of array is implicitly calculated. The first revision adds a 0xc byte header and an optional array of fixed size file path + resource size pairs for file paths that produce a hash collision (default fixed size of that game&#039;s max path). The second and most common revision uses a 0x16 byte header, the 0x6 byte magic makes all subsequent u32 values unaligned.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Header (revision 1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;RSTB&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b resource size pair count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Path resource size pair count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header (revision 2) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x6&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;RESTBL&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of paths in collision table (0x80 and 0xa0 have been used)&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b resource size pair count&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Path resource size pair count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Crc32b Array ===&lt;br /&gt;
Array of hash + size pairs immediately following the header, if the header exists. Sorted by hash.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b of file path&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size required by file resource in ares&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path Array ===&lt;br /&gt;
Array of path + size pairs immediately following the Crc32b array, if the file path array exists. Sorted by path.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|ares MaxPath&lt;br /&gt;
|char[ares MaxPath]&lt;br /&gt;
|Fixed size file path&lt;br /&gt;
|-&lt;br /&gt;
|ares MaxPath&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size required by file resource in ares&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=153</id>
		<title>Shaft::baseproc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=153"/>
		<updated>2026-02-12T06:27:19Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Change name of PendingActive and Active to Ready and Calc based on totk ai nodes QueryGenericIsSleepOrReady and QueryActorHolderIsCalcOrPauseState&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &amp;quot;base procedure&amp;quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcMgr ===&lt;br /&gt;
Manages BaseProcs and BaseProc related sub-managers. BaseProcs with the Calc, Sleeping, or Paused states create a job graph spanning 4 &amp;quot;stages&amp;quot; with 8 &amp;quot;priorities&amp;quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
BaseProcMgr has 5 main states it can move between by various api calls.&lt;br /&gt;
&lt;br /&gt;
===== Idle =====&lt;br /&gt;
The system is at rest. Accessing BaseProcs through BaseProcLinks outside the system is legal.&lt;br /&gt;
&lt;br /&gt;
===== Building =====&lt;br /&gt;
The system is building the job graph. BaseProcs in the Calc state will insert their jobs, and paused or sleeping BaseProcs will instead insert their sleep job if they have one.&lt;br /&gt;
&lt;br /&gt;
===== BaseProc Processing =====&lt;br /&gt;
The system is running the current job graph. Accessing BaseProcs through BaseProcLinks outside the system is illegal.&lt;br /&gt;
&lt;br /&gt;
===== Removal Processing =====&lt;br /&gt;
The system is processing removal requests. Successfully removed BaseProcs are scheduled for asynchronous deletion.&lt;br /&gt;
&lt;br /&gt;
===== Request Processing =====&lt;br /&gt;
The system is processing BaseProc requests. It may be illegal to access a BaseProc outside the system at this time.&lt;br /&gt;
&lt;br /&gt;
=== BaseProc ===&lt;br /&gt;
Harbors up to 1 job for each stage and priority. As well as up to 1 sleep job. Is a member of the BaseProc tree. Has global meta-data for being referenced by BaseProcLinks. Can have dependency relations with other BaseProcs.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
A BaseProc has 12 states one can logically group into 4 &amp;quot;cycles&amp;quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;br /&gt;
&lt;br /&gt;
===== Initialization =====&lt;br /&gt;
This group of states is progressed linearly along the creation of a BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Uninitialized ======&lt;br /&gt;
The default state on creation.&lt;br /&gt;
&lt;br /&gt;
====== PendingInitialize ======&lt;br /&gt;
The BaseProc is in the state of being initialized.&lt;br /&gt;
&lt;br /&gt;
====== Initialized ======&lt;br /&gt;
The BaseProc has been initialized. Next request processing a &amp;quot;PostInitialize&amp;quot; function will be called once per processing, if it fails the BaseProc may be deleted, or the system may try again under certain conditions. Trying again may not be intended.&lt;br /&gt;
&lt;br /&gt;
===== Live =====&lt;br /&gt;
This group of states represents a BaseProc that is &amp;quot;live&amp;quot; in the system. The initial state after &amp;quot;PostInitialize&amp;quot; succeeds is Ready, from there a BaseProc can move between Calc, Sleeping, or Paused.&lt;br /&gt;
&lt;br /&gt;
====== Ready ======&lt;br /&gt;
The initial &amp;quot;Live&amp;quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to change the BaseProc to Calc.&lt;br /&gt;
&lt;br /&gt;
====== Calc ======&lt;br /&gt;
The quintessential &amp;quot;Live&amp;quot; state. All of the BaseProc&#039;s Calc jobs will be used in job graph building.&lt;br /&gt;
&lt;br /&gt;
====== Sleeping ======&lt;br /&gt;
A heavyweight break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelSleep will attempt to change the BaseProc to Calc.&lt;br /&gt;
&lt;br /&gt;
====== Paused ======&lt;br /&gt;
A lighter break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelPause will unpause the BaseProc.&lt;br /&gt;
&lt;br /&gt;
===== Removal =====&lt;br /&gt;
After a delete request is processed, a BaseProc is transitioned to the PendingRemoval state.&lt;br /&gt;
&lt;br /&gt;
====== PendingRemoval ======&lt;br /&gt;
The BaseProc is removing itself from the application&#039;s subsystems. When the OnRemove callback succeeds the BaseProc immediately transitions to the Removal state.&lt;br /&gt;
&lt;br /&gt;
====== Removal ======&lt;br /&gt;
The BaseProc removes it&#039;s BaseProcLink meta data, invalidating all BaseProcLinks to it, calls the OnStateRemoval callback, and then immediately transitions to the Removed state.&lt;br /&gt;
&lt;br /&gt;
====== Removed ======&lt;br /&gt;
Next time there is space the BaseProc will be added to the asynchronous deletion queue and transitioned to the PendingFinalize state.&lt;br /&gt;
&lt;br /&gt;
===== Finalization =====&lt;br /&gt;
This group of states to track a BaseProc&#039;s asynchronous finalization up to it&#039;s deletion.&lt;br /&gt;
&lt;br /&gt;
====== PendingFinalization ======&lt;br /&gt;
The BaseProc will call it&#039;s PreFinalize callback, remove itself from the BaseProcMgr lists and trees, and then call it&#039;s PostFinalize callback before immediate transitioning to the Finalized state.&lt;br /&gt;
&lt;br /&gt;
====== Finalized ======&lt;br /&gt;
The BaseProc has completed finalization and will imminently be deleted, with it&#039;s memory freed back to it&#039;s parent heap.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcBinder ===&lt;br /&gt;
Allows watching for the asynchronous creation of a BaseProc. On completion a BaseProcLink to that BaseProc can be retrieved.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcLink ===&lt;br /&gt;
A &amp;quot;hyperlink&amp;quot; reference to a BaseProc. Used to retrieve scoped &amp;quot;read&amp;quot; or &amp;quot;write&amp;quot; accessors to a BaseProc. The accessors follow the C++ &amp;quot;optional&amp;quot; pattern, where retrieving one can fail to retrieve the underlying BaseProc. There are a few rules regarding when an accessor is legal to acquire. Read accessors are the least strict, and succeed as long as the BaseProc has not processed a delete request. Write accessors have 3 different rulesets for anywhere, outside the system, and a strict inside the system.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=152</id>
		<title>Bphsh</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bphsh&amp;diff=152"/>
		<updated>2026-01-13T10:50:02Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Initial page for bphsh&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bphsh is a &amp;quot;shape&amp;quot; file format. Responsible for storing the underlying physics engine&#039;s collision mesh data as well as relevant phive specific data. This page is focused on the version found in Nintendo Switch Online: Playtest Program (021), and Havok 2023.2.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
# Header&lt;br /&gt;
# Havok Tag File&lt;br /&gt;
# Material Array&lt;br /&gt;
# Unknown Array&lt;br /&gt;
&lt;br /&gt;
== Structures (phive) ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
[[Common Phive|Common phive]] header for shape. The sections consist of the Havok tagfile containing an hknpMeshShape, an array of phive materials, and a currently unknown section.&lt;br /&gt;
&lt;br /&gt;
=== Material Array ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Id. The PhiveConfig byaml stores an application&#039;s materials under MaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sub Material. The PhiveConfig byaml stores an application&#039;s sub materials under SubMaterialCollection.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|User Shape Tag Mask. Up to 64 tags can be present, each bit denotes whether a tag exists. The PhiveConfig byaml stores an application&#039;s tags under UserShapeTagCollection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
0x10 sized per structure.&lt;br /&gt;
&lt;br /&gt;
== Structures (Havok Physics) ==&lt;br /&gt;
&lt;br /&gt;
=== Common ===&lt;br /&gt;
&lt;br /&gt;
==== hkEnum&amp;lt;T,B&amp;gt;, hkFlags&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
Enum of type T, with underlying storage of type B.&lt;br /&gt;
&lt;br /&gt;
==== hkRelPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the template type T.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArrayView&amp;lt;T,B&amp;gt; ====&lt;br /&gt;
B is an integer type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|sizeof(B)&lt;br /&gt;
|B&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkRelArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkInt64&lt;br /&gt;
|m_offset; Offset relative to the base address of this object to the array of template type T.&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_size; Count of elements in the array&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|int&lt;br /&gt;
|m_capacityAndFlags; Max capacity of elements the array can store, also flags.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== hknpMeshShape ===&lt;br /&gt;
Stores a collision mesh geometry and acceleration structures.&lt;br /&gt;
&lt;br /&gt;
Note; hkBaseObject has an alignment of 8, but hknpMeshShape promotes the alignment to 0x10 due to containing an hkVector4. Unmarked space is padding.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkBaseObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|u64&lt;br /&gt;
|0x8&lt;br /&gt;
|_vft_reserve; Vtable pointer, resolved at runtime.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_sizeAndFlags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUlong&lt;br /&gt;
|m_refCount&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpShape : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpShapeType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_type; Should always be &amp;quot;MESH&amp;quot; (0x8) for an hknpMeshShape.&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|0x1&lt;br /&gt;
|hkEnum&amp;lt;hknpCollisionDispatchType::Enum, hkUint8&amp;gt; &lt;br /&gt;
|m_dispatchType&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x2&lt;br /&gt;
|hkFlags&amp;lt;hknpShape::FlagsEnum, hkUint16&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numShapeKeyBits&lt;br /&gt;
|-&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkReal&lt;br /&gt;
|m_convexRadius&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|hkUint64&lt;br /&gt;
|m_userData, this is set at runtime to a phive structure containing references to the material and unknown array.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hknpShapeProperties&lt;br /&gt;
|m_properties&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpCompositeShape : hknpShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_shapeTagCodecInfo&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShape : hknpCompositeShape&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x20&lt;br /&gt;
|hknpMeshShapeVertexConversionUtil&lt;br /&gt;
|m_vertexConversionUtil&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::ShapeTagTableEntry, int&amp;gt;&lt;br /&gt;
|m_shapeTagTable&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x18&lt;br /&gt;
|hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt;&lt;br /&gt;
|m_topLevelTree&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection, int&amp;gt;&lt;br /&gt;
|m_geometrySections; Appears to be a convex decomposition, or at least partitioning, of the mesh shape.&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpMeshShapePrimitiveMapping&amp;gt;&lt;br /&gt;
|m_primitiveMapping&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SPHERE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CAPSULE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CYLINDER&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRIANGLE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BOX&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MESH&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EXTERN_MESH&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOUND&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD_BASE&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HEIGHT_FIELD&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PARTICLE_SYSTEM&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TRANSFORMED&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MASKED_COMPOUND&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BREAKABLE_COMPOUND&lt;br /&gt;
|0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LOD&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DUMMY&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LEGACY_COMPRESSED_MESH&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_SHAPE_TYPES&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INVALID&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpCollisionDispatchType::Enum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NONE&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CONVEX&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|COMPOSITE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DISTANCE_FIELD&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_0&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_2&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_3&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_4&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_5&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_6&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_7&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NUM_TYPES&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShape::FlagsEnum ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_SHAPE&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_CONVEX_POLYTOPE_SHAPE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_COMPOSITE_SHAPE&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_HEIGHT_FIELD_SHAPE&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_SINGLE_POINT_MANIFOLD&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_INTERIOR_TRIANGLE&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SUPPORTS_COLLISIONS_WITH_INTERIOR_TRIANGLES&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USE_NORMAL_TO_FIND_SUPPORT_PLANE&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_TRIANGLE_OR_QUAD_SHAPE&lt;br /&gt;
|0x100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_QUAD_SHAPE&lt;br /&gt;
|0x200&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IS_SDF_EDGE_COLLISION_ENABLED&lt;br /&gt;
|0x400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HAS_SURFACE_VELOCITY&lt;br /&gt;
|0x800&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x2000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x4000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpShapeProperties ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hknpShapeProperties::Entry&amp;gt;&lt;br /&gt;
|Optional shape properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpShapeProperties::Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelPtr&amp;lt;hknpShapePropertyBase&amp;gt;&lt;br /&gt;
|Pointer to shape property. If present, likely a derived class such as hknpShapeConnectivityGraph, hknpRefDragProperties, hknpShapeMassProperties, hknpShapeMassPropertiesTree, hknpShapeMassConfigProperty, or hknpMaterialPalette.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== hknpShapePropertyBase ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_propertyKey; Appears to be a derived class unique identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapeVertexConversionUtil ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16; Appears to be vertex compression parameters.&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_bitScale16Inv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::ShapeTagTableEntry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_meshPrimitiveKey&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_shapeTag&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hkcdSimdTreeNamespace::hkcdSimdTree&amp;lt;hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
|m_nodes&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::hkcdSimdTree : hkcdSimdTreeNamespace::RelArrayStorage&amp;lt;hkcdSimdTreeNamespace::Node&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_firstFreeIndex&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|bool&lt;br /&gt;
|m_isCompact&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|hkVector4&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hkcdSimdTreeNamespace::Node : hkcdFourAabb&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x10&lt;br /&gt;
|hkUint32[4]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint8[4]&lt;br /&gt;
|m_filterMasks&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x1&lt;br /&gt;
|hkFlags&amp;lt;hkcdSimdTreeNamespace::Node::FlagsEnum, unsigned char&amp;gt;&lt;br /&gt;
|m_flags&lt;br /&gt;
|-&lt;br /&gt;
|0x75&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_maxDepth&lt;br /&gt;
|-&lt;br /&gt;
|0x76&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_splittingAxisCache&lt;br /&gt;
|-&lt;br /&gt;
|0x77&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_numAddRemoveOperationsSinceLastRebalance&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_parent&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_numLeaves&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hkcdSimdTreeNamespace::Node::FlagsEnum =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_LEAF&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NODE_IS_FREE&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_NODES_ARE_REBALANCED&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_REINSERT_PASS_DID_NOP&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|INCREMENTAL_OPTIMIZER_LEAVES_ARE_REBALANCED&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_0&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_1&lt;br /&gt;
|0x40&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|USER_FLAG_2&lt;br /&gt;
|0x80&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShape::GeometrySection ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpAabb8TreeNode, int&amp;gt;&lt;br /&gt;
|m_sectionBvh&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hknpMeshShape::GeometrySection::Primitive, int&amp;gt;&lt;br /&gt;
|m_primitives&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_vertexBuffer&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|hkRelArrayView&amp;lt;hkUint8, int&amp;gt;&lt;br /&gt;
|m_interiorPrimitiveBitField&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc&lt;br /&gt;
|hkUint32[3]&lt;br /&gt;
|m_sectionOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0xc&lt;br /&gt;
|hkFloat3&lt;br /&gt;
|m_bitScale8Inv&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x6&lt;br /&gt;
|hkInt16[3]&lt;br /&gt;
|m_bitOffset&lt;br /&gt;
|-&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpAabb8TreeNode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lx&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hx&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_ly&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hy&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_lz&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_hz&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpAabb8TreeNode : hknpTransposedFourAabbs8&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x3&lt;br /&gt;
|hkUint8[3]&lt;br /&gt;
|m_data&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Primitive =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_aId&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_bId&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_cId&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|hkUint8&lt;br /&gt;
|m_dId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== hknpMeshShape::GeometrySection::Vertex16_3 =====&lt;br /&gt;
While m_vertexBuffer is untyped in later versions, in previous version it assumed this vertex format struct, which still appears to be the case (u8 mainly forces the m_vertexBuffer.m_size to be in bytes)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_x&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_y&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|hkUint16&lt;br /&gt;
|m_z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== hknpMeshShapePrimitiveMapping ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+hknpMeshShapePrimitiveMapping : hkReferencedObject&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;hkUint32&amp;gt;&lt;br /&gt;
|m_sectionStart&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|hkRelArray&amp;lt;unsigned int&amp;gt;&lt;br /&gt;
|m_bitString&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_bitsPerEntry&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|hkUint32&lt;br /&gt;
|m_triangleIndexBitMask&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=151</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=151"/>
		<updated>2026-01-08T03:39:09Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Multi-Input corrections.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format implementing behavior trees for game-specific code. At time of writing it has only appeared in titles on the ModuleSystem game engine. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom,&#039;&#039; &#039;&#039;Super Mario Bros. Wonder, Mario vs Donkey Kong,&#039;&#039; and the original October 2024 version of &#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039; (v0x407). ModuleSystem provides 3 built-in file categories that appear in their own dedicated folders in a title&#039;s romfs, being &amp;quot;AI&amp;quot; for actor behavior, &amp;quot;Logic&amp;quot; for actor ai group behavior, and &amp;quot;Sequence&amp;quot; for scene behavior, individual games are free to create their own file categories.&lt;br /&gt;
&lt;br /&gt;
=== Version Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Version&lt;br /&gt;
!Applications&lt;br /&gt;
!Differences From Previous&lt;br /&gt;
|-&lt;br /&gt;
|0x404&lt;br /&gt;
|&#039;&#039;Nintendo Switch Sports, Splatoon 3&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x407&lt;br /&gt;
|&#039;&#039;The Legend of Zelda: Tears of the Kingdom, Super Mario Bros. Wonder, Mario Vs Donkey Kong, Nintendo Switch Online: Playtest Program (010)&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x408&lt;br /&gt;
|&#039;&#039;Nintendo Switch Online: Playtest Program (021)&#039;&#039;&lt;br /&gt;
|&amp;gt;Now uses exb version 3 (u32 support)&lt;br /&gt;
&amp;gt;Added u32 type to blackboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
AINB assumes little endian. Hashes can be assumed to be 32-bit Murmur3 unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
An AINB file defines a set of commands to evaluate a tree of built-in or game-specific node classes. The built-in &amp;quot;Element_ModuleCaller&amp;quot; node and supporting structures allow a &amp;quot;root&amp;quot; AINB file to call out to an external &amp;quot;module&amp;quot; AINB file, module&#039;s can call further modules, allowing AINB files to form a tree of tree&#039;s. An AINB&#039;s file extension typically designates whether it is a root &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; or module &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to query nodes will use their query node index which is local to the amount of query nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible data types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x407 ====&lt;br /&gt;
# File Header (0x74)&lt;br /&gt;
# Command Array&lt;br /&gt;
# Element Array&lt;br /&gt;
# Blackboard&lt;br /&gt;
# Element Param Region&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Property Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Inputs&lt;br /&gt;
# Jump Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Query Id Array&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AinbString ====&lt;br /&gt;
Represents a u32 offset relative to a null-terminated string from the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AinbPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AinbArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Filename&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Enum Relocation&amp;gt;&amp;gt;&lt;br /&gt;
|Enum Relocation Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Property Table&amp;gt;&lt;br /&gt;
|Property Table &lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Jump[]&amp;gt;&lt;br /&gt;
|Jump Table&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Input Output Table&amp;gt;&lt;br /&gt;
|Input/Output Table&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Multi Input[]&amp;gt;&lt;br /&gt;
|Multi-Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment[Attachment Count]&amp;gt;&lt;br /&gt;
|Attachment Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Attachment Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Expression Binary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Query Element Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Active Node Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Module Caller&amp;gt;&amp;gt;&lt;br /&gt;
|Module Caller Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|File Category Name&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category? (0 = AI, 1 = Logic, 2 = Sequence) (&#039;&#039;Splatoon 3&#039;&#039; game specific, 3 = UniqueSequenceSPL)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Module Caller Link&amp;gt;&lt;br /&gt;
|Module Caller Link&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Command Array ===&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Main Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Secondary Element Id (value offset by 1, 0 is reserved for invalid)&lt;br /&gt;
|}&lt;br /&gt;
Unlike asb, command GUIDs only appear to be used for debug messages. Secondary Element Id will be -1 if the command only has one child element.&lt;br /&gt;
&lt;br /&gt;
=== Property Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;PropertyPointer[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Flags =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 : 16&lt;br /&gt;
|Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PropertyPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base Index - base index into the Property Table&#039;s Property Array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Input Output Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;bool[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;InputPointer[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;OutputPointer[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
If the input element id is between -32768 and -100, then the input uses a multi-input. The multi-input id can be calculated as follows: &amp;lt;code&amp;gt;BaseMultiInputIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== InputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Output&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== OutputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input Output Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Input Output Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Base Index - base index into the Input Output Table&#039;s Input&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Base Index  - base index into the Input Output Table&#039;s Output&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element Array ===&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id - Index of this element within the element array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Element Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Element Type Name (for ApplicationDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Query Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Application Defined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Element type names are official (outside ApplicationDefined). For ApplicationDefined elements, definitions can be found in a node definition file for the respective file category. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Flags ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Element&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module Caller&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Initialized&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Multi-Input&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;T&amp;gt; ====&lt;br /&gt;
Each element contains a table into the 4 parameter types, properties, inputs, outputs, and plugs. The child plugs inform the structure of the element tree.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Entries into the Property Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x60&lt;br /&gt;
|Input Output Entries&lt;br /&gt;
|Entries into the Input Output Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x14&lt;br /&gt;
|Plug Entries&lt;br /&gt;
|Entries into the following plug pointer array.&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|AsbPtr&amp;lt;&amp;gt;[Total Plug Count]&lt;br /&gt;
|Plug Data&lt;br /&gt;
|Plug Data Pointer Array.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Plug Entries =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Bool/float Input Source/Output Source&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Child Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Jump Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|String Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Int Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plug Type Entry ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Base Index - base index into Plug Pointer Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plugs ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
Typical Plug Data&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string of the parameter name. For standard connections, the value is a string of the connection name. For jump connections, the value is an id into the Jump Table. Elements are free to extend the plug data with their own element specific values. For built-in element selector-types, excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt;, an extra four bytes stores data used to select the child plug. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a string. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child element entry for Selector-type nodes is the default case. The condition for this case is either the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input elements that are Selector-type elements also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; has an additional eight bytes per input element (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attachments ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment Param&amp;gt;&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Attachment Param ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Property Entries&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Multi-Input ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Input Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Element Output Plug Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Jump ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Calc&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). Otherwise, the entry is considered valid if the first byte equals 1. When evaluating the behavior trees, the game maintains an array of each root element. When a command is set, the root element of the command is set to this context. A jump will change that root element to the element specified by the jump plug&#039;s element id. This usually happens right before the next command&#039;s calculation occurs, but if the top bit is set, then it will occur immediately after the current command&#039;s calculation finishes (if the source element is an Element_Join, it will always update the root elements post current command calculation). This is primarily used for &amp;quot;subroutines&amp;quot; that run a single time then return to the main execution routine. Element_Fork and Element_Join are the main mechanism to manage multiple root elements. An Element_Fork will replace the current root elements with the element id&#039;s of it&#039;s jump plugs, possibly &amp;quot;forking&amp;quot; execution into multiple roots. The element at the end of a root element specified by an Element_Fork will optionally have a jump plug referencing a specific Element_Join. Each of these elements will push the Element_Join into the root element array. However, Element_Join has a property parameter called InFlowNum, and until that element has been pushed onto the root element array that many times in a single calculation, it will not activate and remain dormant. However, once this threshold is reached, it will begin execution (with a guard to make sure only one of the instances added to the array will execute).&lt;br /&gt;
&lt;br /&gt;
=== 0x50 Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Query Element Id Array ===&lt;br /&gt;
This section is an array of entries of query element ids present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Query Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Id (local to number of query nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expression Binary ===&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
=== Module Caller ===&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External Action Array ===&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Module Caller Link ===&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. These are used by Element_ModuleCaller.&lt;br /&gt;
&lt;br /&gt;
=== Child Replacement Table ===&lt;br /&gt;
This section is used to remove or replace specific elements or attachments at runtime. This is used to toggle off debug elements/attachments in release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child element, 1 = replace child element, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Element Id/Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Element Id (for child element replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0x6C Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Enum Relocation ===&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== String Pool ===&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=150</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=150"/>
		<updated>2026-01-08T03:38:15Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Minor corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format implementing behavior trees for game-specific code. At time of writing it has only appeared in titles on the ModuleSystem game engine. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom,&#039;&#039; &#039;&#039;Super Mario Bros. Wonder, Mario vs Donkey Kong,&#039;&#039; and the original October 2024 version of &#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039; (v0x407). ModuleSystem provides 3 built-in file categories that appear in their own dedicated folders in a title&#039;s romfs, being &amp;quot;AI&amp;quot; for actor behavior, &amp;quot;Logic&amp;quot; for actor ai group behavior, and &amp;quot;Sequence&amp;quot; for scene behavior, individual games are free to create their own file categories.&lt;br /&gt;
&lt;br /&gt;
=== Version Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Version&lt;br /&gt;
!Applications&lt;br /&gt;
!Differences From Previous&lt;br /&gt;
|-&lt;br /&gt;
|0x404&lt;br /&gt;
|&#039;&#039;Nintendo Switch Sports, Splatoon 3&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x407&lt;br /&gt;
|&#039;&#039;The Legend of Zelda: Tears of the Kingdom, Super Mario Bros. Wonder, Mario Vs Donkey Kong, Nintendo Switch Online: Playtest Program (010)&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x408&lt;br /&gt;
|&#039;&#039;Nintendo Switch Online: Playtest Program (021)&#039;&#039;&lt;br /&gt;
|&amp;gt;Now uses exb version 3 (u32 support)&lt;br /&gt;
&amp;gt;Added u32 type to blackboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
AINB assumes little endian. Hashes can be assumed to be 32-bit Murmur3 unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
An AINB file defines a set of commands to evaluate a tree of built-in or game-specific node classes. The built-in &amp;quot;Element_ModuleCaller&amp;quot; node and supporting structures allow a &amp;quot;root&amp;quot; AINB file to call out to an external &amp;quot;module&amp;quot; AINB file, module&#039;s can call further modules, allowing AINB files to form a tree of tree&#039;s. An AINB&#039;s file extension typically designates whether it is a root &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; or module &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to query nodes will use their query node index which is local to the amount of query nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible data types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x407 ====&lt;br /&gt;
# File Header (0x74)&lt;br /&gt;
# Command Array&lt;br /&gt;
# Element Array&lt;br /&gt;
# Blackboard&lt;br /&gt;
# Element Param Region&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Property Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Inputs&lt;br /&gt;
# Jump Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Query Id Array&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AinbString ====&lt;br /&gt;
Represents a u32 offset relative to a null-terminated string from the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AinbPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AinbArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Filename&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Enum Relocation&amp;gt;&amp;gt;&lt;br /&gt;
|Enum Relocation Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Property Table&amp;gt;&lt;br /&gt;
|Property Table &lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Jump[]&amp;gt;&lt;br /&gt;
|Jump Table&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Input Output Table&amp;gt;&lt;br /&gt;
|Input/Output Table&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Multi Input[]&amp;gt;&lt;br /&gt;
|Multi-Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment[Attachment Count]&amp;gt;&lt;br /&gt;
|Attachment Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Attachment Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Expression Binary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Query Element Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Active Node Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Module Caller&amp;gt;&amp;gt;&lt;br /&gt;
|Module Caller Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|File Category Name&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category? (0 = AI, 1 = Logic, 2 = Sequence) (&#039;&#039;Splatoon 3&#039;&#039; game specific, 3 = UniqueSequenceSPL)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Module Caller Link&amp;gt;&lt;br /&gt;
|Module Caller Link&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Command Array ===&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Main Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Secondary Element Id (value offset by 1, 0 is reserved for invalid)&lt;br /&gt;
|}&lt;br /&gt;
Unlike asb, command GUIDs only appear to be used for debug messages. Secondary Element Id will be -1 if the command only has one child element.&lt;br /&gt;
&lt;br /&gt;
=== Property Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;PropertyPointer[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Flags =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 : 16&lt;br /&gt;
|Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PropertyPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base Index - base index into the Property Table&#039;s Property Array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Input Output Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;bool[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;InputPointer[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;OutputPointer[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
If the input element id is between -32768 and -100, then the input uses a multi-input. The multi-input id can be calculated as follows: &amp;lt;code&amp;gt;BaseMultiInputIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== InputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Output&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== OutputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input Output Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Input Output Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Base Index - base index into the Input Output Table&#039;s Input&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Base Index  - base index into the Input Output Table&#039;s Output&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element Array ===&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id - Index of this element within the element array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Element Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Element Type Name (for ApplicationDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Query Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Application Defined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Element type names are official (outside ApplicationDefined). For ApplicationDefined elements, definitions can be found in a node definition file for the respective file category. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Flags ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Element&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module Caller&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Initialized&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Multi-Input&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;T&amp;gt; ====&lt;br /&gt;
Each element contains a table into the 4 parameter types, properties, inputs, outputs, and plugs. The child plugs inform the structure of the element tree.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Entries into the Property Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x60&lt;br /&gt;
|Input Output Entries&lt;br /&gt;
|Entries into the Input Output Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x14&lt;br /&gt;
|Plug Entries&lt;br /&gt;
|Entries into the following plug pointer array.&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|AsbPtr&amp;lt;&amp;gt;[Total Plug Count]&lt;br /&gt;
|Plug Data&lt;br /&gt;
|Plug Data Pointer Array.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Plug Entries =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Bool/float Input Source/Output Source&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Child Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Jump Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|String Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Int Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plug Type Entry ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Base Index - base index into Plug Pointer Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plugs ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
Typical Plug Data&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string of the parameter name. For standard connections, the value is a string of the connection name. For jump connections, the value is an id into the Jump Table. Elements are free to extend the plug data with their own element specific values. For built-in element selector-types, excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt;, an extra four bytes stores data used to select the child plug. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a string. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child element entry for Selector-type nodes is the default case. The condition for this case is either the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input elements that are Selector-type elements also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; has an additional eight bytes per input element (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attachments ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment Param&amp;gt;&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Attachment Param ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Property Entries&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Multi-Input ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Input Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input/Output Source Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Jump ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Calc&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). Otherwise, the entry is considered valid if the first byte equals 1. When evaluating the behavior trees, the game maintains an array of each root element. When a command is set, the root element of the command is set to this context. A jump will change that root element to the element specified by the jump plug&#039;s element id. This usually happens right before the next command&#039;s calculation occurs, but if the top bit is set, then it will occur immediately after the current command&#039;s calculation finishes (if the source element is an Element_Join, it will always update the root elements post current command calculation). This is primarily used for &amp;quot;subroutines&amp;quot; that run a single time then return to the main execution routine. Element_Fork and Element_Join are the main mechanism to manage multiple root elements. An Element_Fork will replace the current root elements with the element id&#039;s of it&#039;s jump plugs, possibly &amp;quot;forking&amp;quot; execution into multiple roots. The element at the end of a root element specified by an Element_Fork will optionally have a jump plug referencing a specific Element_Join. Each of these elements will push the Element_Join into the root element array. However, Element_Join has a property parameter called InFlowNum, and until that element has been pushed onto the root element array that many times in a single calculation, it will not activate and remain dormant. However, once this threshold is reached, it will begin execution (with a guard to make sure only one of the instances added to the array will execute).&lt;br /&gt;
&lt;br /&gt;
=== 0x50 Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Query Element Id Array ===&lt;br /&gt;
This section is an array of entries of query element ids present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Query Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Id (local to number of query nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expression Binary ===&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
=== Module Caller ===&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External Action Array ===&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Module Caller Link ===&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. These are used by Element_ModuleCaller.&lt;br /&gt;
&lt;br /&gt;
=== Child Replacement Table ===&lt;br /&gt;
This section is used to remove or replace specific elements or attachments at runtime. This is used to toggle off debug elements/attachments in release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child element, 1 = replace child element, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Element Id/Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Element Id (for child element replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0x6C Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Enum Relocation ===&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== String Pool ===&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=149</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=149"/>
		<updated>2026-01-08T03:32:40Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Renaming pass, rewrite parameter tables.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format implementing behavior trees for game-specific code. At time of writing it has only appeared in titles on the ModuleSystem game engine. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom,&#039;&#039; &#039;&#039;Super Mario Bros. Wonder, Mario vs Donkey Kong,&#039;&#039; and the original October 2024 version of &#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039; (v0x407). ModuleSystem provides 3 built-in file categories that appear in their own dedicated folders in a title&#039;s romfs, being &amp;quot;AI&amp;quot; for actor behavior, &amp;quot;Logic&amp;quot; for actor ai group behavior, and &amp;quot;Sequence&amp;quot; for scene behavior, individual games are free to create their own file categories.&lt;br /&gt;
&lt;br /&gt;
=== Version Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Version&lt;br /&gt;
!Applications&lt;br /&gt;
!Differences From Previous&lt;br /&gt;
|-&lt;br /&gt;
|0x404&lt;br /&gt;
|&#039;&#039;Nintendo Switch Sports, Splatoon 3&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x407&lt;br /&gt;
|&#039;&#039;The Legend of Zelda: Tears of the Kingdom, Super Mario Bros. Wonder, Mario Vs Donkey Kong, Nintendo Switch Online: Playtest Program (010)&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x408&lt;br /&gt;
|&#039;&#039;Nintendo Switch Online: Playtest Program (021)&#039;&#039;&lt;br /&gt;
|&amp;gt;Now uses exb version 3 (u32 support)&lt;br /&gt;
&amp;gt;Added u32 type to blackboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
AINB assumes little endian. Hashes can be assumed to be 32-bit Murmur3 unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
An AINB file defines a set of commands to evaluate a tree of built-in or game-specific node classes. The built-in &amp;quot;Element_ModuleCaller&amp;quot; node and supporting structures allow a &amp;quot;root&amp;quot; AINB file to call out to an external &amp;quot;module&amp;quot; AINB file, module&#039;s can call further modules, allowing AINB files to form a tree of tree&#039;s. An AINB&#039;s file extension typically designates whether it is a root &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; or module &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to query nodes will use their query node index which is local to the amount of query nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible data types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x407 ====&lt;br /&gt;
# File Header (0x74)&lt;br /&gt;
# Command Array&lt;br /&gt;
# Element Array&lt;br /&gt;
# Blackboard&lt;br /&gt;
# Element Param Region&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Property Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Parameters&lt;br /&gt;
# Jump Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Query Id Array&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AinbString ====&lt;br /&gt;
Represents a u32 offset relative to a null-terminated string from the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AinbPtr&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AinbArray&amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Enum Relocation&amp;gt;&amp;gt;&lt;br /&gt;
|Enum Relocation Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Property Table&amp;gt;&lt;br /&gt;
|Property Table &lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Jump[]&amp;gt;&lt;br /&gt;
|Jump Table&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Input Output Table&amp;gt;&lt;br /&gt;
|Input/Output Table&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Multi Input[]&amp;gt;&lt;br /&gt;
|Multi-Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment[Attachment Count]&amp;gt;&lt;br /&gt;
|Attachment Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Attachment Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Expression Binary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;u32[]&amp;gt;&lt;br /&gt;
|Query Element Id Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Active Node Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;Module Caller&amp;gt;&amp;gt;&lt;br /&gt;
|Module Caller Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|File Category Name&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category? (0 = AI, 1 = Logic, 2 = Sequence) (&#039;&#039;Splatoon 3&#039;&#039; game specific, 3 = UniqueSequenceSPL)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;AinbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Module Caller Link&amp;gt;&lt;br /&gt;
|Module Caller Link&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Command Array ===&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Main Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Secondary Element Id (value offset by 1, 0 is reserved for invalid)&lt;br /&gt;
|}&lt;br /&gt;
Unlike asb, command GUIDs only appear to be used for debug messages. Secondary Element Id will be -1 if the command only has one child element.&lt;br /&gt;
&lt;br /&gt;
=== Property Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Property&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;PropertyPointer[]&amp;gt;&lt;br /&gt;
|Property Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Flags =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 : 16&lt;br /&gt;
|Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PropertyPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|Property Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Property Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base Index - base index into the Property Table&#039;s Property Array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Input Output Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;s32&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;bool&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;bool[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;float&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;AinbString&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Input&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;Output&amp;lt;Vector3f&amp;gt;[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;InputPointer[]&amp;gt;&lt;br /&gt;
|Input Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x04&lt;br /&gt;
|AsbPtr&amp;lt;OutputPointer[]&amp;gt;&lt;br /&gt;
|Output Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4, or 0xc&lt;br /&gt;
|T&lt;br /&gt;
|Immediate Value&lt;br /&gt;
|}&lt;br /&gt;
If the input element id is between -32768 and -100, then the input uses a multi-input. The multi-input id can be calculated as follows: &amp;lt;code&amp;gt;BaseMultiInputIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== InputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Id or Base Multi-Input Id&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Input Element Output Plug Id or Multi-Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Property Flags&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Output&amp;lt;T&amp;gt; ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== OutputPointer ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString : 31&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AinbString&lt;br /&gt;
|Class Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input Output Entries ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|S32 Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Bool Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Float Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|String Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Vector3f Entries&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x10&lt;br /&gt;
|Input Output Type Entry&lt;br /&gt;
|Pointer Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Input Output Type Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Base Index - base index into the Input Output Table&#039;s Input&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Input Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Base Index  - base index into the Input Output Table&#039;s Output&amp;lt;T&amp;gt; array for the specified type&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Output Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element Array ===&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id - Index of this element within the element array&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Element Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Element Type Name (for ApplicationDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Param Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Query Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Application Defined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Element type names are official (outside ApplicationDefined). For ApplicationDefined elements, definitions can be found in a node definition file for the respective file category. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Flags ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Element&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module Caller&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Initialized&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Multi-Param&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;T&amp;gt; ====&lt;br /&gt;
Each element contains a table into the 4 parameter types, properties, inputs, outputs, and plugs. The child plugs inform the structure of the element tree.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Entries into the Property Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x60&lt;br /&gt;
|Input Output Entries&lt;br /&gt;
|Entries into the Input Output Table.&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x14&lt;br /&gt;
|Plug Entries&lt;br /&gt;
|Entries into the following plug pointer array.&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|AsbPtr&amp;lt;&amp;gt;[Total Plug Count]&lt;br /&gt;
|Plug Data&lt;br /&gt;
|Plug Data Pointer Array.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Plug Entries =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Bool/float Input Source/Output Source&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Child Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Jump Plugs&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|String Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|Int Input Source&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|Plug Type Entry&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plug Type Entry ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Base Index - base index into Plug Pointer Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Plugs ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
Typical Plug Data&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string of the parameter name. For standard connections, the value is a string of the connection name. For jump connections, the value is an id into the Jump Table. Elements are free to extend the plug data with their own element specific values. For built-in element selector-types, excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt;, an extra four bytes stores data used to select the child plug. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a string. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child element entry for Selector-type nodes is the default case. The condition for this case is either the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input elements that are Selector-type elements also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; has an additional eight bytes per input element (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attachments ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|AinbPtr&amp;lt;Attachment Param&amp;gt;&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407+)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Attachment Param ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x30&lt;br /&gt;
|Property Entries&lt;br /&gt;
|Property Entries&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Input Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input/Output Source Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Jump ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Calc&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). Otherwise, the entry is considered valid if the first byte equals 1. When evaluating the behavior trees, the game maintains an array of each root element. When a command is set, the root element of the command is set to this context. A jump will change that root element to the element specified by the jump plug&#039;s element id. This usually happens right before the next command&#039;s calculation occurs, but if the top bit is set, then it will occur immediately after the current command&#039;s calculation finishes (if the source element is an Element_Join, it will always update the root elements post current command calculation). This is primarily used for &amp;quot;subroutines&amp;quot; that run a single time then return to the main execution routine. Element_Fork and Element_Join are the main mechanism to manage multiple root elements. An Element_Fork will replace the current root elements with the element id&#039;s of it&#039;s jump plugs, possibly &amp;quot;forking&amp;quot; execution into multiple roots. The element at the end of a root element specified by an Element_Fork will optionally have a jump plug referencing a specific Element_Join. Each of these elements will push the Element_Join into the root element array. However, Element_Join has a property parameter called InFlowNum, and until that element has been pushed onto the root element array that many times in a single calculation, it will not activate and remain dormant. However, once this threshold is reached, it will begin execution (with a guard to make sure only one of the instances added to the array will execute).&lt;br /&gt;
&lt;br /&gt;
=== 0x50 Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Query Element Id Array ===&lt;br /&gt;
This section is an array of entries of query element ids present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Query Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Element Id (local to number of query nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expression Binary ===&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
=== Module Caller ===&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== External Action Array ===&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Module Caller Link ===&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. These are used by Element_ModuleCaller.&lt;br /&gt;
&lt;br /&gt;
=== Child Replacement Table ===&lt;br /&gt;
This section is used to remove or replace specific elements or attachments at runtime. This is used to toggle off debug elements/attachments in release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child element, 1 = replace child element, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Element Id/Attachment Id&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Element Id (for child element replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0x6C Section ===&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Enum Relocation ===&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== String Pool ===&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=148</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=148"/>
		<updated>2026-01-07T23:28:50Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add rest of what I got for now. Rename &amp;quot;parts&amp;quot; to &amp;quot;attachments&amp;quot;. Correct header again.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store &amp;quot;animation sequences&amp;quot; for populating &amp;quot;animation slots&amp;quot; of a model. This article is primarily aimed at version 0x41b. In ModuleSystem titles ASB files are typically found in under the &amp;quot;AS&amp;quot; folder, which can appear in the root of a title&#039;s romfs or the root of an archive file.&lt;br /&gt;
&lt;br /&gt;
=== Version Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Version&lt;br /&gt;
!Applications&lt;br /&gt;
!Differences From Previous&lt;br /&gt;
|-&lt;br /&gt;
|0x304 &lt;br /&gt;
|&#039;&#039;Ring Fit Adventure&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x3fb&lt;br /&gt;
|&#039;&#039;Labo Toy-Con 04, Game Builder Garage&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x407 &lt;br /&gt;
|&#039;&#039;Animal Crossing: New Horizons&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x40f&lt;br /&gt;
|&#039;&#039;Nintendo Switch Sports&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x410&lt;br /&gt;
|&#039;&#039;Splatoon 3&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x417&lt;br /&gt;
|&#039;&#039;The Legend of Zelda: Tears of the Kingdom, Mario Vs Donkey Kong&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x418&lt;br /&gt;
|&#039;&#039;Super Mario Bros. Wonder&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x41A&lt;br /&gt;
|&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x41B&lt;br /&gt;
|&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;&lt;br /&gt;
|&amp;gt;Now uses exb version 3 (u32 support)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;Added u32 type to blackboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
ASB assumes little endian. Hashes can be assumed to be 32-bit Murmur3 unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x417 ====&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
==== Version 0x41b ====&lt;br /&gt;
&lt;br /&gt;
# File Header (0x80)&lt;br /&gt;
# Command Array&lt;br /&gt;
# Element Array&lt;br /&gt;
# Element Param Region&lt;br /&gt;
# Attachment Index Array&lt;br /&gt;
# Attachment Array&lt;br /&gt;
# State Array&lt;br /&gt;
# Transition Array&lt;br /&gt;
# Transition Data Region&lt;br /&gt;
# Blackboard&lt;br /&gt;
# Partial Skeleton Array&lt;br /&gt;
# Partial&lt;br /&gt;
# Bone Blend Array&lt;br /&gt;
# Transition Partial Skeleton Id Array&lt;br /&gt;
# Float Property Ex Array&lt;br /&gt;
# Tag Array&lt;br /&gt;
# Exb&lt;br /&gt;
# External Action Array&lt;br /&gt;
# Material Blend Array&lt;br /&gt;
# Enum Relocation Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AsbString ====&lt;br /&gt;
Represents a u32 offset relative to the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AsbPtr &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AsbArray &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version - (0x41b in Nintendo Switch Online: Playtest version 021)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Command[Command Count]&amp;gt;&lt;br /&gt;
|Command Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Element[Element Count]&amp;gt;&lt;br /&gt;
|Element Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count - The pointer and count are erroneously present, but the section is not actually written in applications that support the baev file format.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Event[Event Count]&amp;gt;&lt;br /&gt;
|Event Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial[ParitalCount]&amp;gt;&lt;br /&gt;
|Partial Array&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Attachment&amp;gt;&lt;br /&gt;
|Attachment Array&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;u32[Attachment Count]&amp;gt;&lt;br /&gt;
|Attachment Index Array - Array of indices to parts&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Enum Relocation&amp;gt;&amp;gt;&lt;br /&gt;
|Enum Relocation Array&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;State&amp;gt;&amp;gt;&lt;br /&gt;
|State Array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Float Property Ex[Float Property Ex Count]&amp;gt;&lt;br /&gt;
|Float Property Ex Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Count&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Bone Blend[Bone Blend Count]&amp;gt;&lt;br /&gt;
|Bone Blend Array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Skeleton[Partial Skeleton Count]&amp;gt;&lt;br /&gt;
|Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Transition Array&amp;gt;&lt;br /&gt;
|Transition Array&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;u32&amp;gt;&amp;gt;&lt;br /&gt;
|Transition Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Exb&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Transition Group Array&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Material Blend&amp;gt;&amp;gt;&lt;br /&gt;
|Material Blend Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Property&amp;lt;T&amp;gt; ===&lt;br /&gt;
Property types include s32 (can be an enum), bool(32-bit), float, AsbString, and Vector3f.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Property&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
=== Command ===&lt;br /&gt;
Defines a command that can be evaluated by an as::Controller to set and play model animations. A command references the start of a behavior tree of elements to be evaluated at runtime. A simple update mode exists to continue playback of animation without always evaluating the command. A bypass mode also exists to play model animations directly from an as::Controller without a defined command.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Debug flag for host io?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;InterpolationType&amp;gt;&lt;br /&gt;
|Default Interpolation Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Interpolation Type ====&lt;br /&gt;
Enum for (known) interpolation types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Interpolation Type&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Default&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cross Fade&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Local Bone&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inertia Local Bone&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Parts&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Attachment Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is No State End&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Attachment Index Id&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|External Action Id&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
Enum of element types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Type&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|26&lt;br /&gt;
|TwoDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementPlugs ====&lt;br /&gt;
The plug struct provides relative offsets to &amp;quot;plug&amp;quot; data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ElementPlugs (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Base Index &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4 * Frame Controller Base Index + Frame Controller Count &lt;br /&gt;
|u32[]&lt;br /&gt;
|Plug Data Offset Array - Offsets relative to start of plug table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Child Plug =====&lt;br /&gt;
Only known are listed.&lt;br /&gt;
&lt;br /&gt;
====== Default ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== FloatSelector, OneDimensionalBlender, BonePositionSelector Elements ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== StringSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IntSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== RandomSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== PreviousTagSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Frame Controller Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Frame Controller Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;Element Type&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== FloatSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== StringSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SkeletalAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== State Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== OneDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector weight&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Easing Type (1 = ease)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Sequential Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IntSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Simultaneous Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Type (0 = no children, 1 = first child state end)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MaterialAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Id&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== FrameController Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop Start&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop End&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Kill Loop&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Random Range&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Local Random&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Current Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Retarget Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DummyAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Looping&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== RandomSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;&amp;gt;&lt;br /&gt;
|Unknown&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PreviousTagSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BonePositionSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id - (0 = X, 1 = Y, 2 = Z) component to generate bone position difference from&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneVisibilityAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InitialFrame Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Initial Frame Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Share By Same Anim key&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Random&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Fixed Random&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Initial Frame Type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|-&lt;br /&gt;
|FrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|InvFrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|Random&lt;br /&gt;
|-&lt;br /&gt;
|BonePosition&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|-&lt;br /&gt;
|Frame&lt;br /&gt;
|-&lt;br /&gt;
|InvFrame&lt;br /&gt;
|-&lt;br /&gt;
|SlotSync&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Bone Blend Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Child Id&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Bone Blend Mode Value&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Mode (0 = all, 1 = child 0, 2 = child 1)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoolSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alert =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SubtractAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ShapeAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TwoDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector Weight 0&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector Weight 1&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key frame array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key data array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Partial ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Id&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Attachment ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;&amp;gt;&lt;br /&gt;
|Type specific data&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|String&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|Int&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|UInt&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|Float&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|Vector3f&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|Blackboard Type Offset&lt;br /&gt;
|Pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4 * N&lt;br /&gt;
|Blackboard Entry&lt;br /&gt;
|Entry Array&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Default Value Region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Blackboard Type Offset ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Entry Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Default Value Base Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Blackboard Entry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString : 24&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 7&lt;br /&gt;
|Extra Info Index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|u32 : 1&lt;br /&gt;
|Is Extra Info&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enum Relocation ===&lt;br /&gt;
This feature appears to be for applications that want to be able to change enum class definitions without updating all the relevant asb files. Applications can choose to bake the enum values, in which this section is omitted, but the class name and enum value name will still be emitted to the string pool, unreferenced.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value to replace&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Enum Class Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Enum Value Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
&lt;br /&gt;
=== Float Property Ex ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Curve Type&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc&lt;br /&gt;
|float[3]&lt;br /&gt;
|Curve Data&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Max&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bone Blend ===&lt;br /&gt;
&lt;br /&gt;
=== Partial Skeleton ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Bone[Partial Bone Count]&amp;gt;&lt;br /&gt;
|Partial Bone Array&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Partial Skeleton Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Bone Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Partial Bone ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|s16&lt;br /&gt;
|Bind Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Recursive (recursively adds all child bones)&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transition ===&lt;br /&gt;
&lt;br /&gt;
=== External Action ===&lt;br /&gt;
Used to call &amp;quot;external actions&amp;quot;. In ModuleSystem titles this appears to typically correspond to an xlink command.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Type?&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Slot?&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Action&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material Blend ===&lt;br /&gt;
Blend weight for material animations.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Weight&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=147</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=147"/>
		<updated>2026-01-07T12:51:07Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Correct file header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as &#039;&#039;The Legend of Zelda: Tears of the Kingdom&#039;&#039; and &#039;&#039;Nintendo Switch Sports&#039;&#039;. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs Donkey Kong&#039;&#039; (v0x0417). Other ASB versions include 0x304 (&#039;&#039;Ring Fit Adventure&#039;&#039;), 0x3FB (&#039;&#039;Labo Toy-Con 04&#039;&#039; and &#039;&#039;Game Builder Garage&#039;&#039;), 0x407 (&#039;&#039;Animal Crossing: New Horizons&#039;&#039;), 0x40F (&#039;&#039;Nintendo Switch Sports&#039;&#039;), 0x410 (&#039;&#039;Splatoon 3&#039;&#039;), 0x418 (&#039;&#039;Super Mario Bros. Wonder&#039;&#039;), and 0x41A/0x41B (&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
ASB is a little endian format which consists of node pathways triggered by AS commands. When an AS command is called, it runs the sequence of nodes connected to it which trigger and control animations and animation logic. Nodes are arranged in an array and referenced and accessed by their array index. Despite the presence of animation events in ASB files, these events do not appear to be used by the game.&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the start of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible parameter types: string, int (32-bit signed integer), float (32-bit floating point number), bool, vector3f, and pointer (object pointer, this is not actually possible in ASB, only usable in AINB).&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x417 ====&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AsbString ====&lt;br /&gt;
Represents a u32 offset relative to the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AsbPtr &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AsbArray &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version - (0x41b in Nintendo Switch Online: Playtest version 021)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Command[Command Count]&amp;gt;&lt;br /&gt;
|Command Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Element[Element Count]&amp;gt;&lt;br /&gt;
|Element Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count - The pointer and count are erroneously present, but the section is not actually written in applications that support the baev file format.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Event[Event Count]&amp;gt;&lt;br /&gt;
|Event Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Parts&amp;gt;&lt;br /&gt;
|Parts Region - Pointer to start of parts region.&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;u32[Parts Count]&amp;gt;&lt;br /&gt;
|Parts Index Array - Array of indices to parts&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Enum Relocation&amp;gt;&amp;gt;&lt;br /&gt;
|Enum Relocation Array&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;State&amp;gt;&amp;gt;&lt;br /&gt;
|State Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Float Property Ex[Float Property Ex Count]&amp;gt;&lt;br /&gt;
|Float Property Ex Array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Bone Blend[Bone Blend Count]&amp;gt;&lt;br /&gt;
|Bone Blend Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Count&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Skeleton[Partial Skeleton Count]&amp;gt;&lt;br /&gt;
|Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Transition Array&amp;gt;&lt;br /&gt;
|Transition Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;u32&amp;gt;&amp;gt;&lt;br /&gt;
|Transition Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Exb&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Transition Group Array&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Material Blend&amp;gt;&amp;gt;&lt;br /&gt;
|Material Blend Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Property&amp;lt;T&amp;gt; ===&lt;br /&gt;
Property types include s32 (can be an enum), bool(32-bit), float, AsbString, and Vector3f.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Property&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
=== Command ===&lt;br /&gt;
Defines a command that can be played by an as::Controller. The command is composed of a behavior tree of elements.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Debug flag for host io?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;InterpolationType&amp;gt;&lt;br /&gt;
|Default Interpolation Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Interpolation Type ====&lt;br /&gt;
Enum for (known) interpolation types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Interpolation Type&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Default&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cross Fade&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Local Bone&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inertia Local Bone&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Parts&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is No State End&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Parts Index Id&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|External Action Id&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
Enum of element types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Type&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|26&lt;br /&gt;
|TwoDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementPlugs ====&lt;br /&gt;
The plug struct provides relative offsets to &amp;quot;plug&amp;quot; data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ElementPlugs (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Base Index &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4 * Frame Controller Base Index + Frame Controller Count &lt;br /&gt;
|u32[]&lt;br /&gt;
|Plug Data Offset Array - Offsets relative to start of plug table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Child Plug =====&lt;br /&gt;
Only known are listed.&lt;br /&gt;
&lt;br /&gt;
====== Default ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== FloatSelector, OneDimensionalBlender, BonePositionSelector Elements ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== StringSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IntSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== RandomSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== PreviousTagSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Frame Controller Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Frame Controller Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;Element Type&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== FloatSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== StringSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SkeletalAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== State Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== OneDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector weight&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Easing Type (1 = ease)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Sequential Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IntSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Simultaneous Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Type (0 = no children, 1 = first child state end)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MaterialAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Id&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== FrameController Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop Start&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop End&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Kill Loop&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Random Range&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Local Random&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Current Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Retarget Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DummyAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Looping&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== RandomSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;&amp;gt;&lt;br /&gt;
|Unknown&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PreviousTagSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BonePositionSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id - (0 = X, 1 = Y, 2 = Z) component to generate bone position difference from&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneVisibilityAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InitialFrame Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Initial Frame Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Share By Same Anim key&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Random&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Fixed Random&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Initial Frame Type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|-&lt;br /&gt;
|FrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|InvFrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|Random&lt;br /&gt;
|-&lt;br /&gt;
|BonePosition&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|-&lt;br /&gt;
|Frame&lt;br /&gt;
|-&lt;br /&gt;
|InvFrame&lt;br /&gt;
|-&lt;br /&gt;
|SlotSync&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Bone Blend Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Child Id&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Bone Blend Mode Value&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Mode (0 = all, 1 = child 0, 2 = child 1)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoolSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alert =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SubtractAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ShapeAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TwoDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector Weight 0&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector Weight 1&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key frame array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key data array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=146</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=146"/>
		<updated>2026-01-07T12:43:54Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Correct exb pointer field type in header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as &#039;&#039;The Legend of Zelda: Tears of the Kingdom&#039;&#039; and &#039;&#039;Nintendo Switch Sports&#039;&#039;. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs Donkey Kong&#039;&#039; (v0x0417). Other ASB versions include 0x304 (&#039;&#039;Ring Fit Adventure&#039;&#039;), 0x3FB (&#039;&#039;Labo Toy-Con 04&#039;&#039; and &#039;&#039;Game Builder Garage&#039;&#039;), 0x407 (&#039;&#039;Animal Crossing: New Horizons&#039;&#039;), 0x40F (&#039;&#039;Nintendo Switch Sports&#039;&#039;), 0x410 (&#039;&#039;Splatoon 3&#039;&#039;), 0x418 (&#039;&#039;Super Mario Bros. Wonder&#039;&#039;), and 0x41A (&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
ASB is a little endian format which consists of node pathways triggered by AS commands. When an AS command is called, it runs the sequence of nodes connected to it which trigger and control animations and animation logic. Nodes are arranged in an array and referenced and accessed by their array index. Despite the presence of animation events in ASB files, these events do not appear to be used by the game.&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the start of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible parameter types: string, int (32-bit signed integer), float (32-bit floating point number), bool, vector3f, and pointer (object pointer, this is not actually possible in ASB, only usable in AINB).&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x417 ====&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AsbString ====&lt;br /&gt;
Represents a u32 offset relative to the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AsbPtr &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AsbArray &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version - (0x41b in Nintendo Switch Online: Playtest version 021)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Command[Command Count]&amp;gt;&lt;br /&gt;
|Command Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Element[Element Count]&amp;gt;&lt;br /&gt;
|Element Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count - The pointer and count are erroneously present, but the section is not actually written in applications that support the baev file format.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Event[Event Count]&amp;gt;&lt;br /&gt;
|Event Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Parts&amp;gt;&lt;br /&gt;
|Parts Region - Pointer to start of parts region.&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;u32[Parts Count]&amp;gt;&lt;br /&gt;
|Parts Index Array - Array of indices to parts&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Float Property Ex[Float Property Ex Count]&amp;gt;&lt;br /&gt;
|Float Property Ex Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Count&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Bone Blend[Bone Blend Count]&amp;gt;&lt;br /&gt;
|Bone Blend Array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Skeleton[Partial Skeleton Count]&amp;gt;&lt;br /&gt;
|Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Transition Array&amp;gt;&lt;br /&gt;
|Transition Array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;u32&amp;gt;&amp;gt;&lt;br /&gt;
|Transition Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Exb&amp;gt;&lt;br /&gt;
|Exb&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Transition Group Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Material Blend&amp;gt;&amp;gt;&lt;br /&gt;
|Material Blend Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Property&amp;lt;T&amp;gt; ===&lt;br /&gt;
Property types include s32 (can be an enum), bool(32-bit), float, AsbString, and Vector3f.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Property&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
=== Command ===&lt;br /&gt;
Defines a command that can be played by an as::Controller. The command is composed of a behavior tree of elements.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Debug flag for host io?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;InterpolationType&amp;gt;&lt;br /&gt;
|Default Interpolation Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Interpolation Type ====&lt;br /&gt;
Enum for (known) interpolation types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Interpolation Type&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Default&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cross Fade&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Local Bone&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inertia Local Bone&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Parts&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is No State End&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Parts Index Id&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|External Action Id&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
Enum of element types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Type&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|26&lt;br /&gt;
|TwoDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementPlugs ====&lt;br /&gt;
The plug struct provides relative offsets to &amp;quot;plug&amp;quot; data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ElementPlugs (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Base Index &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4 * Frame Controller Base Index + Frame Controller Count &lt;br /&gt;
|u32[]&lt;br /&gt;
|Plug Data Offset Array - Offsets relative to start of plug table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Child Plug =====&lt;br /&gt;
Only known are listed.&lt;br /&gt;
&lt;br /&gt;
====== Default ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== FloatSelector, OneDimensionalBlender, BonePositionSelector Elements ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== StringSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IntSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== RandomSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== PreviousTagSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Frame Controller Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Frame Controller Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;Element Type&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== FloatSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== StringSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SkeletalAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== State Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== OneDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector weight&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Easing Type (1 = ease)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Sequential Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IntSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Simultaneous Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Type (0 = no children, 1 = first child state end)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MaterialAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Id&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== FrameController Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop Start&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop End&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Kill Loop&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Random Range&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Local Random&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Current Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Retarget Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DummyAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Looping&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== RandomSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;&amp;gt;&lt;br /&gt;
|Unknown&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PreviousTagSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BonePositionSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id - (0 = X, 1 = Y, 2 = Z) component to generate bone position difference from&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneVisibilityAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InitialFrame Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Initial Frame Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Share By Same Anim key&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Random&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Fixed Random&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Initial Frame Type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|-&lt;br /&gt;
|FrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|InvFrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|Random&lt;br /&gt;
|-&lt;br /&gt;
|BonePosition&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|-&lt;br /&gt;
|Frame&lt;br /&gt;
|-&lt;br /&gt;
|InvFrame&lt;br /&gt;
|-&lt;br /&gt;
|SlotSync&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Bone Blend Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Child Id&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Bone Blend Mode Value&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Mode (0 = all, 1 = child 0, 2 = child 1)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoolSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alert =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SubtractAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ShapeAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TwoDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key frame array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key data array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=145</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=145"/>
		<updated>2026-01-07T12:42:14Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Correct fields in element struct.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as &#039;&#039;The Legend of Zelda: Tears of the Kingdom&#039;&#039; and &#039;&#039;Nintendo Switch Sports&#039;&#039;. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs Donkey Kong&#039;&#039; (v0x0417). Other ASB versions include 0x304 (&#039;&#039;Ring Fit Adventure&#039;&#039;), 0x3FB (&#039;&#039;Labo Toy-Con 04&#039;&#039; and &#039;&#039;Game Builder Garage&#039;&#039;), 0x407 (&#039;&#039;Animal Crossing: New Horizons&#039;&#039;), 0x40F (&#039;&#039;Nintendo Switch Sports&#039;&#039;), 0x410 (&#039;&#039;Splatoon 3&#039;&#039;), 0x418 (&#039;&#039;Super Mario Bros. Wonder&#039;&#039;), and 0x41A (&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
ASB is a little endian format which consists of node pathways triggered by AS commands. When an AS command is called, it runs the sequence of nodes connected to it which trigger and control animations and animation logic. Nodes are arranged in an array and referenced and accessed by their array index. Despite the presence of animation events in ASB files, these events do not appear to be used by the game.&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the start of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible parameter types: string, int (32-bit signed integer), float (32-bit floating point number), bool, vector3f, and pointer (object pointer, this is not actually possible in ASB, only usable in AINB).&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x417 ====&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AsbString ====&lt;br /&gt;
Represents a u32 offset relative to the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AsbPtr &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AsbArray &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version - (0x41b in Nintendo Switch Online: Playtest version 021)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Command[Command Count]&amp;gt;&lt;br /&gt;
|Command Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Element[Element Count]&amp;gt;&lt;br /&gt;
|Element Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count - The pointer and count are erroneously present, but the section is not actually written in applications that support the baev file format.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Event[Event Count]&amp;gt;&lt;br /&gt;
|Event Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Parts&amp;gt;&lt;br /&gt;
|Parts Region - Pointer to start of parts region.&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;u32[Parts Count]&amp;gt;&lt;br /&gt;
|Parts Index Array - Array of indices to parts&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Float Property Ex[Float Property Ex Count]&amp;gt;&lt;br /&gt;
|Float Property Ex Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Count&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Bone Blend[Bone Blend Count]&amp;gt;&lt;br /&gt;
|Bone Blend Array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Skeleton[Partial Skeleton Count]&amp;gt;&lt;br /&gt;
|Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Transition Array&amp;gt;&lt;br /&gt;
|Transition Array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;u32&amp;gt;&amp;gt;&lt;br /&gt;
|Transition Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Exb&amp;gt;&amp;gt;&lt;br /&gt;
|Exb&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Transition Group Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Material Blend&amp;gt;&amp;gt;&lt;br /&gt;
|Material Blend Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Property&amp;lt;T&amp;gt; ===&lt;br /&gt;
Property types include s32 (can be an enum), bool(32-bit), float, AsbString, and Vector3f.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Property&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
=== Command ===&lt;br /&gt;
Defines a command that can be played by an as::Controller. The command is composed of a behavior tree of elements.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Debug flag for host io?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;InterpolationType&amp;gt;&lt;br /&gt;
|Default Interpolation Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Interpolation Type ====&lt;br /&gt;
Enum for (known) interpolation types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Interpolation Type&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Default&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cross Fade&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Local Bone&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inertia Local Bone&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Parts&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is No State End&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Parts Index Id&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|External Action Id&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
Enum of element types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Type&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|26&lt;br /&gt;
|TwoDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementPlugs ====&lt;br /&gt;
The plug struct provides relative offsets to &amp;quot;plug&amp;quot; data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ElementPlugs (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Base Index &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4 * Frame Controller Base Index + Frame Controller Count &lt;br /&gt;
|u32[]&lt;br /&gt;
|Plug Data Offset Array - Offsets relative to start of plug table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Child Plug =====&lt;br /&gt;
Only known are listed.&lt;br /&gt;
&lt;br /&gt;
====== Default ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== FloatSelector, OneDimensionalBlender, BonePositionSelector Elements ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== StringSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IntSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== RandomSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== PreviousTagSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Frame Controller Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Frame Controller Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;Element Type&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== FloatSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== StringSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SkeletalAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== State Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== OneDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector weight&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Easing Type (1 = ease)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Sequential Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IntSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Simultaneous Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Type (0 = no children, 1 = first child state end)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MaterialAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Id&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== FrameController Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop Start&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop End&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Kill Loop&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Random Range&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Local Random&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Current Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Retarget Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DummyAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Looping&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== RandomSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;&amp;gt;&lt;br /&gt;
|Unknown&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PreviousTagSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BonePositionSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id - (0 = X, 1 = Y, 2 = Z) component to generate bone position difference from&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneVisibilityAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InitialFrame Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Initial Frame Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Share By Same Anim key&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Random&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Fixed Random&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Initial Frame Type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|-&lt;br /&gt;
|FrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|InvFrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|Random&lt;br /&gt;
|-&lt;br /&gt;
|BonePosition&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|-&lt;br /&gt;
|Frame&lt;br /&gt;
|-&lt;br /&gt;
|InvFrame&lt;br /&gt;
|-&lt;br /&gt;
|SlotSync&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Bone Blend Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Child Id&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Bone Blend Mode Value&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Mode (0 = all, 1 = child 0, 2 = child 1)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoolSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alert =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SubtractAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ShapeAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TwoDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key frame array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key data array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=144</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=144"/>
		<updated>2026-01-07T12:36:03Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Begin adding some information on asb version 0x41b&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as &#039;&#039;The Legend of Zelda: Tears of the Kingdom&#039;&#039; and &#039;&#039;Nintendo Switch Sports&#039;&#039;. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs Donkey Kong&#039;&#039; (v0x0417). Other ASB versions include 0x304 (&#039;&#039;Ring Fit Adventure&#039;&#039;), 0x3FB (&#039;&#039;Labo Toy-Con 04&#039;&#039; and &#039;&#039;Game Builder Garage&#039;&#039;), 0x407 (&#039;&#039;Animal Crossing: New Horizons&#039;&#039;), 0x40F (&#039;&#039;Nintendo Switch Sports&#039;&#039;), 0x410 (&#039;&#039;Splatoon 3&#039;&#039;), 0x418 (&#039;&#039;Super Mario Bros. Wonder&#039;&#039;), and 0x41A (&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
ASB is a little endian format which consists of node pathways triggered by AS commands. When an AS command is called, it runs the sequence of nodes connected to it which trigger and control animations and animation logic. Nodes are arranged in an array and referenced and accessed by their array index. Despite the presence of animation events in ASB files, these events do not appear to be used by the game.&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the start of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible parameter types: string, int (32-bit signed integer), float (32-bit floating point number), bool, vector3f, and pointer (object pointer, this is not actually possible in ASB, only usable in AINB).&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
=== Section Order ===&lt;br /&gt;
&lt;br /&gt;
==== Version 0x417 ====&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
==== AsbString ====&lt;br /&gt;
Represents a u32 offset relative to the start of the file&#039;s string pool.&lt;br /&gt;
&lt;br /&gt;
==== AsbPtr &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to the struct of type &amp;quot;T&amp;quot; enclosed by &amp;lt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== AsbArray &amp;lt;T&amp;gt; ====&lt;br /&gt;
Represents a u32 absolute offset from the start of the file to:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|T[Count]&lt;br /&gt;
|Array of struct of type T. Note; asb files only use 32-bit aligned types.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version - (0x41b in Nintendo Switch Online: Playtest version 021)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Command[Command Count]&amp;gt;&lt;br /&gt;
|Command Array&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Element Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Element[Element Count]&amp;gt;&lt;br /&gt;
|Element Array&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count - The pointer and count are erroneously present, but the section is not actually written in applications that support the baev file format.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Event[Event Count]&amp;gt;&lt;br /&gt;
|Event Array&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Parts Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Parts&amp;gt;&lt;br /&gt;
|Parts Region - Pointer to start of parts region.&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;u32[Parts Count]&amp;gt;&lt;br /&gt;
|Parts Index Array - Array of indices to parts&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Blackboard&amp;gt;&lt;br /&gt;
|Blackboard&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;char&amp;gt;&lt;br /&gt;
|String Pool&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Float Property Ex[Float Property Ex Count]&amp;gt;&lt;br /&gt;
|Float Property Ex Array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Count&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Bone Blend[Bone Blend Count]&amp;gt;&lt;br /&gt;
|Bone Blend Array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Skeleton Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Partial Skeleton[Partial Skeleton Count]&amp;gt;&lt;br /&gt;
|Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;Transition Array&amp;gt;&lt;br /&gt;
|Transition Array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;u32&amp;gt;&amp;gt;&lt;br /&gt;
|Transition Partial Skeleton Array&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;External Action&amp;gt;&amp;gt;&lt;br /&gt;
|External Action Array&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Exb&amp;gt;&amp;gt;&lt;br /&gt;
|Exb&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Transition Group Array&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;Material Blend&amp;gt;&amp;gt;&lt;br /&gt;
|Material Blend Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Property&amp;lt;T&amp;gt; ===&lt;br /&gt;
Property types include s32 (can be an enum), bool(32-bit), float, AsbString, and Vector3f.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Property&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
=== Command ===&lt;br /&gt;
Defines a command that can be played by an as::Controller. The command is composed of a behavior tree of elements.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbString&lt;br /&gt;
|Name&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Debug flag for host io?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;InterpolationType&amp;gt;&lt;br /&gt;
|Default Interpolation Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|Guid&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Id&lt;br /&gt;
|-&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Interpolation Type ====&lt;br /&gt;
Enum for (known) interpolation types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Interpolation Type&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Default&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cross Fade&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Local Bone&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inertia Local Bone&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Parts&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Element ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x417)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Element Type&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Flag&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Flag (unknown use)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;ElementParam&amp;lt;Element Type&amp;gt;&amp;gt;&lt;br /&gt;
|Element Param&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Flags&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Float Property Ex Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Parts Index Id&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|External Action Id&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x10&lt;br /&gt;
|Guid&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Element Type ====&lt;br /&gt;
Enum of element types.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Element Type&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|26&lt;br /&gt;
|TwoDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementPlugs ====&lt;br /&gt;
The plug struct provides relative offsets to &amp;quot;plug&amp;quot; data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ElementPlugs (0x41b)&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|State Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Base Index &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Child Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Count&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Exb Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Event Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Frame Controller Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4 * Frame Controller Base Index + Frame Controller Count &lt;br /&gt;
|u32[]&lt;br /&gt;
|Plug Data Offset Array - Offsets relative to start of plug table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Child Plug =====&lt;br /&gt;
Only known are listed.&lt;br /&gt;
&lt;br /&gt;
====== Default ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== FloatSelector, OneDimensionalBlender, BonePositionSelector Elements ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Min&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== StringSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IntSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== RandomSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== PreviousTagSelector Element ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Child Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Event Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Frame Controller Plug =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Frame Controller Element Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ElementParam&amp;lt;Element Type&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
===== FloatSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== StringSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SkeletalAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== State Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== OneDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Selector weight&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Easing Type (1 = ease)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Sequential Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IntSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Simultaneous Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Type (0 = no children, 1 = first child state end)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Event Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MaterialAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Id&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== FrameController Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop Start&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Loop End&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Kill Loop&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|Random Range&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Local Random&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Current Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Retarget Play Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DummyAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Looping&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== RandomSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;&amp;gt;&lt;br /&gt;
|Unknown&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PreviousTagSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BonePositionSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id - (0 = X, 1 = Y, 2 = Z) component to generate bone position difference from&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Judge Timing&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneVisibilityAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Offset Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Frame Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InitialFrame Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Initial Frame Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|AsbPtr&amp;lt;AsbArray&amp;lt;AsbString&amp;gt;&amp;gt;&lt;br /&gt;
|Tag Array&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Share By Same Anim key&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Left Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Right Bone Name&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Component Id&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Random&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Fixed Random&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Initial Frame Type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|Start&lt;br /&gt;
|-&lt;br /&gt;
|FrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|InvFrameOffset&lt;br /&gt;
|-&lt;br /&gt;
|Random&lt;br /&gt;
|-&lt;br /&gt;
|BonePosition&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|-&lt;br /&gt;
|Frame&lt;br /&gt;
|-&lt;br /&gt;
|InvFrame&lt;br /&gt;
|-&lt;br /&gt;
|SlotSync&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoneBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Bone Blend Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Child Id&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|Bone Blend Mode Value&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|State End Mode (0 = all, 1 = child 0, 2 = child 1)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BoolSelector Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Select Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Slot Sync&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alert =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SubtractAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ShapeAnimation Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;AsbString&amp;gt;&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TwoDimensionalBlender Element =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Property&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key frame array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset to key data array relative to 0x10 of this struct?&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0xc + N&lt;br /&gt;
|ElementPlugs&lt;br /&gt;
|Plugs&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bwav&amp;diff=143</id>
		<title>Bwav</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bwav&amp;diff=143"/>
		<updated>2026-01-07T09:37:18Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Wording correction.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bwav is an audio stream format used by the [[aal::atom]] library. It is primarily a lightweight header followed by audio sample data.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
Bwav is little-endian. The file alignment is 4 bytes despite the sample data alignment. This page is based on version 1, which is the only currently known version.&lt;br /&gt;
&lt;br /&gt;
# Header&lt;br /&gt;
# Channel Info Array&lt;br /&gt;
# Channel Sample Data Array&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;BWAV&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Byte Order Mark&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Samples Hash - Hash of sample data region?&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Flags - Bit 0 indicates this is a prefetch bwav&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Channel Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Channel Info ===&lt;br /&gt;
Immediately follows header. One channel info per channel, variable length though almost always 0x4c (with 1 loop point). Channel info is tightly packed one after the other.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Encoding - 0 = Pcm16, 1 = DspAdpcm, 2 = Opus&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Channel Pan - 0 = Left, 1 = Right, 2 = Center, 3 = LFE, 4 = LS, 5 = RS, 6 = Invalid?&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sample Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Non-Prefetch Sample Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File Sample Count  (identical to previous field when non-prefetch bwav)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x20&lt;br /&gt;
|u16[16]&lt;br /&gt;
|Dsp-Adpcm Coefficients&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Non-Prefetch Sample Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sample Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Loop Point Count - Only observed as 1 despite support for multiple&lt;br /&gt;
|-&lt;br /&gt;
|0x3a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Loop Point - Default loop point&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Loop End - base sample of end after final loop point, 0xffff&#039;ffff suggests no loop&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0xc * Loop Point Count&lt;br /&gt;
|Loop Point&lt;br /&gt;
|Loop Point Array - variable sized array of loop points&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Loop Point ====&lt;br /&gt;
A loop point provides a seek point to a specific sample offset. Often only 1 loop point exists, it&#039;s role being the start of a single looping region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Loop Start - base sample of loop point start&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x6&lt;br /&gt;
|Adpcm Context&lt;br /&gt;
|Adpcm Context - Snapshot of dsp-adpcm context at the sample offset of loop start&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|Zero-padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Adpcm Context =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Predictor Scale&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x4&lt;br /&gt;
|s16[2]&lt;br /&gt;
|History Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample Data ===&lt;br /&gt;
The start of each channel&#039;s sample data is aligned up by 64 bytes in file, despite the 4-byte file alignment, outside the last channel, which is truncated to the last non-zero sample (including zeroed samples in a dsp-adpcm block).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Format&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Pcm16&lt;br /&gt;
|2 bytes per sample&lt;br /&gt;
|16-bit signed PCM sample data.&lt;br /&gt;
|-&lt;br /&gt;
|Dsp-Adpcm&lt;br /&gt;
|8-byte block array, up to 14 samples per block&lt;br /&gt;
|8-bit header for decoding, followed by up to 14 4-bit compressed samples.&lt;br /&gt;
|-&lt;br /&gt;
|Opus&lt;br /&gt;
|&lt;br /&gt;
|Header followed by opus data.&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bwav&amp;diff=142</id>
		<title>Bwav</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bwav&amp;diff=142"/>
		<updated>2026-01-07T09:35:36Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Document bwav file format.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bwav is an audio stream format used by the [[aal::atom]] library. It is primarily a lightweight header followed by audio sample data.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
Bwav is little-endian. The file alignment is 4 bytes despite the sample data alignment. This page is based on version 1, which is the only currently known version.&lt;br /&gt;
&lt;br /&gt;
# Header&lt;br /&gt;
# Channel Info Array&lt;br /&gt;
# Channel Sample Data Array&lt;br /&gt;
&lt;br /&gt;
== Structures ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic - &amp;quot;BWAV&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Byte Order Mark&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Samples Hash - Hash of sample data region?&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Flags - Bit 0 indicates this is a prefetch bwav&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Channel Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Channel Info ===&lt;br /&gt;
Immediately follows header. One channel info per channel, variable length though almost always 0x4c (with 1 loop point). Channel info is tightly packed one after the other.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Encoding - 0 = Pcm16, 1 = DspAdpcm, 2 = Opus&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Channel Pan - 0 = Left, 1 = Right, 2 = Center, 3 = LFE, 4 = LS, 5 = RS, 6 = Invalid?&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sample Rate&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Non-Prefetch Sample Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File Sample Count  (identical to previous field when non-prefetch bwav)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x20&lt;br /&gt;
|u16[16]&lt;br /&gt;
|Dsp-Adpcm Coefficients&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Non-Prefetch Sample Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Sample Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Loop Point Count - Only observed as 1 despite support for multiple&lt;br /&gt;
|-&lt;br /&gt;
|0x3a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Loop Point - Default loop point&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Loop End - base sample of end after final loop point, 0xffff&#039;ffff suggests no loop&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0xc * Loop Point Count&lt;br /&gt;
|Loop Point&lt;br /&gt;
|Loop Point Array - variable sized array of loop points&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Loop Point ====&lt;br /&gt;
A loop point provides as a seek point to a specific sample offset. Often only 1 loop point exists, it&#039;s role being the start of a single looping region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Loop Start - base sample of loop point start&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x6&lt;br /&gt;
|Adpcm Context&lt;br /&gt;
|Adpcm Context - Snapshot of dsp-adpcm context at the sample offset of loop start&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|Zero-padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Adpcm Context =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Predictor Scale&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x4&lt;br /&gt;
|s16[2]&lt;br /&gt;
|History Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample Data ===&lt;br /&gt;
The start of each channel&#039;s sample data is aligned up by 64 bytes in file, despite the 4-byte file alignment, outside the last channel, which is truncated to the last non-zero sample (including zeroed samples in a dsp-adpcm block).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Format&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Pcm16&lt;br /&gt;
|2 bytes per sample&lt;br /&gt;
|16-bit signed PCM sample data.&lt;br /&gt;
|-&lt;br /&gt;
|Dsp-Adpcm&lt;br /&gt;
|8-byte block array, up to 14 samples per block&lt;br /&gt;
|8-bit header for decoding, followed by up to 14 4-bit compressed samples.&lt;br /&gt;
|-&lt;br /&gt;
|Opus&lt;br /&gt;
|&lt;br /&gt;
|Header followed by opus data.&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Engine::actor&amp;diff=140</id>
		<title>Engine::actor</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Engine::actor&amp;diff=140"/>
		<updated>2025-10-22T02:03:59Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Renaming and corrections for shaft::baseproc knowledge.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This namespace houses [[ModuleSystem]]&#039;s Actor system. Which is implemented on top of [[Shaft::baseproc]]. Treat names as unofficial unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
=== ActorModule ===&lt;br /&gt;
The namespace&#039;s [[Engine::module#IModule|IModule]]. &lt;br /&gt;
&lt;br /&gt;
== Managers ==&lt;br /&gt;
&lt;br /&gt;
=== ActorMgr ===&lt;br /&gt;
Houses a set of user callbacks for the actor system. Manages the ActorInstanceHeap which is by default responsible for most BaseProc and PreActor memory management. Maintains an array of factories for creating BaseProc class derivatives by name.&lt;br /&gt;
&lt;br /&gt;
=== PreActorMgr ===&lt;br /&gt;
Houses the PreActorRenderer. A pool of ActorSystemSettings with active settings stored in a hash map. A pool of PreActorRenderInfo. Two pools of sets of PreActors. An array of all the sets of PreActors. A PreActor allocator managed by a linked list. Houses the ActorAIGroupMgr and LinkMgr.&lt;br /&gt;
&lt;br /&gt;
==== PreActorRenderer ====&lt;br /&gt;
Houses 2 MassModels. An array of PreActorRenderInfo currently pending load. An array of PreActors to be drawn sorted by their actor settings accompanied by an array of batch info grouping similar models together. Houses the PreActorModelComposer thread.&lt;br /&gt;
&lt;br /&gt;
===== PreActorModelComposer (TODO) =====&lt;br /&gt;
&lt;br /&gt;
==== ActorAIGroupMgr ====&lt;br /&gt;
Maintains a set of ActorAIGroup.&lt;br /&gt;
&lt;br /&gt;
==== LinkMgr ====&lt;br /&gt;
Manages an array of links for PreActors&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
&lt;br /&gt;
=== PreActor ===&lt;br /&gt;
PreActors manage the state of an ActorBase before it&#039;s instantiation. Typically data comes from a bcett file parsed by a BancEntity. A PreActor stores a reference to it&#039;s [[Engine::banc#BancEntity|BancEntity]], a home transform, a hash of it&#039;s transform, a name, a hash to serve as a unique id, and a reference to it&#039;s ActorSystemSettings. If applicable it can contain the following. A ByamlIter to a dynamic section of data used to initialize the ActorBase&#039;s Blackboard or for user defined purposes. A ByamlIter to a set of phive specific parameters. A set of information used to initialize the ActorBase&#039;s Blackboard. A reference to the PreActor&#039;s ActorAIGroup with a set of user provided callbacks from the ActorAIGroup&#039;s ActorLogic. A reference to the PreActor&#039;s SimultaneousGroup. A reference to the PreActor&#039;s FarDeleteGroup. A handle to a set of link&#039;s in the LinkMgr. A handle to a StaticCompound referencing the PreActor&#039;s Phive PlacementID.&lt;br /&gt;
&lt;br /&gt;
==== ActorSystemSettings (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== ActorAIGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== SimultaneousGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== FarDeleteGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== ActorBase ===&lt;br /&gt;
ActorBase extends shaft::baseproc::BaseProc. It implements an active job for each of the 4 stages provided by the BaseProcMgr. These stages are named PreCalc, PostCalc, PostSensor, and FrameEndCalc. Notably, FrameStartCalc happens directly before PreCalc in the PreCalc job. The physics world for entities is calculated between PreCalc and PostCalc. The physics world for sensors is calculated between PostCalc and PostSensor. ActorBase has a single job priority value that represents only a subset of the priority range offered by BaseProcMgr and applies to each active job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ActorBase maintains a home transform, a current transform, a request for the next transform, angular and linear velocites, an AABB, a Document reference to it&#039;s ActorParam, a reference to it&#039;s PreActor, a Transceiver, a BlackboardAccessor, an ActorBaseLink to an optional linked actor, and a pause key allocator for maintaining a more granular pause mask for various actor behavior while the actor is active. The majority of ActorBase behavior is implemented in a set of engine provided optional components (See [[Engine::component#IActorComponent|engine::component]]).&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=139</id>
		<title>Shaft::baseproc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Shaft::baseproc&amp;diff=139"/>
		<updated>2025-10-22T01:53:54Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Write a bit about shaft::baseproc lifecycles.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shaft::baseproc implements a concurrent actor framework based on scheduling units called a &amp;quot;base procedure&amp;quot;. BaseProcs can be asynchronously created by an application and later inserted into the system and modified via requests.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcMgr ===&lt;br /&gt;
Manages BaseProcs and BaseProc related sub-managers. Active and sleeping BaseProcs create a job graph spanning 4 &amp;quot;stages&amp;quot; with 8 &amp;quot;priorities&amp;quot; each, for 32 separate job graphs. The job graphs are processed one after the other, following the priorities from highest (0) to lowest (7) before advancing to the next stage. The jobs within each graph are processed concurrently with respect to their dependencies.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
BaseProcMgr has 5 main states it can move between by various api calls.&lt;br /&gt;
&lt;br /&gt;
===== Idle =====&lt;br /&gt;
The system is at rest. Accessing BaseProcs through BaseProcLinks outside the system is legal.&lt;br /&gt;
&lt;br /&gt;
===== Building =====&lt;br /&gt;
The system is building the job graph. Active BaseProcs will insert their jobs, and sleeping BaseProcs will instead insert their sleep job if they have one.&lt;br /&gt;
&lt;br /&gt;
===== BaseProc Processing =====&lt;br /&gt;
The system is running the current job graph. Accessing BaseProcs through BaseProcLinks outside the system is illegal.&lt;br /&gt;
&lt;br /&gt;
===== Removal Processing =====&lt;br /&gt;
The system is processing removal requests. Successfully removed BaseProcs are scheduled for asynchronous deletion.&lt;br /&gt;
&lt;br /&gt;
===== Request Processing =====&lt;br /&gt;
The system is processing BaseProc requests. It may be illegal to access a BaseProc outside the system at this time.&lt;br /&gt;
&lt;br /&gt;
=== BaseProc ===&lt;br /&gt;
Harbors up to 1 job for each stage and priority. As well as up to 1 sleep job. Is a member of the BaseProc tree. Has global meta-data for being referenced by BaseProcLinks. Can have dependency relations with other BaseProcs.&lt;br /&gt;
&lt;br /&gt;
==== Lifecycle ====&lt;br /&gt;
A BaseProc has 12 states grouped into 4 &amp;quot;cycles&amp;quot;; initialization (3), live (4), removal (3), and finalization (2).&lt;br /&gt;
&lt;br /&gt;
===== Initialization =====&lt;br /&gt;
This group of states is progressed linearly along the creation of a BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Uninitialized ======&lt;br /&gt;
The default state on creation.&lt;br /&gt;
&lt;br /&gt;
====== PendingInitialize ======&lt;br /&gt;
The BaseProc is in the state of being initialized.&lt;br /&gt;
&lt;br /&gt;
====== Initialized ======&lt;br /&gt;
The BaseProc has been initialized. Next request processing a &amp;quot;PostInitialize&amp;quot; function will be called once per processing, if it fails the BaseProc may be deleted, or the system may try again under certain conditions. Trying again may not be intended.&lt;br /&gt;
&lt;br /&gt;
===== Live =====&lt;br /&gt;
This group of states represents a BaseProc that is &amp;quot;live&amp;quot; in the system. The initial state after &amp;quot;PostInitialize&amp;quot; succeeds is PendingActive, from there a BaseProc can move between Active, Sleeping, or Paused.&lt;br /&gt;
&lt;br /&gt;
====== PendingActive ======&lt;br /&gt;
The initial &amp;quot;Live&amp;quot; state of a BaseProc. RequestCancelSleep or RequestCancelPause can be used to attempt to activate the BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Active ======&lt;br /&gt;
The quintessential &amp;quot;Live&amp;quot; state. All of the BaseProc&#039;s active jobs will be used in job graph building.&lt;br /&gt;
&lt;br /&gt;
====== Sleeping ======&lt;br /&gt;
A heavyweight break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelSleep will activate the BaseProc.&lt;br /&gt;
&lt;br /&gt;
====== Paused ======&lt;br /&gt;
A lighter break in a BaseProc&#039;s processing. The BaseProc&#039;s sleep job will be used in job graph building. RequestCancelPause will unpause the BaseProc.&lt;br /&gt;
&lt;br /&gt;
===== Removal =====&lt;br /&gt;
After a delete request is processed, a BaseProc is transitioned to the PendingRemoval state.&lt;br /&gt;
&lt;br /&gt;
====== PendingRemoval ======&lt;br /&gt;
The BaseProc is removing itself from the application&#039;s subsystems. When the OnRemove callback succeeds the BaseProc immediately transitions to the Removal state.&lt;br /&gt;
&lt;br /&gt;
====== Removal ======&lt;br /&gt;
The BaseProc removes it&#039;s BaseProcLink meta data, invalidating all BaseProcLinks to it, calls the OnStateRemoval callback, and then immediately transitions to the Removed state.&lt;br /&gt;
&lt;br /&gt;
====== Removed ======&lt;br /&gt;
Next time there is space the BaseProc will be added to the asynchronous deletion queue and transitioned to the PendingFinalize state.&lt;br /&gt;
&lt;br /&gt;
===== Finalization =====&lt;br /&gt;
This group of states to track a BaseProc&#039;s asynchronous finalization up to it&#039;s deletion.&lt;br /&gt;
&lt;br /&gt;
====== PendingFinalization ======&lt;br /&gt;
The BaseProc will call it&#039;s PreFinalize callback, remove itself from the BaseProcMgr lists and trees, and then call it&#039;s PostFinalize callback before immediate transitioning to the Finalized state.&lt;br /&gt;
&lt;br /&gt;
====== Finalized ======&lt;br /&gt;
The BaseProc has completed finalization and will imminently be deleted, with it&#039;s memory freed back to it&#039;s parent heap.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcBinder ===&lt;br /&gt;
Allows watching for the asynchronous creation of a BaseProc. On completion a BaseProcLink to that BaseProc can be retrieved.&lt;br /&gt;
&lt;br /&gt;
=== BaseProcLink ===&lt;br /&gt;
A &amp;quot;hyperlink&amp;quot; reference to a BaseProc. Used to retrieve scoped &amp;quot;read&amp;quot; or &amp;quot;write&amp;quot; accessors to a BaseProc. The accessors follow the C++ &amp;quot;optional&amp;quot; pattern, where retrieving one can fail to retrieve the underlying BaseProc. There are a few rules regarding when an accessor is legal to acquire. Read accessors are the least strict, and succeed as long as the BaseProc has not processed a delete request. Write accessors have 3 different rulesets for anywhere, outside the system, and a strict inside the system.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=138</id>
		<title>ModuleSystem</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=138"/>
		<updated>2025-10-22T00:14:35Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Wording changes and a minor note on NSO PT 1.1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ModuleSystem is the unofficial name of Nintendo EPD&#039;s latest game engine, based on the name of the singular sead::Task at the heart of the mainloop. It&#039;s actor system appears to be a sequel in design to KingSystem, the engine created for The Legend of Zelda: Breath of the Wild. ModuleSystem appears to have replaced both ActionLibrary and LunchPack2 as the new primary engine for Nintendo EPD&#039;s and NST&#039;s game development teams. While each game shares a common set of engine features, each series appears to have a custom fork extending the engine with varying degrees of game specific functionality.&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Extension/Differences summary&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Switch Sports&lt;br /&gt;
|Graphics Module contains a Mii data manager.&lt;br /&gt;
|-&lt;br /&gt;
|Splatoon 3&lt;br /&gt;
|ModuleSystem is extended to thunder::ModuleSystem, notably adding the ability to run the CPU side of the mainloop multiple times per frame. Omits gamedata for a custom save system.&lt;br /&gt;
|-&lt;br /&gt;
|The Legend of Zelda: Tears of the Kingdom&lt;br /&gt;
|Major version up from Splatoon 3 and Nintendo Switch Sports. Some engine namespaces were updated between version 1.0.0 and 1.1.0. Includes the TerrainModule and LODModule, while most other games only contain references to these systems.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Wonder&lt;br /&gt;
|Some libraries are newer than Tears of the Kingdom, some are older.&lt;br /&gt;
|-&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Appears to be slightly behind version of Tears of the Kingdom. shaft::baseproc::BaseProc has a new &amp;quot;Stasus&amp;quot; state used when swapping actors between &amp;quot;combined scenes&amp;quot;. Uses a custom 2d physics engine under engine::coll2d, yet leaves the PhysicsModule with an unused version of the phive library implemented on top of PhysX 3.4 instead of Havok.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Switch Online: Playtest Program&lt;br /&gt;
|A major version above Tears of the Kingdom. engine::module::IModule no longer inherits sead::Job and instead includes a job as a member. A new actor component called CppExecutorComponent was added to ActorBase. Actor system processing was slightly revised. Phive has many notable refactors and additions in this title, including a new locomotion behavior state machine and a new file format called bphnv (not appearing in this title). &lt;br /&gt;
The later 1.1.0 version further updated most libraries. Support for a new &amp;quot;bpvsts&amp;quot; file format was added to Phive, other &amp;quot;VolumeStats&amp;quot; leftovers strongly suggest the format is voxel related. The exb file format gained support for u32 typed arguments, as did ainb&#039;s blackboard. Sead now has an nn::util::ReferSymbol string &amp;quot;SDK MW+Nintendo+Sead-1_0_0_0&amp;quot;. The engine received CSharp scripting support through engine::ecsharp similar to the engine&#039;s lua support, though this is stubbed in retail. 2 new actor components, NaviAnimatorComponent and BoneBindComponent were added to ActorBase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Namespaces ===&lt;br /&gt;
The top level namespace for ModuleSystem is engine. Sub-namespaces typically include a module wrapping a system for a dedicated purpose, whether unique to the engine or contracted out to an external library. Interfaces to the system are typically provided to Actors or Scenes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Namespace&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|actor&lt;br /&gt;
|Implements the actor system on top of [[shaft::baseproc]].&lt;br /&gt;
|-&lt;br /&gt;
|ai&lt;br /&gt;
|Wraps the ai library. Integrates with PreActors through ActorAIGroups, ActorBase through the AIComponent, and IScene through the SequenceComponent.&lt;br /&gt;
|-&lt;br /&gt;
|as&lt;br /&gt;
|Wraps the as library. Integrates with ActorBase through the RetargetScaleComponent, ASInfoComponent, ASOptimizeComponent, and ASComponent.&lt;br /&gt;
|-&lt;br /&gt;
|bake&lt;br /&gt;
|Wraps the bake library.&lt;br /&gt;
|-&lt;br /&gt;
|banc&lt;br /&gt;
|Implements BancEntities via the BancModule. Banc handles the parsing of map units into PreActors, actor ai groups, rails, placement groups, far delete groups, and custom game extensions.&lt;br /&gt;
|-&lt;br /&gt;
|bb (Unofficial)&lt;br /&gt;
|Wraps the bb library, responsible for managing bb::Blackboards. Integrates with ActorBase through BlackboardComponentActor and IScene with BlackboardComponentScene.&lt;br /&gt;
|-&lt;br /&gt;
|camera&lt;br /&gt;
|Implements a camera system. Integrates with ActorBase via the CameraComponent.&lt;br /&gt;
|-&lt;br /&gt;
|component&lt;br /&gt;
|Houses all engine components from the other namespaces for engine::actor::ActorBase and engine::scene::IScene.&lt;br /&gt;
|-&lt;br /&gt;
|controller&lt;br /&gt;
|Implements a controller manager.&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|Stubbed in retail. Seemingly implements a debug menu called &amp;quot;ClickMenu&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|ecsharp&lt;br /&gt;
|Stubbed in retail. Seemingly implements support for CSharp scripting for debugging.&lt;br /&gt;
|-&lt;br /&gt;
|effect&lt;br /&gt;
|Wraps shaft::effect for managing effect resources.&lt;br /&gt;
|-&lt;br /&gt;
|erepo (unofficial)&lt;br /&gt;
|Wraps the erepo library for PlayReport management.&lt;br /&gt;
|-&lt;br /&gt;
|event&lt;br /&gt;
|Implements an event system on top of the evfl library for Event Flows and Timelines, and the sdk movie library for prerendered video. Integrates with ActorBase through the BeforehandLoadEventComponent, EventMemberComponent, and EventPerformerComponent.&lt;br /&gt;
|-&lt;br /&gt;
|framework&lt;br /&gt;
|Implements a minor extension to sead::GameFrameworkNx, and the SpStepRateMgr.&lt;br /&gt;
|-&lt;br /&gt;
|gamedata&lt;br /&gt;
|Wraps the gmd library for managing a global, computable, and savable hash map of game data.&lt;br /&gt;
|-&lt;br /&gt;
|graphics (unofficial)&lt;br /&gt;
|Wraps the gsys library, which extends the agl library. Integrates with ActorBase through the ModelComponent and ModelBindComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lod&lt;br /&gt;
|Implements a level of detail system. Integrates with ActorBase through the LODComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lua&lt;br /&gt;
|Stubbed in retail. Seemingly implements support for lua scripting for debugging.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|Implements the ModuleSystem sead::Task, as well as the IModule interface.&lt;br /&gt;
|-&lt;br /&gt;
|physics&lt;br /&gt;
|Wraps the phive library. Integrates with ActorBase through the PhysicsComponent.&lt;br /&gt;
|-&lt;br /&gt;
|rail&lt;br /&gt;
|Implements the RailMgr, manages rails parsed from banc.&lt;br /&gt;
|-&lt;br /&gt;
|reaction&lt;br /&gt;
|Implements a system for triggering reactions through reaction actors and XLink commands somehow (unknown at time of writing). Integrates with ActorBase via the ReactionComponent.&lt;br /&gt;
|-&lt;br /&gt;
|resource&lt;br /&gt;
|Wraps the ares library and implements ares::IApplicationImpl to provide asynchronous file resource management through ResourceBinders. Also wraps the pp library and implements pp::GfMgrCallback to provide a general parameter system via hierarchical Documents.&lt;br /&gt;
|-&lt;br /&gt;
|rsdb&lt;br /&gt;
|Wraps the pp::rsdb sub library. Manages a set of engine as well as game extended resource databases.&lt;br /&gt;
|-&lt;br /&gt;
|rumble&lt;br /&gt;
|Implements a rumble call system to allow sending vibrations to controllers.&lt;br /&gt;
|-&lt;br /&gt;
|scene&lt;br /&gt;
|Implements the scene system.&lt;br /&gt;
|-&lt;br /&gt;
|sound&lt;br /&gt;
|Wraps the alto library, which extends the aal library, which extends the aal::atom sub library. &lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Implements the RomConfigMgr and PauseMgr&lt;br /&gt;
|-&lt;br /&gt;
|terrain&lt;br /&gt;
|Wraps the tera library. Provides terrain management.&lt;br /&gt;
|-&lt;br /&gt;
|transceiver (unofficial)&lt;br /&gt;
|Implements a transceiver based message systems. Messages can be sent to directly to a destination, or to a whole set of listeners.&lt;br /&gt;
|-&lt;br /&gt;
|ui&lt;br /&gt;
|Wraps the eui library, which in turn extends nn::ui2d. Provides ui processing and resource management through a layout category based system.&lt;br /&gt;
|-&lt;br /&gt;
|xlink&lt;br /&gt;
|Wraps the xlink2 library. Implements an XLink PreActor Manager. Integrates with ActorBase through the ELinkComponent, SLinkComponent, XLinkComponent, and XLinkSubComponent.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game specific Namespaces ===&lt;br /&gt;
These are engine namespaces, that for one reason or another, appear to be game specific extensions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Game(s)&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|coll2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d collision system the game uses instead of phive.&lt;br /&gt;
|-&lt;br /&gt;
|level&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|message&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|move2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d movement system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Main Loop ===&lt;br /&gt;
The mainloop is implemented as a single sead::Task in the standard sead::GameFrameworkNx mainloop. The mainloop consists of 4 sead::DependencyJobGraph&#039;s submitted and ran in a sead::DependencyJobWorkerMgr in succession. These are unofficially called as of writing BeforeActor, AfterActor, GSys, and GSysCalcGpu.&lt;br /&gt;
[[Category:Engines]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=136</id>
		<title>Phive</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=136"/>
		<updated>2025-04-14T07:20:14Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add some NSO PT additions, rephrase a bit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Phive is Nintendo&#039;s physics library built on top of an external physics library, either Havok or PhysX 3.4 have been observed. The PhysX branch doesn&#039;t implement the full feature set and is unused by the game it appears in. The library has an optional cloth and navigation mesh extension for when Havok Navigation and/or Animation are present. It&#039;s responsible for providing actors many different physics controllers in a ControllerSet.&lt;br /&gt;
&lt;br /&gt;
=== PhiveBackEnd ===&lt;br /&gt;
Top-level manager responsible for bootstrapping and handling the memory management of the external physics library.&lt;br /&gt;
&lt;br /&gt;
=== PhiveConfig ===&lt;br /&gt;
Global application settings for phive.&lt;br /&gt;
&lt;br /&gt;
=== DynamicsFramework ===&lt;br /&gt;
This is the main application manager for phive. It provides an additional set of managers.&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetBinder ===&lt;br /&gt;
Loads all controller set resources.&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetConfig ===&lt;br /&gt;
Unpacks binder.&lt;br /&gt;
&lt;br /&gt;
=== ControllerSet ===&lt;br /&gt;
This is a set of all physics controller for an actor. Wrapped by ModuleSystem&#039;s PhysicsComponent.&lt;br /&gt;
&lt;br /&gt;
=== CharacterController ===&lt;br /&gt;
Character controllers provide a framework for kinematics controlled characters. The game can extend character controllers with Update, Result, MoveState, and External components.&lt;br /&gt;
&lt;br /&gt;
==== CharacterProperty ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMatterRigidBodyEntity ====&lt;br /&gt;
Extension of RigidBodyEntity for character controllers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Matter Rigid Body Specific Request Types&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|ChangeIsRigidBodyMode&lt;br /&gt;
|&lt;br /&gt;
|Appears to toggle whether the rigid body is treated as such?&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CharacterParam ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterUpdate ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMoveState ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterResult ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterExternal ====&lt;br /&gt;
&lt;br /&gt;
=== BulletBodyControllerEntity ===&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerEntity ===&lt;br /&gt;
Top level controller for a set of rigid body entities. Phive config defines the set of possible controller names under &amp;quot;RigidBodyControllerNameEntityCollection&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerSensor ===&lt;br /&gt;
Top level controller for a set of rigid body sensors. Phive config defines the set of possible controller names under &amp;quot;RigidBodyControllerNameSensorCollection&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== RigidBody ===&lt;br /&gt;
The base RigidBody class. The game can file change requests for a RigidBody which will be applied in the next frame.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Known Request Types (unofficial)&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|AddToWorld&lt;br /&gt;
|&lt;br /&gt;
|Adds RigidBody as a member of their respective Physics world&lt;br /&gt;
|-&lt;br /&gt;
|RemoveFromWorld&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NoHit&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeCollisionQuality&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeEnableHitRayCast&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeMotionType&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeShape&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetSubLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyEntity ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of being a physical object.&lt;br /&gt;
&lt;br /&gt;
==== RigidBodyEntityForceField ====&lt;br /&gt;
&lt;br /&gt;
=== RigidBodySensor ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of sensing.&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionEntity ===&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionSensor ===&lt;br /&gt;
&lt;br /&gt;
=== Shape ===&lt;br /&gt;
Shapes are used to provide form to a RigidBody. Each shape defines a material, sub material, and can be tagged with up to 64 tags, tags as named under phive config &amp;quot;UserShapeTagMaskCollection&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ShapeType Enum (official, from Tears of the Kingdom)&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Sphere&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Capsule&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Polytope&lt;br /&gt;
|2&lt;br /&gt;
|A shape created out of an array of up to 255 vertices. Must be convex.&lt;br /&gt;
|-&lt;br /&gt;
|Box&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cylinder&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cone&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CharacterPrism&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Compound&lt;br /&gt;
|7&lt;br /&gt;
|&amp;quot;Instances&amp;quot; shapes into a single &amp;quot;compound&amp;quot; from a set of shapes&lt;br /&gt;
|-&lt;br /&gt;
|Mesh&lt;br /&gt;
|8&lt;br /&gt;
|A shape created from the mesh of a Bphsh file&lt;br /&gt;
|-&lt;br /&gt;
|HeightField&lt;br /&gt;
|9&lt;br /&gt;
|Base class for all height fields&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldBox&lt;br /&gt;
|10&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldSphere&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldCylinder&lt;br /&gt;
|12&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldQuadrant&lt;br /&gt;
|13&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldVertices&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|15&lt;br /&gt;
|Used in Bphsc for compound shapes&lt;br /&gt;
|-&lt;br /&gt;
|SDFSurfaceOfRevolution&lt;br /&gt;
|16&lt;br /&gt;
|Shape created by the revolution of an up to 16 point 2d curve around a radius.&lt;br /&gt;
|-&lt;br /&gt;
|SDFHeightField&lt;br /&gt;
|17&lt;br /&gt;
|Height field for dynamic modification at runtime&lt;br /&gt;
|-&lt;br /&gt;
|Dummy&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ShapeType Enum (official, from Nintendo Switch Online: Playtest Program)&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Sphere&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Capsule&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Polytope&lt;br /&gt;
|2&lt;br /&gt;
|A shape created out of an array of up to 255 vertices. Must be convex.&lt;br /&gt;
|-&lt;br /&gt;
|Box&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cylinder&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cone&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CharacterPrism&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Compound&lt;br /&gt;
|7&lt;br /&gt;
|&amp;quot;Instances&amp;quot; shapes into a single &amp;quot;compound&amp;quot; from a set of shapes&lt;br /&gt;
|-&lt;br /&gt;
|Mesh&lt;br /&gt;
|8&lt;br /&gt;
|A shape created from the mesh of a Bphsh file&lt;br /&gt;
|-&lt;br /&gt;
|SDFHeightField&lt;br /&gt;
|9&lt;br /&gt;
|Height field for dynamic modification at runtime&lt;br /&gt;
|-&lt;br /&gt;
|HeightField&lt;br /&gt;
|10&lt;br /&gt;
|Base class for all height fields&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldBox&lt;br /&gt;
|11&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldSphere&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldCylinder&lt;br /&gt;
|13&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldQuadrant&lt;br /&gt;
|14&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|15&lt;br /&gt;
|Used in Bphsc for compound shapes&lt;br /&gt;
|-&lt;br /&gt;
|SDFSurfaceOfRevolution&lt;br /&gt;
|16&lt;br /&gt;
|Shape created by the revolution of an up to 16 point 2d curve around a radius.&lt;br /&gt;
|-&lt;br /&gt;
|Breakable&lt;br /&gt;
|17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Dummy&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ConstraintController ===&lt;br /&gt;
&lt;br /&gt;
=== Constraint ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Constraint types (unofficial table)&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|BallAndSocket&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CogWheel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fixed&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeSlider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hinge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pulley&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RackAndPinion&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Slider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SpringDamper&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Placement ===&lt;br /&gt;
&lt;br /&gt;
=== StaticCompoundController ===&lt;br /&gt;
&lt;br /&gt;
=== Extension ===&lt;br /&gt;
&lt;br /&gt;
==== RopeExtension ====&lt;br /&gt;
&lt;br /&gt;
==== PhiveEntityControlExtension ====&lt;br /&gt;
&lt;br /&gt;
==== InteractiveWaterControllerExtension ====&lt;br /&gt;
&lt;br /&gt;
=== GraphicsControllerSet ===&lt;br /&gt;
This is a sub controller set of phive::ControllerSet responsible for physics controllers used for graphical effects.&lt;br /&gt;
&lt;br /&gt;
=== LookingController ===&lt;br /&gt;
&lt;br /&gt;
=== LookIKController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTextureScrollController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTexturePatternController ===&lt;br /&gt;
&lt;br /&gt;
=== HelperBone ===&lt;br /&gt;
&lt;br /&gt;
=== Cloth ===&lt;br /&gt;
&lt;br /&gt;
=== RagdollStructure ===&lt;br /&gt;
&lt;br /&gt;
=== FishBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== TailBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== FootIK ===&lt;br /&gt;
&lt;br /&gt;
=== HandIK ===&lt;br /&gt;
&lt;br /&gt;
=== SnakeIK ===&lt;br /&gt;
&lt;br /&gt;
=== BoneModifier ===&lt;br /&gt;
&lt;br /&gt;
=== ModelController ===&lt;br /&gt;
&lt;br /&gt;
=== NavMeshCharacter ===&lt;br /&gt;
[[Category:Software stack]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bfres&amp;diff=134</id>
		<title>Bfres</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bfres&amp;diff=134"/>
		<updated>2025-02-21T21:56:27Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add partial section order. Meshlet correction.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A bfres file collects a number of 3d-graphics related resources. This article details bfres version 10.0.0 and 10.2.0.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
Note this omits optional sections not currently found in at least one file. Such as the placement of user data in animations.&lt;br /&gt;
&lt;br /&gt;
==== Section Order ====&lt;br /&gt;
&lt;br /&gt;
* fres header&lt;br /&gt;
* fmdl header array&lt;br /&gt;
* fska header array&lt;br /&gt;
* fmaa header array&lt;br /&gt;
* fvbs header array&lt;br /&gt;
* fsha header array&lt;br /&gt;
* fscn header array&lt;br /&gt;
* memory pool info&lt;br /&gt;
* embed file array&lt;br /&gt;
* fmdl dictionary&lt;br /&gt;
* fska dictionary&lt;br /&gt;
* fmaa dictionary&lt;br /&gt;
* fvbs dictionary&lt;br /&gt;
* fsha dictionary&lt;br /&gt;
* fscn dictionary&lt;br /&gt;
* embed file dictionary&lt;br /&gt;
* fmdl data array:&lt;br /&gt;
** fvtx header array&lt;br /&gt;
** fmat header array&lt;br /&gt;
** reflection header array&lt;br /&gt;
** fshp header array&lt;br /&gt;
** fskl header&lt;br /&gt;
** fskl data:&lt;br /&gt;
*** bone header array&lt;br /&gt;
*** skin bone index table&lt;br /&gt;
*** inverse transform matrix array&lt;br /&gt;
*** mirror bone index table&lt;br /&gt;
*** bone dictionary&lt;br /&gt;
*** bone data array:&lt;br /&gt;
**** user data array&lt;br /&gt;
**** user data dictionary&lt;br /&gt;
**** user data&lt;br /&gt;
** shape dictionary&lt;br /&gt;
** material dictionary&lt;br /&gt;
** fshp data array:&lt;br /&gt;
*** mesh array&lt;br /&gt;
*** skin bone index array&lt;br /&gt;
*** bounding box array&lt;br /&gt;
*** bounding sphere array&lt;br /&gt;
*** mesh data array:&lt;br /&gt;
**** sub mesh array&lt;br /&gt;
**** runtime index buffer memory&lt;br /&gt;
**** index buffer info&lt;br /&gt;
** fvtx data array:&lt;br /&gt;
*** vertex attribute array&lt;br /&gt;
*** runtime vertex buffer memory array&lt;br /&gt;
*** vertex buffer info array&lt;br /&gt;
*** vertex buffer stride info array&lt;br /&gt;
*** runtime user vertex buffer pointer array&lt;br /&gt;
*** vertex attribute dictionary&lt;br /&gt;
** fmat data array:&lt;br /&gt;
*** render info value string array&lt;br /&gt;
*** render info value s32 array&lt;br /&gt;
*** render info value float array&lt;br /&gt;
*** render info value count array&lt;br /&gt;
*** render info value offset array&lt;br /&gt;
*** runtime texture view pointer array&lt;br /&gt;
*** sampler info array&lt;br /&gt;
*** runtime sampler array&lt;br /&gt;
*** shader param value array&lt;br /&gt;
*** runtime shader param uniform buffer offset array&lt;br /&gt;
*** shader param convert flag array&lt;br /&gt;
*** user data array&lt;br /&gt;
*** runtime sampler descriptor slot array&lt;br /&gt;
*** runtime texture view descriptor slot array&lt;br /&gt;
*** texture name array&lt;br /&gt;
*** static shader variation header&lt;br /&gt;
*** static shader variation data:&lt;br /&gt;
**** vertex attribute name array&lt;br /&gt;
**** vertex attribute variation to reflection array (only if different)&lt;br /&gt;
**** vertex attribute reflection to variation array (only if different)&lt;br /&gt;
**** sampler name array&lt;br /&gt;
**** sampler variation to reflection array (only if different)&lt;br /&gt;
**** sampler reflection to variation array (only if different)&lt;br /&gt;
**** static shader bool array&lt;br /&gt;
**** static shader string array&lt;br /&gt;
**** static shader option variation to reflection index array (only if different)&lt;br /&gt;
**** static shader option reflection to variation index array (only if different)&lt;br /&gt;
*** user data&lt;br /&gt;
*** sampler dictionary&lt;br /&gt;
*** user data dictionary&lt;br /&gt;
** reflection data array:&lt;br /&gt;
*** render info array&lt;br /&gt;
*** shader param array&lt;br /&gt;
*** shader param dictionary (deduplicated between reflections)&lt;br /&gt;
*** render info dictionary (deduplicated between reflections)&lt;br /&gt;
*** vertex attribute dictionary (deduplicated between reflections)&lt;br /&gt;
*** sampler dictionary (deduplicated between reflections)&lt;br /&gt;
*** static shader option dictionary (deduplicated between reflections)&lt;br /&gt;
* fska data array:&lt;br /&gt;
** fast bind table&lt;br /&gt;
** bone anim header array&lt;br /&gt;
** bone anim data array:&lt;br /&gt;
*** default result&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
* fvba data array:&lt;br /&gt;
** default result array&lt;br /&gt;
** fast bind array&lt;br /&gt;
** bone name array&lt;br /&gt;
** anim curve header array&lt;br /&gt;
** anim curve frame and value data array&lt;br /&gt;
* fmaa data array:&lt;br /&gt;
** fast bind array&lt;br /&gt;
** per material anim header array&lt;br /&gt;
** runtime texture view descriptor slot array&lt;br /&gt;
** runtime texture view pointer array&lt;br /&gt;
** texture name array&lt;br /&gt;
** per material anim data array:&lt;br /&gt;
*** shader param anim array&lt;br /&gt;
*** texture pattern anim array&lt;br /&gt;
*** constant array&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
* fsha data array:&lt;br /&gt;
** fast bind table&lt;br /&gt;
** vertex shape anim header array&lt;br /&gt;
** vertex shape anim data array:&lt;br /&gt;
*** key shape anim array&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** default result array&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
* fscn data array:&lt;br /&gt;
** fcam header array&lt;br /&gt;
** flit header array&lt;br /&gt;
** ffog header array&lt;br /&gt;
** fcam dictionary&lt;br /&gt;
** flit dictionary&lt;br /&gt;
** ffog dictionary&lt;br /&gt;
** fcam data array:&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** default result&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
** flit data array:&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** default result&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
** ffog data array:&lt;br /&gt;
*** anim curve header array&lt;br /&gt;
*** default result&lt;br /&gt;
*** anim curve frame and value data array&lt;br /&gt;
* string pool&lt;br /&gt;
* gpu region:&lt;br /&gt;
** index buffer data&lt;br /&gt;
** vertex buffer data&lt;br /&gt;
* runtime memory pool&lt;br /&gt;
* embed file region&lt;br /&gt;
* relocation table&lt;br /&gt;
&lt;br /&gt;
=== Header (nn::g3d2::ResFile) ===&lt;br /&gt;
A bfres file header collects a number of optional resources that can be iterated through by array or looked up by name through dictionary. Resources include 3d model data, model animation data, scene animation data, and embedded files. A Bfres can contain a &amp;quot;GPU region&amp;quot;, a block of memory meant to be made GPU visible, or reference an external GPU region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x20&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryFileHeader|nn::util::BinaryFileHeader]]&lt;br /&gt;
|Base header with magic of &amp;quot;FRES   &amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|File name&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResModel *&lt;br /&gt;
|Model array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Model dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|void*[4]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSkeletalAnim *&lt;br /&gt;
|Skeletal animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Skeletal animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMaterialAnim *&lt;br /&gt;
|Material animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Material animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBoneVisibilityAnim *&lt;br /&gt;
|Bone visibility animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Bone visibility animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShapeAnim *&lt;br /&gt;
|Shape animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Shape animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSceneAnim *&lt;br /&gt;
|Scene animation array&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Scene animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0xa8&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|Runtime MemoryPool (set by g3d)&lt;br /&gt;
|-&lt;br /&gt;
|0xb0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::MemoryPoolInfo|nn::gfx::MemoryPoolInfo]]&lt;br /&gt;
|Pre-initialized MemoryPool info pointing to GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0xb8&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::ResEmbedFile|nn::gfx::ResEmbedFile]] *&lt;br /&gt;
|Embed file array&lt;br /&gt;
|-&lt;br /&gt;
|0xc0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Embed file dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0xc8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|User pointer in EPD software. (possibly a UI tree in nn::ui?)&lt;br /&gt;
|-&lt;br /&gt;
|0xd0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xd8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xdc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Model array count&lt;br /&gt;
|-&lt;br /&gt;
|0xde&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Skeletal animation array count&lt;br /&gt;
|-&lt;br /&gt;
|0xe4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material animation array count&lt;br /&gt;
|-&lt;br /&gt;
|0xe6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Bone visibility animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xe8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shape animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xea&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Scene animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xec&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Embed file count&lt;br /&gt;
|-&lt;br /&gt;
|0xee&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Model (nn::g3d2::ResModel) ===&lt;br /&gt;
A model represents a collection of 3d shape data, material data, and a skeleton.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic, always &amp;quot;FMDL&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Model name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSkeleton*&lt;br /&gt;
|Skeleton&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertex*&lt;br /&gt;
|Vertex array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShape*&lt;br /&gt;
|Shape array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Shape dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMaterial*&lt;br /&gt;
|Material array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Material dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderReflection*&lt;br /&gt;
|Shader reflection array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x8&lt;br /&gt;
|Gfx User Data*&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Vertex count&lt;br /&gt;
|-&lt;br /&gt;
|0x6a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shape count&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material count&lt;br /&gt;
|-&lt;br /&gt;
|0x6e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader reflection count&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|User data count&lt;br /&gt;
|-&lt;br /&gt;
|0x72&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vertex (nn::g3d2::ResVertex) ====&lt;br /&gt;
A ResVertex references a collection of vertex buffers in the GPU region. Reflection and settings are provided for the vertex buffers and attributes. Runtime object memory is provided to initialize graphics api objects for the vertex buffers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FVTX&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertexAttribute*&lt;br /&gt;
|Vertex atribute array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Vertex attribute dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime memory pool pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime vertex buffer array (0x48 bytes of zeroed memory per vertex buffer)&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|void **&lt;br /&gt;
|Runtime user vertex buffer array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Vertex buffer info array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertexBufferStride*&lt;br /&gt;
|Vertex buffer stride array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base offset of vertex data in GPU region, relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x4d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex buffer count&lt;br /&gt;
|-&lt;br /&gt;
|0x4e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Vertex count&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Alignment of vertex buffer data in GPU region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResVertexAttribute =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Attribute name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::AttributeFormat&lt;br /&gt;
|Attribute format&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Buffer offset&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Buffer index&lt;br /&gt;
|-&lt;br /&gt;
|0xf&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Indicates whether this is a dynamic vertex attribute for shape blending&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResVertexBufferStride =====&lt;br /&gt;
Unused bytes might indicate nn::gfx::VertexBufferInfo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Stride&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Divisor&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Shape (nn::g3d2::ResShape) ====&lt;br /&gt;
A shape represents 3d mesh data. Either via a set of level-of-detail meshes into the vertex buffers of a ResVertex, or alternatively in v10.2.0 onwards, a set of meshlet buffers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FSHP&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shape name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertex*&lt;br /&gt;
|Referenced vertex&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMesh* or ResMeshlet*&lt;br /&gt;
|Level-of-detail mesh array, or if flags bit 4 is set, a ResMeshlet&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Skinning bone index array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResKeyShape*&lt;br /&gt;
|Key shape array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Key shape dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBounding*&lt;br /&gt;
|Bounding box array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBoundingSphere*&lt;br /&gt;
|Bounding sphere array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0x52&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material index&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base bone index&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Vertex index&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Skin bone index count&lt;br /&gt;
|-&lt;br /&gt;
|0x5a&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex skin weight count&lt;br /&gt;
|-&lt;br /&gt;
|0x5b&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Mesh count&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Key shape count&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Target attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x5e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResMesh =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSubMeshRange*&lt;br /&gt;
|Array of sub mesh ranges&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime memory pool pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime index buffer memory (0x48 bytes of zeroed memory)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Index buffer info&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset of index buffer in GPU region relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::PrimitiveTopology&lt;br /&gt;
|Primitive topology to use for drawing commands&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::IndexFormat&lt;br /&gt;
|Index format to use in drawing commands&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Index count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base vertex&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Sub mesh count&lt;br /&gt;
|-&lt;br /&gt;
|0x36&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== ResSubMeshRange ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset of sub mesh relative to start of index buffer&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Index count of sub mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResKeyShape =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x12&lt;br /&gt;
|u8[18]&lt;br /&gt;
|Relative key shape attribute location array&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u8[2]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResBounding =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Extent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResBoundingSphere =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Radius&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResMeshlet =====&lt;br /&gt;
Currently only observed unused in Nintendo Switch Online: Playtest Program.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime meshlet buffer array (0x48 bytes of zeroed memory per meshlet buffer)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Meshlet buffer info array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|s64 *&lt;br /&gt;
|Meshlet buffer memory offset array, each entry relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x24&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Meshlet buffer count&lt;br /&gt;
|-&lt;br /&gt;
|0x45&lt;br /&gt;
|0x3&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Shader Reflection ====&lt;br /&gt;
A ResShaderReflection provides reflection for resolving material parameter data for a shader inside a bfsha shader archive.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader archive name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResRenderInfo*&lt;br /&gt;
|Render info array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Render info dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderParam*&lt;br /&gt;
|Material shader parameter array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Material shader parameter dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Vertex attribute dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Sampler dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Static shader option dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Render info count&lt;br /&gt;
|-&lt;br /&gt;
|0x4a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter data size&lt;br /&gt;
|-&lt;br /&gt;
|0x4e&lt;br /&gt;
|0xa&lt;br /&gt;
|u8[10]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResRenderInfo =====&lt;br /&gt;
Render info provides reflection for CPU-side rendering parameters.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Render info name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Render info data type&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x7&lt;br /&gt;
|u8[7]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Render info data type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Int&lt;br /&gt;
|0&lt;br /&gt;
|Value is a 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|1&lt;br /&gt;
|Value is a 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|2&lt;br /&gt;
|Value is an NW string pointer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResShaderParam =====&lt;br /&gt;
ResShaderParam&#039;s compose a user generated structure layout for a material uniform buffer. Shader parameters can be animated through material animations.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|u32(*)(void*,const void*,ResShaderParam*, void*)&lt;br /&gt;
|Runtime conversion function for data types requiring runtime conversion of a CPU representation to a GPU representation&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader parameter name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter offset&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Shader parameter data type&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x5&lt;br /&gt;
|u8[5]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Shader parameter data type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Bool&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool2&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool3&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool4&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int2&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int3&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int4&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt2&lt;br /&gt;
|9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt3&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt4&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float2&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float3&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float4&lt;br /&gt;
|15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x2&lt;br /&gt;
|17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x3&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x4&lt;br /&gt;
|19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x2&lt;br /&gt;
|20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x3&lt;br /&gt;
|21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x4&lt;br /&gt;
|22&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x2&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x3&lt;br /&gt;
|24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x4&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Srt2d&lt;br /&gt;
|26&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Srt3d&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SrtTexture&lt;br /&gt;
|28&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material (nn::g3d2::ResMaterial) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FMAT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Flags (bit 0 = is visible)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Material name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResStaticShaderVariation*&lt;br /&gt;
|Static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|void**&lt;br /&gt;
|Runtime texture view pointer array&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Texture name array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Runtime sampler array (0x78 bytes of zeroed memory per sampler)&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::SamplerInfo*&lt;br /&gt;
|Sampler info array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Sampler dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Render info value array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Render info value count array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Render info value offset array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Shader parameter value array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|s32*&lt;br /&gt;
|Runtime shader parameter material uniform buffer offset array&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Gfx user data*&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|u32 *&lt;br /&gt;
|Shader parameter runtime convert bit array&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|u64*&lt;br /&gt;
|Runtime sampler descriptor slot array&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|u64*&lt;br /&gt;
|Runtime texture view descriptor slot array&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0xa2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Sampler count&lt;br /&gt;
|-&lt;br /&gt;
|0xa3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Texture count&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Is force calculate material&lt;br /&gt;
|-&lt;br /&gt;
|0xa6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|User data count&lt;br /&gt;
|-&lt;br /&gt;
|0xa8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Render info value size&lt;br /&gt;
|-&lt;br /&gt;
|0xaa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Runtime material uniform buffer size&lt;br /&gt;
|-&lt;br /&gt;
|0xac&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResStaticShaderVariation =====&lt;br /&gt;
A material references a ResStaticShaderVariation which selects the material&#039;s static shader variation out of the shader referenced by a ResShaderReflection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderReflection*&lt;br /&gt;
|Shader reflection&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Vertex attribute name array, of those used in this specific static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|u8*&lt;br /&gt;
|Vertex attribute index array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Sampler name array, of those used in this specific static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|u8*&lt;br /&gt;
|Sampler index array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|u32*&lt;br /&gt;
|Static shader option choice packed bool array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Static shader option choice string array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Static shader option index array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x45&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Sampler count&lt;br /&gt;
|-&lt;br /&gt;
|0x46&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Static shader option bool count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Total static shader option count&lt;br /&gt;
|-&lt;br /&gt;
|0x4a&lt;br /&gt;
|0x6&lt;br /&gt;
|u8[6]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=133</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=133"/>
		<updated>2025-02-11T23:33:55Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Update &amp;quot;precondition&amp;quot; to &amp;quot;query&amp;quot; and &amp;quot;internal&amp;quot; to &amp;quot;property&amp;quot; based on terminology found in NSO Playtest.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format implementing behavior trees for game-specific code. At time of writing it has only appeared in titles on the ModuleSystem game engine. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom,&#039;&#039; &#039;&#039;Super Mario Bros. Wonder, Mario vs Donkey Kong,&#039;&#039; and &#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039; (v0x407). An older version appears in &#039;&#039;Nintendo Switch Sports&#039;&#039; and &#039;&#039;Splatoon 3&#039;&#039; (v0x404). ModuleSystem provides 3 built-in file categories that appear in their own dedicated folders in a title&#039;s romfs, being &amp;quot;AI&amp;quot; for actor behavior, &amp;quot;Logic&amp;quot; for actor ai group behavior, and &amp;quot;Sequence&amp;quot; for scene behavior, individual games are free to create their own file categories.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
AINB is little endian. An AINB file defines a set of commands to evaluate a tree of built-in or game-specific node classes. The built-in &amp;quot;Element_ModuleCaller&amp;quot; node and supporting structures allow a &amp;quot;root&amp;quot; AINB file to call out to an external &amp;quot;module&amp;quot; AINB file, module&#039;s can call further modules, allowing AINB files to form a tree of tree&#039;s. An AINB&#039;s file extension typically designates whether it is a root &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; or module &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to query nodes will use their query node index which is local to the amount of query nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible data types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
==== Section Order ====&lt;br /&gt;
&lt;br /&gt;
# 0x74-Byte File Header&lt;br /&gt;
# Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Property Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Parameters&lt;br /&gt;
# Active Node Update Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Query Node Array&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
=== Sections ===&lt;br /&gt;
&lt;br /&gt;
==== File Header ====&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0407 in &#039;&#039;TotK&#039;&#039;, 0x0404 in &#039;&#039;S3&#039;&#039; and &#039;&#039;NSS&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Query Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Property Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Active Node Update Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Input/Output Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Multi-Parameters Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Index Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Binary Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Query Node Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Active Node Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB Modules Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category (0 = AI, 1 = Logic, 2 = Sequence) (&#039;&#039;Splatoon 3&#039;&#039; game specific, 3 = UniqueSequenceSPL)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|External Action Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Identification Hashes Offset (Purpose Unknown)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Command Array ====&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Name Offset&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x04&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Main Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Secondary Node Index (value offset by 1, 0 is reserved)&lt;br /&gt;
|}&lt;br /&gt;
Command GUIDs are only used for debug messages. Right Node Index will be -1 if the command only has one child node.&lt;br /&gt;
&lt;br /&gt;
==== Node Array ====&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Type Enum (see below)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Parameters Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Node Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Type Name Offset (for UserDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407 only)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Param Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Query Node&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x2C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|UserDefined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Node type names are official. For UserDefined nodes, node definitions can be found in a node definition files. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Query Node&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Node&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|MultiParam Type 2&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Local Blackboard Parameters ====&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Node Bodies ====&lt;br /&gt;
Each node body is composed of two parts: a 0x90 byte parameter section and a 0x14 child node section header followed by said section if applicable. The child node section contains information about the child node and specific connection types. The following parameter indices are indices into the parameter array for that specific type and data type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x7C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Active Node Update Count&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Active Node Update Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|}&lt;br /&gt;
If the node has any child nodes, the section header is followed by an array of u32 offsets to each of the child node entries. For most nodes, each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string offset to the parameter name. For standard connections, the value is a string offset to the connection name. For active node update connections, the value is an index into the active node update array. Certain node/connection types will also extend the entry length. Selector-type nodes excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; will have an extra four bytes which stores the condition for to link to the child node. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a u32 string offset. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the local blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child node entry for Selector-type nodes is the default case. The condition for this case is either a string offset to the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input nodes that are Selector-type nodes also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; have an additional eight bytes per input node (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
==== Attachment Parameters ====&lt;br /&gt;
This section contains an array of attachments for nodes. This section is preceded by the attachment index array which is an array of u32 indices into the entries in this section. Nodes contain an index into the index array rather than directly into this section. The section contains an array of entries followed by an array of parameter entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Attachment Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x0407 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Property Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Property Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Property Parameters ====&lt;br /&gt;
This section contains an array of property parameters for nodes. The section begins with a six u32 relative offsets to the first entry for each data type. The data type order for this section is int, bool, float, string, vector3f, and pointer.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The value is an immediate value for the data type (excluding string which is a string offset and pointer which doesn&#039;t store a value). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the flags to offset 0x08.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
This section contains an array of input and output parameter entries. These appear to be canonically referred to as &amp;quot;plugs&amp;quot;. Similarly to the property parameters section, the section begins with u32 relative offsets to the first entry of each data type. However, instead of six offsets, there are 12 - two for each data type (one input, one output). The order of parameters in this section is int input, int output, bool input, bool output, float intput, float output, string input, string output, vector3f input, vector3f output, pointer input, and pointer output.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Input Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input Child Node Index / Multi-Parameter Array Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input/Output Source Node Index / Multi-Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Default Value&lt;br /&gt;
|}&lt;br /&gt;
The default value is an immediate value for the data type (excluding string which is a string offset and pointer which is always an empty four bytes). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the rest of the entry back by four bytes. If the input child node index is between -32768 and -100, it corresponds to a multi-parameter array index. The multi-parameter index can be calculated as follows: &amp;lt;code&amp;gt;MultiParamIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Each output parameter entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Output Parameter Entry&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
This section contains entries specifying parameters that have multiple values and the sources of those values. Each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input/Output Source Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Active Node Update Array ====&lt;br /&gt;
This section is an array of entries for updates to the active node array. The first four bytes specify the number of entries. Each entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Calc&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). Otherwise, the entry is considered valid if the first byte equals 1. When processing a node graph, the game maintains an array of active root nodes. When a command calculated, the root node of the command is added to this array and it and its child nodes are calculated recursively. An active node update will change the current active root node to the specified node. This usually happens right before the next command&#039;s calculation occurs, but if the top bit is set, then it will occur immediately after the current command&#039;s calculation finishes (if the source node is an Element_Join nodes, it will always update the active node post current command calculation). This is primarily used for &amp;quot;subroutines&amp;quot; that run a single time then return to the main execution routine. This system is also used for Element_Fork and Element_Join nodes. An Element_Fork node, unlike normal nodes, will replace the entire current active node array with its array of active node updates (essentially forking execution into multiple different paths). The node at the end of each of these paths will optionally also have an active node update referencing a specific Element_Join node. Each of these nodes will push the Element_Join into the active node array. However, Element_Join nodes have an property parameter called InFlowNum and until it has been pushed onto the array that many times in a single calculation, it will not activate and remain dormant. However, once this threshold is reached, it will begin execution (with a guard to make sure only one of the instances added to the array will execute).&lt;br /&gt;
&lt;br /&gt;
==== 0x50 Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Query Node Array ====&lt;br /&gt;
This section is an array of entries of query nodes present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Query Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Query Node Index (local to number of query nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Expression Binary Section ====&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
==== AINB Modules ====&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== External Action Array ====&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== File Hashes ====&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. The purpose of these hashes is unclear.&lt;br /&gt;
&lt;br /&gt;
==== Child Replacement Table ====&lt;br /&gt;
This section is used to remove or replace specific nodes or attachments at runtime. This is used to toggle of debug nodes/attachments for release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child node, 1 = replace child node, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index/Attachment Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Node Index (for child node replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x6C Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Enum Resolve Array ====&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String Pool ====&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=132</id>
		<title>Common nn::gfx</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=132"/>
		<updated>2025-02-08T23:31:58Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Correction to GpuAccessFlags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Structures and enums from nn::gfx appearing across nn::gfx file formats and nn::g3d file formats. Notably the nn::gfx formats [[Bnsh]] and [[Bntx]], as well as nn::g3d [[Bfres]].&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolFlags ===&lt;br /&gt;
Flags denoting how a memory pool can be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CpuNoAccess&lt;br /&gt;
|0x1 (1 &amp;lt;&amp;lt; 0)&lt;br /&gt;
|Memory is unable to be mapped to CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuUncached&lt;br /&gt;
|0x2 (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
|Memory is coherent on CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuCached&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Memory is cached on CPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuNoAccess&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Memory is unable to be read by the GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuUncached&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Memory is coherent on GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuCached&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Memory is cached on GPU&lt;br /&gt;
|-&lt;br /&gt;
|ShaderCode&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Memory is shader code for the GPU&lt;br /&gt;
|-&lt;br /&gt;
|Compressible&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Physical&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Virtual&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::MemoryPoolFlags)&lt;br /&gt;
|MemoryPool flags&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 &lt;br /&gt;
|Memory size&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Memory pointer (must be 0x1000 aka page aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::GpuAccessFlags ===&lt;br /&gt;
Flags denoting how a buffer or texture will be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|VertexBuffer&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Vertex buffer&lt;br /&gt;
|-&lt;br /&gt;
|IndexBuffer&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Index buffer&lt;br /&gt;
|-&lt;br /&gt;
|UniformBuffer&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Uniform buffer&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Texture&lt;br /&gt;
|-&lt;br /&gt;
|StorageBuffer&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Storage buffer&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetColor&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|For render target colors&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetDepth&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|For render target depths&lt;br /&gt;
|-&lt;br /&gt;
|IndirectDraw&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|For indirect draw commands&lt;br /&gt;
|-&lt;br /&gt;
|DisplayTexture&lt;br /&gt;
|0x400 (1 &amp;lt;&amp;lt; 10)&lt;br /&gt;
|For present&lt;br /&gt;
|-&lt;br /&gt;
|Counter&lt;br /&gt;
|0x800 (1 &amp;lt;&amp;lt; 11)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BufferInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Buffer size&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|GPU access flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx:::ImageStorageDimension ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Type1D&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type2D&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type3D&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TileMode (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Optimal&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ChannelFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1&lt;br /&gt;
|0x1a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H&lt;br /&gt;
|0x1f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4x4&lt;br /&gt;
|0x2d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x4&lt;br /&gt;
|0x2e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x5&lt;br /&gt;
|0x2f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x5&lt;br /&gt;
|0x30&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x6&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x5&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x6&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x8&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x5&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x6&lt;br /&gt;
|0x26&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x8&lt;br /&gt;
|0x37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x10&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x10&lt;br /&gt;
|0x39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x12&lt;br /&gt;
|0x3a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1&lt;br /&gt;
|0x3b&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TypeFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Unorm&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Snorm&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SInt&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SRGB&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Depth&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UScaled&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SScaled&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UFloat&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ImageFormat ===&lt;br /&gt;
Image formats are formed by a ChannelFormat and a TypeFormat. ImageFormat = (ChannelFormat &amp;lt;&amp;lt; 8) | TypeFormat&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|R8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Z16_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F_SharedFloat&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32F_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_SF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_UF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0:0&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Packaged Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:1&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse Binding&lt;br /&gt;
|-&lt;br /&gt;
|0x0:2&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse&lt;br /&gt;
|-&lt;br /&gt;
|0x0:3&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is ResTexture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:4&lt;br /&gt;
|4 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Storage dimension (nn::gfx::ImageStorageDimension)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Tile mode (nn::gfx::TileMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Swizzle (???)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Mip levels&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Sample count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Image format (nn::gfx::ImageFormat)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Gpu access flags (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Depth&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Array layers&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Packaged texture layout (???)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureAddressMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Repeat&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorRepeat&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToEdge&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToBorder&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorClampToBorder&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ComparisonFunction ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Never&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThan&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equal&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreateThan&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NotEqual&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Always&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BorderColor (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|White&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TransparentBlack&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MipMapFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MagFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MinFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ReductionFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Average&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Min&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Max&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::SamplerInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode U (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode V (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode W (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|CompareOp (nn::gfx::ComparisonFunction)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Border color (nn::gfx::BorderColor)&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:0&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|MipMap filter (nn::gfx::MipMapFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:2&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Mag filter (nn::gfx::MagFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:4&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Min filter (nn::gfx::MinFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:6&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:7&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable CompareOp&lt;br /&gt;
|-&lt;br /&gt;
|0x6:8&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reduction filter (nn::gfx::ReductionFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:a&lt;br /&gt;
|6 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp min&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod bias&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx Embed File ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Offset to file&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of file&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data Type ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Byte&lt;br /&gt;
|0x3&lt;br /&gt;
|Used for arbitrary binary data (other files)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char *&lt;br /&gt;
|User data name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|User data (can be nullptr)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|s32&lt;br /&gt;
|User data entries&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|User Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x2b&lt;br /&gt;
|u8[0x2b]&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bfres&amp;diff=131</id>
		<title>Bfres</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bfres&amp;diff=131"/>
		<updated>2025-02-08T20:40:33Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add some information on models, shapes, and materials.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A bfres file collects a number of 3d-graphics related resources. This article details bfres version 10.0.0 and 10.2.0.&lt;br /&gt;
&lt;br /&gt;
=== Header (nn::g3d2::ResFile) ===&lt;br /&gt;
A bfres file header collects a number of optional resources that can be iterated through by array or looked up by name through dictionary. Resources include 3d model data, model animation data, scene animation data, and embedded files. A Bfres can contain a &amp;quot;GPU region&amp;quot;, a block of memory meant to be made GPU visible, or reference an external GPU region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x20&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryFileHeader|nn::util::BinaryFileHeader]]&lt;br /&gt;
|Base header with magic of &amp;quot;FRES   &amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|File name&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResModel *&lt;br /&gt;
|Model array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Model dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|void*[4]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSkeletalAnim *&lt;br /&gt;
|Skeletal animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Skeletal animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMaterialAnim *&lt;br /&gt;
|Material animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Material animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBoneVisibilityAnim *&lt;br /&gt;
|Bone visibility animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Bone visibility animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShapeAnim *&lt;br /&gt;
|Shape animation array&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Shape animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSceneAnim *&lt;br /&gt;
|Scene animation array&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Scene animation dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0xa8&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|Runtime MemoryPool (set by g3d)&lt;br /&gt;
|-&lt;br /&gt;
|0xb0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::MemoryPoolInfo|nn::gfx::MemoryPoolInfo]]&lt;br /&gt;
|Pre-initialized MemoryPool info pointing to GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0xb8&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::ResEmbedFile|nn::gfx::ResEmbedFile]] *&lt;br /&gt;
|Embed file array&lt;br /&gt;
|-&lt;br /&gt;
|0xc0&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Embed file dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0xc8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|User pointer in EPD software. (possibly a UI tree in nn::ui?)&lt;br /&gt;
|-&lt;br /&gt;
|0xd0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xd8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xdc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Model array count&lt;br /&gt;
|-&lt;br /&gt;
|0xde&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xe2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Skeletal animation array count&lt;br /&gt;
|-&lt;br /&gt;
|0xe4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material animation array count&lt;br /&gt;
|-&lt;br /&gt;
|0xe6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Bone visibility animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xe8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shape animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xea&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Scene animation count&lt;br /&gt;
|-&lt;br /&gt;
|0xec&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Embed file count&lt;br /&gt;
|-&lt;br /&gt;
|0xee&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Model (nn::g3d2::ResModel) ===&lt;br /&gt;
A model represents a collection of 3d shape data, material data, and a skeleton.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic, always &amp;quot;FMDL&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Model name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSkeleton*&lt;br /&gt;
|Skeleton&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertex*&lt;br /&gt;
|Vertex array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShape*&lt;br /&gt;
|Shape array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Shape dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMaterial*&lt;br /&gt;
|Material array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Material dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderReflection*&lt;br /&gt;
|Shader reflection array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x8&lt;br /&gt;
|Gfx User Data*&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Vertex count&lt;br /&gt;
|-&lt;br /&gt;
|0x6a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shape count&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material count&lt;br /&gt;
|-&lt;br /&gt;
|0x6e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader reflection count&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|User data count&lt;br /&gt;
|-&lt;br /&gt;
|0x72&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Vertex (nn::g3d2::ResVertex) ====&lt;br /&gt;
A ResVertex references a collection of vertex buffers in the GPU region. Reflection and settings are provided for the vertex buffers and attributes. Runtime object memory is provided to initialize graphics api objects for the vertex buffers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FVTX&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertexAttribute*&lt;br /&gt;
|Vertex atribute array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Vertex attribute dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime memory pool pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime vertex buffer array (0x48 bytes of zeroed memory per vertex buffer)&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|void **&lt;br /&gt;
|Runtime user vertex buffer array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Vertex buffer info array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertexBufferStride*&lt;br /&gt;
|Vertex buffer stride array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base offset of vertex data in GPU region, relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x4d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex buffer count&lt;br /&gt;
|-&lt;br /&gt;
|0x4e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Vertex count&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Alignment of vertex buffer data in GPU region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResVertexAttribute =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Attribute name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::AttributeFormat&lt;br /&gt;
|Attribute format&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Buffer offset&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Buffer index&lt;br /&gt;
|-&lt;br /&gt;
|0xf&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Indicates whether this is a dynamic vertex attribute for shape blending&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResVertexBufferStride =====&lt;br /&gt;
Unused bytes might indicate nn::gfx::VertexBufferInfo.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Stride&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Divisor&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Shape (nn::g3d2::ResShape) ====&lt;br /&gt;
A shape represents 3d mesh data. Either via a set of level-of-detail meshes into the vertex buffers of a ResVertex, or alternatively in v10.2.0 onwards, a set of meshlet buffers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FSHP&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shape name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResVertex*&lt;br /&gt;
|Referenced vertex&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|ResMesh* or ResMeshlet*&lt;br /&gt;
|Level-of-detail mesh array, or if flags bit 4 is set, a ResMeshlet&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Skinning bone index array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|ResKeyShape*&lt;br /&gt;
|Key shape array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Key shape dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBounding*&lt;br /&gt;
|Bounding box array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|ResBoundingSphere*&lt;br /&gt;
|Bounding sphere array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0x52&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material index&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base bone index&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Vertex index&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Skin bone index count&lt;br /&gt;
|-&lt;br /&gt;
|0x5a&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex skin weight count&lt;br /&gt;
|-&lt;br /&gt;
|0x5b&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Mesh count&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Key shape count&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Target attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x5e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResMesh =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|ResSubMeshRange*&lt;br /&gt;
|Array of sub mesh ranges&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime memory pool pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime index buffer memory (0x48 bytes of zeroed memory)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Index buffer info&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset of index buffer in GPU region relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::PrimitiveTopology&lt;br /&gt;
|Primitive topology to use for drawing commands&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x4&lt;br /&gt;
|u32, nn::gfx::IndexFormat&lt;br /&gt;
|Index format to use in drawing commands&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Index count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Base vertex&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Sub mesh count&lt;br /&gt;
|-&lt;br /&gt;
|0x36&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== ResSubMeshRange ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Offset of sub mesh relative to start of index buffer&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Index count of sub mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResKeyShape =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x12&lt;br /&gt;
|u8[18]&lt;br /&gt;
|Relative key shape attribute location array&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u8[2]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResBounding =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Extent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResBoundingSphere =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0xc&lt;br /&gt;
|Float3&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Radius&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResMeshlet =====&lt;br /&gt;
Currently only observed unused in Nintendo Switch Online: Playtest Program.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Runtime meshlet buffer array (0x48 bytes of zeroed memory per meshlet buffer)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::BufferInfo*&lt;br /&gt;
|Meshlet buffer info array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|s64 *&lt;br /&gt;
|Meshlet buffer memory offset array, each entry relative to start of GPU region&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x24&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Meshlet buffer count&lt;br /&gt;
|-&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x3&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Shader Reflection ====&lt;br /&gt;
A ResShaderReflection provides reflection for resolving material parameter data for a shader inside a bfsha shader archive.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader archive name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResRenderInfo*&lt;br /&gt;
|Render info array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Render info dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderParam*&lt;br /&gt;
|Material shader parameter array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Material shader parameter dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Vertex attribute dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Sampler dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Static shader option dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Render info count&lt;br /&gt;
|-&lt;br /&gt;
|0x4a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter count&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter data size&lt;br /&gt;
|-&lt;br /&gt;
|0x4e&lt;br /&gt;
|0xa&lt;br /&gt;
|u8[10]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResRenderInfo =====&lt;br /&gt;
Render info provides reflection for CPU-side rendering parameters.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Render info name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Render info data type&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x7&lt;br /&gt;
|u8[7]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Render info data type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Int&lt;br /&gt;
|0&lt;br /&gt;
|Value is a 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|1&lt;br /&gt;
|Value is a 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|2&lt;br /&gt;
|Value is an NW string pointer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResShaderParam =====&lt;br /&gt;
ResShaderParam&#039;s compose a user generated structure layout for a material uniform buffer. Shader parameters can be animated through material animations.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|u32(*)(void*,const void*,ResShaderParam*, void*)&lt;br /&gt;
|Runtime conversion function for data types requiring runtime conversion of a CPU representation to a GPU representation&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Shader parameter name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Shader parameter offset&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Shader parameter data type&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x5&lt;br /&gt;
|u8[5]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Shader parameter data type ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Bool&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool2&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool3&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Bool4&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int2&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int3&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Int4&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt2&lt;br /&gt;
|9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt3&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt4&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float2&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float3&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float4&lt;br /&gt;
|15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x2&lt;br /&gt;
|17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x3&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix2x4&lt;br /&gt;
|19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x2&lt;br /&gt;
|20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x3&lt;br /&gt;
|21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix3x4&lt;br /&gt;
|22&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x2&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x3&lt;br /&gt;
|24&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matrix4x4&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Srt2d&lt;br /&gt;
|26&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Srt3d&lt;br /&gt;
|27&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SrtTexture&lt;br /&gt;
|28&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material (nn::g3d2::ResMaterial) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic &amp;quot;FMAT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Flags (bit 0 = is visible)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char* (NW)&lt;br /&gt;
|Material name&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|ResStaticShaderVariation*&lt;br /&gt;
|Static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|void**&lt;br /&gt;
|Runtime texture view pointer array&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Texture name array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Runtime sampler array (0x78 bytes of zeroed memory per sampler)&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::SamplerInfo*&lt;br /&gt;
|Sampler info array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|Sampler dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Render info value array&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Render info value count array&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Render info value offset array&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Shader parameter value array&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|s32*&lt;br /&gt;
|Shader parameter uniform buffer offset array&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|u64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Gfx user data*&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]]*&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|u32 *&lt;br /&gt;
|Shader parameter runtime convert bit array&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|void*&lt;br /&gt;
|Runtime user pointer&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|u64*&lt;br /&gt;
|Runtime sampler descriptor slot array&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|u64*&lt;br /&gt;
|Runtime texture view descriptor slot array&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Index of this section in parent ResModel&lt;br /&gt;
|-&lt;br /&gt;
|0xa2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Sampler count&lt;br /&gt;
|-&lt;br /&gt;
|0xa3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Texture count&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Is force calculate material&lt;br /&gt;
|-&lt;br /&gt;
|0xa6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|User data count&lt;br /&gt;
|-&lt;br /&gt;
|0xa8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Render info value size&lt;br /&gt;
|-&lt;br /&gt;
|0xaa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Runtime material uniform buffer size&lt;br /&gt;
|-&lt;br /&gt;
|0xac&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ResStaticShaderVariation =====&lt;br /&gt;
A material references a ResStaticShaderVariation which selects the material&#039;s static shader variation out of the shader referenced by a ResShaderReflection.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|ResShaderReflection*&lt;br /&gt;
|Shader reflection&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Vertex attribute name array, of those used in this specific static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|u8*&lt;br /&gt;
|Vertex attribute index array&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Sampler name array, of those used in this specific static shader variation&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|u8*&lt;br /&gt;
|Sampler index array&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|u32*&lt;br /&gt;
|Static shader option choice packed bool array&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x8&lt;br /&gt;
|const char** (NW)&lt;br /&gt;
|Static shader option choice string array&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x8&lt;br /&gt;
|u16*&lt;br /&gt;
|Static shader option index array&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Vertex attribute count&lt;br /&gt;
|-&lt;br /&gt;
|0x45&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Sampler count&lt;br /&gt;
|-&lt;br /&gt;
|0x46&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Static shader option bool count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Total static shader option count&lt;br /&gt;
|-&lt;br /&gt;
|0x4a&lt;br /&gt;
|0x6&lt;br /&gt;
|u8[6]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=130</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=130"/>
		<updated>2025-02-08T18:46:21Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Rewrite head of article to clarify information.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format implementing behavior trees for game-specific code. At time of writing it has only appeared in titles on the ModuleSystem game engine. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom,&#039;&#039; &#039;&#039;Super Mario Bros. Wonder, Mario vs Donkey Kong,&#039;&#039; and &#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039; (v0x407). An older version appears in &#039;&#039;Nintendo Switch Sports&#039;&#039; and &#039;&#039;Splatoon 3&#039;&#039; (v0x404). ModuleSystem provides 3 built-in file categories that appear in their own dedicated folders in a title&#039;s romfs, being &amp;quot;AI&amp;quot; for actor behavior, &amp;quot;Logic&amp;quot; for actor ai group behavior, and &amp;quot;Sequence&amp;quot; for scene behavior, individual games are free to create their own file categories.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
AINB is little endian. An AINB file defines a set of commands to evaluate a tree of built-in or game-specific node classes. The built-in &amp;quot;Element_ModuleCaller&amp;quot; node and supporting structures allow a &amp;quot;root&amp;quot; AINB file to call out to an external &amp;quot;module&amp;quot; AINB file, module&#039;s can call further modules, allowing AINB files to form a tree of tree&#039;s. An AINB&#039;s file extension typically designates whether it is a root &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; or module &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to precondition nodes will use their precondition node index which is local to the amount of precondition nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible data types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
==== Section Order ====&lt;br /&gt;
&lt;br /&gt;
# 0x74-Byte File Header&lt;br /&gt;
# Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Internal Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Parameters&lt;br /&gt;
# Active Node Update Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Precondition Nodes&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
=== Sections ===&lt;br /&gt;
&lt;br /&gt;
==== File Header ====&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0407 in &#039;&#039;TotK&#039;&#039;, 0x0404 in &#039;&#039;S3&#039;&#039; and &#039;&#039;NSS&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Precondition Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Internal Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Active Node Update Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Input/Output Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Multi-Parameters Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Index Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Binary Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Precondition Node Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Active Node Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB Modules Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category (0 = AI, 1 = Logic, 2 = Sequence) (&#039;&#039;Splatoon 3&#039;&#039; game specific, 3 = UniqueSequenceSPL)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|External Action Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Identification Hashes Offset (Purpose Unknown)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Command Array ====&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Name Offset&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x04&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right Node Index (one greater than the corresponding node index)&lt;br /&gt;
|}&lt;br /&gt;
Command GUIDs are only used for debug messages. Right Node Index will be -1 if the command only has one child node.&lt;br /&gt;
&lt;br /&gt;
==== Node Array ====&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Type Enum (see below)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Parameters Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Node Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Type Name Offset (for UserDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407 only)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Param Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Precondition Node&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Precondition Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x2C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|UserDefined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Node type names are official. For UserDefined nodes, node definitions can be found in a node definition files. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Active Node Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Precondition Node&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Node&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|MultiParam Type 2&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Local Blackboard Parameters ====&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Node Bodies ====&lt;br /&gt;
Each node body is composed of two parts: a 0x90 byte parameter section and a 0x14 child node section header followed by said section if applicable. The child node section contains information about the child node and specific connection types. The following parameter indices are indices into the parameter array for that specific type and data type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x7C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Active Node Update Count&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Active Node Update Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|}&lt;br /&gt;
If the node has any child nodes, the section header is followed by an array of u32 offsets to each of the child node entries. For most nodes, each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string offset to the parameter name. For standard connections, the value is a string offset to the connection name. For active node update connections, the value is an index into the active node update array. Certain node/connection types will also extend the entry length. Selector-type nodes excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; will have an extra four bytes which stores the condition for to link to the child node. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a u32 string offset. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the local blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child node entry for Selector-type nodes is the default case. The condition for this case is either a string offset to the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input nodes that are Selector-type nodes also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; have an additional eight bytes per input node (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
==== Attachment Parameters ====&lt;br /&gt;
This section contains an array of attachments for nodes. This section is preceded by the attachment index array which is an array of u32 indices into the entries in this section. Nodes contain an index into the index array rather than directly into this section. The section contains an array of entries followed by an array of parameter entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Attachment Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x0407 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Internal Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Internal Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Internal Parameters ====&lt;br /&gt;
This section contains an array of internal parameters for nodes. The section begins with a six u32 relative offsets to the first entry for each data type. The data type order for this section is int, bool, float, string, vector3f, and pointer.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The value is an immediate value for the data type (excluding string which is a string offset and pointer which doesn&#039;t store a value). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the flags to offset 0x08.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
This section contains an array of input and output parameter entries. These appear to be canonically referred to as &amp;quot;plugs&amp;quot;. Similarly to the internal parameters section, the section begins with u32 relative offsets to the first entry of each data type. However, instead of six offsets, there are 12 - two for each data type (one input, one output). The order of parameters in this section is int input, int output, bool input, bool output, float intput, float output, string input, string output, vector3f input, vector3f output, pointer input, and pointer output.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Input Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input Child Node Index / Multi-Parameter Array Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input/Output Source Node Index / Multi-Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Default Value&lt;br /&gt;
|}&lt;br /&gt;
The default value is an immediate value for the data type (excluding string which is a string offset and pointer which is always an empty four bytes). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the rest of the entry back by four bytes. If the input child node index is between -32768 and -100, it corresponds to a multi-parameter array index. The multi-parameter index can be calculated as follows: &amp;lt;code&amp;gt;MultiParamIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Each output parameter entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Output Parameter Entry&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
This section contains entries specifying parameters that have multiple values and the sources of those values. Each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input/Output Source Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Active Node Update Array ====&lt;br /&gt;
This section is an array of entries for updates to the active node array. The first four bytes specify the number of entries. Each entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Calc&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). Otherwise, the entry is considered valid if the first byte equals 1. When processing a node graph, the game maintains an array of active root nodes. When a command calculated, the root node of the command is added to this array and it and its child nodes are calculated recursively. An active node update will change the current active root node to the specified node. This usually happens right before the next command&#039;s calculation occurs, but if the top bit is set, then it will occur immediately after the current command&#039;s calculation finishes (if the source node is an Element_Join nodes, it will always update the active node post current command calculation). This is primarily used for &amp;quot;subroutines&amp;quot; that run a single time then return to the main execution routine. This system is also used for Element_Fork and Element_Join nodes. An Element_Fork node, unlike normal nodes, will replace the entire current active node array with its array of active node updates (essentially forking execution into multiple different paths). The node at the end of each of these paths will optionally also have an active node update referencing a specific Element_Join node. Each of these nodes will push the Element_Join into the active node array. However, Element_Join nodes have an internal parameter called InFlowNum and until it has been pushed onto the array that many times in a single calculation, it will not activate and remain dormant. However, once this threshold is reached, it will begin execution (with a guard to make sure only one of the instances added to the array will execute).&lt;br /&gt;
&lt;br /&gt;
==== 0x50 Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Precondition Nodes Array ====&lt;br /&gt;
This section is an array of entries of precondition nodes present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Precondition Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Precondition Node Index (local to number of precondition nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Expression Binary Section ====&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
==== AINB Modules ====&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== External Action Array ====&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== File Hashes ====&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. The purpose of these hashes is unclear.&lt;br /&gt;
&lt;br /&gt;
==== Child Replacement Table ====&lt;br /&gt;
This section is used to remove or replace specific nodes or attachments at runtime. This is used to toggle of debug nodes/attachments for release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child node, 1 = replace child node, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index/Attachment Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Node Index (for child node replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x6C Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Enum Resolve Array ====&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String Pool ====&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=129</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=129"/>
		<updated>2025-02-08T18:16:01Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add Mario vs Donkey Kong and NSO Playtest asb versions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASB&#039;&#039;&#039; (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as &#039;&#039;The Legend of Zelda: Tears of the Kingdom&#039;&#039; and &#039;&#039;Nintendo Switch Sports&#039;&#039;. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs Donkey Kong&#039;&#039; (v0x0417). Other ASB versions include 0x304 (&#039;&#039;Ring Fit Adventure&#039;&#039;), 0x3FB (&#039;&#039;Labo Toy-Con 04&#039;&#039; and &#039;&#039;Game Builder Garage&#039;&#039;), 0x407 (&#039;&#039;Animal Crossing: New Horizons&#039;&#039;), 0x40F (&#039;&#039;Nintendo Switch Sports&#039;&#039;), 0x410 (&#039;&#039;Splatoon 3&#039;&#039;), 0x418 (&#039;&#039;Super Mario Bros. Wonder&#039;&#039;), and 0x41A (&#039;&#039;Nintendo Switch Online: Playtest Program&#039;&#039;). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
ASB is a little endian format which consists of node pathways triggered by AS commands. When an AS command is called, it runs the sequence of nodes connected to it which trigger and control animations and animation logic. Nodes are arranged in an array and referenced and accessed by their array index. Despite the presence of animation events in ASB files, these events do not appear to be used by the game.&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the start of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible parameter types: string, int (32-bit signed integer), float (32-bit floating point number), bool, vector3f, and pointer (object pointer, this is not actually possible in ASB, only usable in AINB).&lt;br /&gt;
&lt;br /&gt;
Documentation is still sparse, refer to [https://github.com/dt-12345/asb this repository] for more details (names may not match exactly).&lt;br /&gt;
&lt;br /&gt;
==== Section Order ====&lt;br /&gt;
&lt;br /&gt;
# File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)&lt;br /&gt;
# AS Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Event Entry Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Sync Data Entry Indices&lt;br /&gt;
# Sync Data&lt;br /&gt;
# State Transitions&lt;br /&gt;
# Events (in games that use BAEV, these events are non-functional)&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# AS Blackboard Parameters&lt;br /&gt;
# Partials&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Result Cache&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# Material Blend Settings&lt;br /&gt;
# Enum Resolve Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
=== Sections ===&lt;br /&gt;
&lt;br /&gt;
==== File Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - &amp;quot;ASB &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0418 in &#039;&#039;Super Mario Bros. Wonder&#039;&#039;, 0x0417 in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Mario vs. Donkey Kong (Nintendo Switch)&#039;&#039;, 0x040F in &#039;&#039;Nintendo Switch Sports&#039;&#039; and &#039;&#039;Splatoon 3&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partial Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AS Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Event Entries Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Partials Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Sync Data Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Groups Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bone Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Size&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Transitions Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag List Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Triplets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Groups Offset (empty if section does not exist)&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Material Blend Settings Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ASB Parameter ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Parameter&amp;lt;T&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags and Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04 or 0x0C&lt;br /&gt;
|T&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the top bit of the flags is set, then the bottom two bytes of the flags become an index value. If it is not set, then the provided value is value of the parameter. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x18 != 0&amp;lt;/code&amp;gt;, then the index is an expression index (EXB) and the normal value field becomes the input value for the expression. If &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x1e != 0&amp;lt;/code&amp;gt;, then the index is a calculation result cache index (this stores the previously evaluated value and calculates the new value from the cached value on subsequent accesses). Note, this is only applicable if the parameter is a float. Otherwise, if &amp;lt;code&amp;gt;flags &amp;amp; 1 &amp;lt;&amp;lt; 0x19 != 0&amp;lt;/code&amp;gt;, then the index specifies the command data type. 0 is the current frame normalized (i.e. &amp;lt;code&amp;gt;(current_frame - start_frame)/total_duration&amp;lt;/code&amp;gt;), 1 and 2 are random float values between 0.0 and 1.0, 3 is an unknown string value, 4 is the command&#039;s fade in frame, and 6 is an unknown float value. Note, this only applies if the parameter is a float or a string. In all other cases, the index is a blackboard index and value of the parameter is the value of the corresponding blackboard parameter. For float parameters specifically, &amp;lt;code&amp;gt;flags &amp;gt;&amp;gt; 0x1a &amp;amp; 3&amp;lt;/code&amp;gt; specifies the exact parameter source. 0 is a float blackboard parameter while 1, 2, or 3 are a vector3f blackboard parameter with 1, 2, and 3 being the x, y, and z components respectively.&lt;br /&gt;
&lt;br /&gt;
==== AS Commands ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AS Command&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset (version 0x417+)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;bool&amp;gt;&lt;br /&gt;
|Is Ignore Same Command&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Interpolation Type (uncertain, but 0 = unspecified, 1 = no model morph, 3 = enable local bone morph, 4 = enable inertial blend)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x1C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Nodes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|AsbNodeType&lt;br /&gt;
|Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Sync Data Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Does Not Have State Transition&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Tag Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Result Cache Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Sync Data Index Array Index&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|AS Markings Index (-1 for index)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x14&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[2]&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AsbNodeType&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|FloatSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|SkeletalAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|State&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|OneDimensionalBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|IntSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Event&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|MaterialAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|FrameController&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|DummyAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|PreviousTagSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|BonePositionSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|BoneVisibilityAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|InitialFrame&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|BoneBlender&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|SubtractAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|ShapeAnimation&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=119</id>
		<title>ModuleSystem</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=119"/>
		<updated>2024-10-24T23:10:39Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Add a small entry for the NSO Playtest&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ModuleSystem is the unofficial name of Nintendo EPD&#039;s latest game engine, based on the name of the singular sead::Task at the heart of the mainloop. It&#039;s actor system appears to be a sequel in design to KingSystem, the engine created for The Legend of Zelda: Breath of the Wild. ModuleSystem appears to have replaced both ActionLibrary and LunchPack2 as the new primary engine for Nintendo EPD&#039;s and NST&#039;s game development teams. While each game shares a common set of engine features, each series appears to have a custom fork extending the engine with varying degrees of game specific functionality.&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Extension/Differences summary&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Switch Sports&lt;br /&gt;
|Graphics Module contains a Mii data manager.&lt;br /&gt;
|-&lt;br /&gt;
|Splatoon 3&lt;br /&gt;
|ModuleSystem is extended to thunder::ModuleSystem, notably adding the ability to run the CPU side of the mainloop multiple times per frame. Omits gamedata for a custom save system.&lt;br /&gt;
|-&lt;br /&gt;
|The Legend of Zelda: Tears of the Kingdom&lt;br /&gt;
|Major version up from Splatoon 3 and Nintendo Switch Sports. Some engine namespaces were updated between version 1.0.0 and 1.1.0. Includes the TerrainModule and LODModule, while most other games only contain references to these systems.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Wonder&lt;br /&gt;
|Some libraries are newer than Tears of the Kingdom, some are older.&lt;br /&gt;
|-&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Appears to be slightly behind version of Tears of the Kingdom. IActor  has a new Stasus state used when swapping actors between &amp;quot;combined scenes&amp;quot;. Replaces physics handling with a custom 2d physics engine, yet leaves the PhysicsModule with an unused version of the phive library implemented on top of PhysX instead of Havok.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Switch Online: Playtest Program&lt;br /&gt;
|A major version above Tears of the Kingdom. IModule no longer inherits sead job and instead includes a job as a member. A new actor component called CppExecutorComponent was added to ActorBase. Actor system processing was slightly revised. Phive has many notable refactors and additions in this title, including a new locomotion behavior state machine and a new file format called bphnv (not appearing in this title). Agl seems to have removed the GraphicsPipelineHolder and HardwareOptimizationMgr.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Namespaces ===&lt;br /&gt;
The top level namespace for ModuleSystem is engine. Sub-namespaces typically include a module wrapping a system for a dedicated purpose, whether unique to the engine or contracted out to an external library. Interfaces to the system are typically provided to Actors or Scenes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Namespace&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|actor&lt;br /&gt;
|Implements the actor system.&lt;br /&gt;
|-&lt;br /&gt;
|ai&lt;br /&gt;
|Wraps the ai library. Integrates with PreActors through ActorAIGroups, ActorBase through the AIComponent, and IScene through the SequenceComponent.&lt;br /&gt;
|-&lt;br /&gt;
|as&lt;br /&gt;
|Wraps the as library. Integrates with ActorBase through the RetargetScaleComponent, ASInfoComponent, ASOptimizeComponent, and ASComponent.&lt;br /&gt;
|-&lt;br /&gt;
|bake&lt;br /&gt;
|Wraps the bake library.&lt;br /&gt;
|-&lt;br /&gt;
|banc&lt;br /&gt;
|Implements BancEntities via the BancModule. Banc handles the parsing of map units into PreActors, actor ai groups, rails, placement groups, far delete groups, and custom game extensions.&lt;br /&gt;
|-&lt;br /&gt;
|bb (Unofficial)&lt;br /&gt;
|Wraps the bb library, responsible for managing bb::Blackboards. Integrates with ActorBase through BlackboardComponentActor and IScene with BlackboardComponentScene.&lt;br /&gt;
|-&lt;br /&gt;
|camera&lt;br /&gt;
|Implements a camera system. Integrates with ActorBase via the CameraComponent.&lt;br /&gt;
|-&lt;br /&gt;
|component&lt;br /&gt;
|Houses all engine components from the other namespaces for engine::actor::ActorBase and engine::scene::IScene.&lt;br /&gt;
|-&lt;br /&gt;
|controller&lt;br /&gt;
|Implements a controller manager.&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|Stubbed in retail. Seemingly implements a debug menu called &amp;quot;ClickMenu&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|effect&lt;br /&gt;
|Wraps shaft::effect for managing effect resources.&lt;br /&gt;
|-&lt;br /&gt;
|erepo (unofficial)&lt;br /&gt;
|Wraps the erepo library for PlayReport management.&lt;br /&gt;
|-&lt;br /&gt;
|event&lt;br /&gt;
|Implements an event system on top of the evfl library for Event Flows and Timelines, and the sdk movie library for prerendered video. Integrates with ActorBase through the BeforehandLoadEventComponent, EventMemberComponent, and EventPerformerComponent.&lt;br /&gt;
|-&lt;br /&gt;
|framework&lt;br /&gt;
|Implements a minor extension to sead::GameFrameworkNx, and the SpStepRateMgr.&lt;br /&gt;
|-&lt;br /&gt;
|gamedata&lt;br /&gt;
|Wraps the gmd library for managing a global, computable, and savable hash map of game data.&lt;br /&gt;
|-&lt;br /&gt;
|graphics (unofficial)&lt;br /&gt;
|Wraps the gsys library, which extends the agl library. Integrates with ActorBase through the ModelComponent and ModelBindComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lod&lt;br /&gt;
|Implements a level of detail system. Integrates with ActorBase through the LODComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lua&lt;br /&gt;
|Stubbed in retail. Provides lua support for debugging purposes.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|Implements the ModuleSystem sead::Task, as well as the IModule interface.&lt;br /&gt;
|-&lt;br /&gt;
|physics&lt;br /&gt;
|Wraps the phive library. Integrates with ActorBase through the PhysicsComponent.&lt;br /&gt;
|-&lt;br /&gt;
|rail&lt;br /&gt;
|Implements the RailMgr, manages rails parsed from banc.&lt;br /&gt;
|-&lt;br /&gt;
|reaction&lt;br /&gt;
|Implements a system for triggering reactions through reaction actors and XLink commands somehow (unknown at time of writing). Integrates with ActorBase via the ReactionComponent.&lt;br /&gt;
|-&lt;br /&gt;
|resource&lt;br /&gt;
|Wraps the ares library and implements ares::IApplicationImpl to provide asynchronous file resource management through ResourceBinders. Also wraps the pp library and implements pp::GfMgrCallback to provide a general parameter system via hierarchical Documents.&lt;br /&gt;
|-&lt;br /&gt;
|rsdb&lt;br /&gt;
|Wraps the pp::rsdb sub library. Manages a set of engine as well as game extended resource databases.&lt;br /&gt;
|-&lt;br /&gt;
|rumble&lt;br /&gt;
|Implements a rumble call system to allow sending vibrations to controllers.&lt;br /&gt;
|-&lt;br /&gt;
|scene&lt;br /&gt;
|Implements the scene system.&lt;br /&gt;
|-&lt;br /&gt;
|sound&lt;br /&gt;
|Wraps the alto library, which extends the aal library, which extends the aal::atom sub library. &lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Implements the RomConfigMgr and PauseMgr&lt;br /&gt;
|-&lt;br /&gt;
|terrain&lt;br /&gt;
|Wraps the tera library. Provides terrain management.&lt;br /&gt;
|-&lt;br /&gt;
|transceiver (unofficial)&lt;br /&gt;
|Implements a transceiver based message systems. Messages can be sent to directly to a destination, or to a whole set of listeners.&lt;br /&gt;
|-&lt;br /&gt;
|ui&lt;br /&gt;
|Wraps the eui library, which in turn extends nn::ui2d. Provides ui processing and resource management through a layout category based system.&lt;br /&gt;
|-&lt;br /&gt;
|xlink&lt;br /&gt;
|Wraps the xlink2 library. Implements an XLink PreActor Manager. Integrates with ActorBase through the ELinkComponent, SLinkComponent, XLinkComponent, and XLinkSubComponent.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Non-Canon Namespaces ===&lt;br /&gt;
These are engine namespaces, that for one reason or another, appear to be game specific extensions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Game(s)&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|coll2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d collision system the game uses instead of phive.&lt;br /&gt;
|-&lt;br /&gt;
|level&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|message&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|move2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d movement system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Main Loop ===&lt;br /&gt;
The mainloop is implemented as a single sead::Task in the standard sead::GameFrameworkNx mainloop. The mainloop consists of 4 sead::DependencyJobGraph&#039;s submitted and ran in a sead::DependencyJobWorkerMgr in succession. These are unofficially called as of writing BeforeActor, AfterActor, GSys, and GSysCalcGpu.&lt;br /&gt;
[[Category:Engines]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Aal::atom&amp;diff=118</id>
		<title>Aal::atom</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Aal::atom&amp;diff=118"/>
		<updated>2024-05-04T01:33:41Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Start a writeup on aal atom&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aal atom serves as a replacement for NintendoWare atk. As such, NintendoWare formats like Bfsar and Bfstm are replaced with EPD&#039;s simple Bwav format. This library extends functionality of nn::audio.&lt;br /&gt;
&lt;br /&gt;
== Backend ==&lt;br /&gt;
&lt;br /&gt;
=== AudioRendererController ===&lt;br /&gt;
The main manager of all aal atom managers.&lt;br /&gt;
&lt;br /&gt;
==== AudioRendererThread ====&lt;br /&gt;
This thread is responsible for processing 3 of the CommandQueues for non-stream thread commands, processing is typically requested once a frame.&lt;br /&gt;
&lt;br /&gt;
=== AudioDeviceNameManager ===&lt;br /&gt;
Manages the audio device names and volumes for the TV, Stereo Jack, and Built In Speakers.&lt;br /&gt;
&lt;br /&gt;
=== BusManager ===&lt;br /&gt;
Manages audio buses. An IBus is implemented as either a SubMixBus or a FinalMixBus. There is a single FinalMixBus, which is responsible for outputting audio to the audio device. There is a handle table allocator for SubMixBus&#039;s. IBus are implemented on top of a RoutingNode, which is responsible for handling a bus&#039;s links to destination buses.&lt;br /&gt;
&lt;br /&gt;
=== BusSendManager ===&lt;br /&gt;
Manages a handle table of BusSends used for objects sending audio data to a RoutingNode.&lt;br /&gt;
&lt;br /&gt;
=== SourceManager ===&lt;br /&gt;
Manages audio sources. A Source is implemented on top of a RoutingNode, as the destination of it&#039;s audio is a bus. Sources can have multiple Voices.&lt;br /&gt;
&lt;br /&gt;
=== CommandBufferManager ===&lt;br /&gt;
Manages 4 Command Queues with 16 usable Command List slots for scheduling ICommands.&lt;br /&gt;
&lt;br /&gt;
=== CommandManager ===&lt;br /&gt;
Allocator for ICommands. ICommands have a Type which corresponds to a name, some types are shared by multiple classes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Names&lt;br /&gt;
!Name&lt;br /&gt;
!Type Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0&lt;br /&gt;
|Not used.&lt;br /&gt;
|-&lt;br /&gt;
|Reserve&lt;br /&gt;
|1&lt;br /&gt;
|Unknown.&lt;br /&gt;
|-&lt;br /&gt;
|Blank&lt;br /&gt;
|2&lt;br /&gt;
|The default dummy ICommand.&lt;br /&gt;
|-&lt;br /&gt;
|BlankWithCheck&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AcquireVoice&lt;br /&gt;
|4&lt;br /&gt;
|Triggers a Source to acquire the underlying nn::audio voice slots for every Voice&lt;br /&gt;
|-&lt;br /&gt;
|UpdateActiveSourceList&lt;br /&gt;
|5&lt;br /&gt;
|Rebuilds the SourceManager&#039;s active Source array&lt;br /&gt;
|-&lt;br /&gt;
|UpdateDeactiveSourceList&lt;br /&gt;
|6&lt;br /&gt;
|Frees inactive Sources from the SourceManager&#039;s active Source array&lt;br /&gt;
|-&lt;br /&gt;
|SetPlayState&lt;br /&gt;
|7&lt;br /&gt;
|Adjusts the PlayState for every Voice that is part of a Source&lt;br /&gt;
|-&lt;br /&gt;
|PrepareWave&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetVolume&lt;br /&gt;
|9&lt;br /&gt;
|Adjusts the volume for every Voice that is part of a Source&lt;br /&gt;
|-&lt;br /&gt;
|SetPitch&lt;br /&gt;
|10&lt;br /&gt;
|Adjusts the pitch for every Voice that is part of a Source&lt;br /&gt;
|-&lt;br /&gt;
|SetPriority&lt;br /&gt;
|11&lt;br /&gt;
|Adjusts the priority for every Voice that is part of a Source&lt;br /&gt;
|-&lt;br /&gt;
|SetChannelVolume&lt;br /&gt;
|12&lt;br /&gt;
|Adjusts the mix volumes for a Source?&lt;br /&gt;
|-&lt;br /&gt;
|SetSourceVolume&lt;br /&gt;
|13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetBiquadFilter&lt;br /&gt;
|14&lt;br /&gt;
|Adjusts the BiquadFilter parameters for every voice that is part of a Source&lt;br /&gt;
|-&lt;br /&gt;
|UpdateSourceConnection&lt;br /&gt;
|15&lt;br /&gt;
|Updates the IBus destinations for a Source&lt;br /&gt;
|-&lt;br /&gt;
|Unknown&lt;br /&gt;
|16&lt;br /&gt;
|Unused.&lt;br /&gt;
|-&lt;br /&gt;
|Unknown&lt;br /&gt;
|17&lt;br /&gt;
|Unused.&lt;br /&gt;
|-&lt;br /&gt;
|FileReadRequest&lt;br /&gt;
|18&lt;br /&gt;
|Tells the stream thread to read in the next part of an audio stream.&lt;br /&gt;
|-&lt;br /&gt;
|FileRegistrationRequest&lt;br /&gt;
|19&lt;br /&gt;
|Registers an audio stream to the stream thread.&lt;br /&gt;
|-&lt;br /&gt;
|FileUnregistrationRequest&lt;br /&gt;
|20&lt;br /&gt;
|Unregisters an audio stream from the stream thread.&lt;br /&gt;
|-&lt;br /&gt;
|AcquireBus&lt;br /&gt;
|21&lt;br /&gt;
|Triggers an IBus to acquire it&#039;s underlying nn::audio type&lt;br /&gt;
|-&lt;br /&gt;
|UpdateActiveBusList&lt;br /&gt;
|22&lt;br /&gt;
|Rebuilds the BusManager active IBus array and frees unused SubMixes&lt;br /&gt;
|-&lt;br /&gt;
|SetBusVolume&lt;br /&gt;
|23&lt;br /&gt;
|Adjusts the volume of an IBus&lt;br /&gt;
|-&lt;br /&gt;
|SetBusSendVolume&lt;br /&gt;
|24&lt;br /&gt;
|Adjusts the volume of a BusSendArray&lt;br /&gt;
|-&lt;br /&gt;
|UpdateBusConnection&lt;br /&gt;
|25&lt;br /&gt;
|Updates the IBus destinations for an IBus&lt;br /&gt;
|-&lt;br /&gt;
|AddEffect&lt;br /&gt;
|26&lt;br /&gt;
|Adds an IEffect to an IBus&lt;br /&gt;
|-&lt;br /&gt;
|RemoveEffect&lt;br /&gt;
|27&lt;br /&gt;
|Removes an IEffect from an IBus&lt;br /&gt;
|-&lt;br /&gt;
|UpdateEffect&lt;br /&gt;
|28&lt;br /&gt;
|Processes an IEffect&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ClipManager ===&lt;br /&gt;
Manages a handle table of Clips. Clips appear to wrap bwav.&lt;br /&gt;
&lt;br /&gt;
=== FaderBufferManager ===&lt;br /&gt;
Manages a handle table of Faders.&lt;br /&gt;
&lt;br /&gt;
=== StreamBufferManager ===&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Pp&amp;diff=116</id>
		<title>Pp</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Pp&amp;diff=116"/>
		<updated>2024-04-12T12:10:23Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Draft an outline of the non-rsdb parts of the library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pp is Nintendo&#039;s parameter library. It provides an address table, resource databases, and most notably, Documents containing TypedParams.&lt;br /&gt;
&lt;br /&gt;
== Backend ==&lt;br /&gt;
&lt;br /&gt;
=== GeneralFormatMgr ===&lt;br /&gt;
Manages a tree of documents. Houses the GfMgrCallback and HashRequestQueue.&lt;br /&gt;
&lt;br /&gt;
=== GfMgrCallback ===&lt;br /&gt;
Applications can use GfMgrCallback to integrate Document management with their resource system, providing load and release options.&lt;br /&gt;
&lt;br /&gt;
=== HashRequestQueue ===&lt;br /&gt;
A queue of pending document release requests.&lt;br /&gt;
&lt;br /&gt;
=== Document ===&lt;br /&gt;
Meta-data for a TypedParam.&lt;br /&gt;
&lt;br /&gt;
=== Composite ===&lt;br /&gt;
This is the base class for composite types. Allows initializing with the values of a ByamlIter, initializing with default values, resolving the composite&#039;s parent type, finalizing the composite, searching the composite for another composite, and creating a format string.&lt;br /&gt;
&lt;br /&gt;
=== PropBuffer ===&lt;br /&gt;
Extends Composite. An array of property values.&lt;br /&gt;
&lt;br /&gt;
=== PropMap ===&lt;br /&gt;
Extends Composite. A tree of property values.&lt;br /&gt;
&lt;br /&gt;
=== TypedParamBuffer ===&lt;br /&gt;
Extends Composite. An array of TypedParams.&lt;br /&gt;
&lt;br /&gt;
=== TypedParamMap ===&lt;br /&gt;
Extends Composite. A tree of TypedParams.&lt;br /&gt;
&lt;br /&gt;
=== TypedParam ===&lt;br /&gt;
Extends Composite. Base class for application source auto-generated TypedParam derived classes. On initialize loops all property, embedded, and composite fields of the class to initialize them through either a ByamlIter or static default values baked into the derived class. Properties are basic data types readable from a byaml. Embeds are TypedParams that are embedded into the TypedParam. Composites are for container classes, arrays or maps of TypedParams or properties, but also Embeds. Each field in a TypedParam has an index that appears to correspond to it&#039;s initialize order, but this index does not line up with the order of fields in the structure layout.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
=== DocumentBinder (unofficial) ===&lt;br /&gt;
An raii wrapper around a Document reference. Allows loading, releasing, and safely acquiring a TypedParam of a certain type from a Document.&lt;br /&gt;
&lt;br /&gt;
=== TypedParam Derivitives ===&lt;br /&gt;
All TypedParam derivatives have auto-generated getter functions for reading a property or accessing a composite.&lt;br /&gt;
&lt;br /&gt;
=== CombinationDataTable ===&lt;br /&gt;
Extends TypedParam. Contains a map of CombinationDataCells set up as a 2d table with a key for the column and a key for the row, not dissimilar to a labeled Excel spreadsheet.&lt;br /&gt;
&lt;br /&gt;
=== CombinationDataCellBase ===&lt;br /&gt;
Extends TypedParam. Base class for data found in a CombinationDataTable. Contains a strings for a RowKey and ColumnKey.&lt;br /&gt;
&lt;br /&gt;
=== CellIter (unofficial) ===&lt;br /&gt;
Helper for looping the TypedParams of a CombinationDataTable by row or by column.&lt;br /&gt;
&lt;br /&gt;
=== ComponentListBase ===&lt;br /&gt;
Extends TypedParam.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Type&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|Label&lt;br /&gt;
|A label, likely for external tools&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|Category&lt;br /&gt;
|A category, likely for external tools&lt;br /&gt;
|-&lt;br /&gt;
|PropMap&amp;lt;sead::SafeStringBase&amp;lt;char&amp;gt;&amp;gt;&lt;br /&gt;
|Components&lt;br /&gt;
|A simple map of Key:Values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extenti ===&lt;br /&gt;
Extends TypedParam.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Type&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|Min&lt;br /&gt;
|Minimum value&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|Max&lt;br /&gt;
|Maximum value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extentf ===&lt;br /&gt;
Extends TypedParam.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|Min&lt;br /&gt;
|Minimum value&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|Max&lt;br /&gt;
|Maximum value&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Ares&amp;diff=115</id>
		<title>Ares</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Ares&amp;diff=115"/>
		<updated>2024-04-12T11:31:45Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Draft an outline of the library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ares is Nintendo&#039;s Asynchronous Resource library. Meant for managing resources, primarily files and their memory asynchronously.&lt;br /&gt;
&lt;br /&gt;
== Backend ==&lt;br /&gt;
&lt;br /&gt;
=== System ===&lt;br /&gt;
Manages 3 thread types, a Control thread, a Memory thread, and a set of Load threads. Control primarily handles ResourceUnit management related tasks. Memory mainly handles memory management related tasks. While Load threads mainly handle file load operations. The System also maintains structures such as a list of ResourceSizeTables, MemoryMgrs, sets of decompressors, a ResourceUnit request queue, OnThreadUnitPools for allocating LoadOnThreadUnit and ClearCacheOnThreadUnits, as well as callbacks for OnThreadUnits and OnThreadUnits for internal use.&lt;br /&gt;
&lt;br /&gt;
=== IApplicationSystem ===&lt;br /&gt;
Implemented by application. Provides callbacks to get the supported file extensions and which of those extensions use which of the 3 supported compression formats, a method to format the system thread initialize arguments, a method to look up a MemoryMgr based on resource size and path, and more.&lt;br /&gt;
&lt;br /&gt;
=== MemoryMgr ===&lt;br /&gt;
Initialized by application. Manages memory and heap creation for resource units. The MemoryMgr&#039;s root heap can be a sead::ExpHeap, sead::VirtualAddressHeap, or a user provided heap type.&lt;br /&gt;
&lt;br /&gt;
=== ThreadLocalArchiveMgr ===&lt;br /&gt;
Manages the thread local storage for the user set thread local archive resource via a pool of thread references.&lt;br /&gt;
&lt;br /&gt;
=== ResourceSizeTable ===&lt;br /&gt;
Manages an [[rsizetable]]. Allows looking up a resource&#039;s size by a file path.&lt;br /&gt;
&lt;br /&gt;
=== ResourceMgr ===&lt;br /&gt;
Manages a tree of resource units. Allows the System to iterate ResourceUnits under a file extension, and attempt to reference existing ResourceUnits during a load operation.&lt;br /&gt;
&lt;br /&gt;
=== ResourceUnitPool ===&lt;br /&gt;
Allocator for ResourceUnits.&lt;br /&gt;
&lt;br /&gt;
=== ResourceUnit ===&lt;br /&gt;
Resource meta data, such as the file path the resource came from, the Status, the FileDevice, the ResourceFactory, the MemoryMgr, the Resource itself, the ResourceMgr, as well as an Event and OnThreadUnit for background operations.&lt;br /&gt;
&lt;br /&gt;
=== thread::ExeQueue ===&lt;br /&gt;
A queue for scheduling OnThreadUnits through a set of ExeQueueThreads with respect to their priority, amount of priority levels and ExeQueueThreads adjustable.&lt;br /&gt;
&lt;br /&gt;
=== thread::CSExeQueue ===&lt;br /&gt;
A thread safe derivative of ExeQueue via CriticalSection, only addition, only ExeQueue class observed used.&lt;br /&gt;
&lt;br /&gt;
=== thread::ExeQueueThread ===&lt;br /&gt;
A thread that processes OnThreadUnits asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== thread::OnThreadUnit ===&lt;br /&gt;
An encapsulation of a unit of work to be processed by an ExeQueue. Has 2 user provided callbacks at time of scheduling, Execute and Result, result can reschedule the current OnThreadUnit. Virtual callbacks are provided for derived OnThreadUnit types.&lt;br /&gt;
&lt;br /&gt;
=== thread::OnThreadUnitPool ===&lt;br /&gt;
A pool of OnThreadUnits, allows the user to create pools of derived ForPoolOnThreadUnit classes.&lt;br /&gt;
&lt;br /&gt;
=== thread::ForPoolOnThreadUnit ===&lt;br /&gt;
Extends OnThreadUnit with integration related to OnThreadUnitPool.&lt;br /&gt;
&lt;br /&gt;
=== thread::OnThreadUnitWatcher ===&lt;br /&gt;
Allows a user to watch a ForPoolOnThreadUnit for completion.&lt;br /&gt;
&lt;br /&gt;
=== LoadOnThreadUnit ===&lt;br /&gt;
Extends ForPoolOnThreadUnit with additional meta data and management related to loading files. Used to queue asynchronous load operations.&lt;br /&gt;
&lt;br /&gt;
=== ClearCacheOnThreadUnit ===&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
=== ResourceBinder ===&lt;br /&gt;
Used to bind a resource. Stores a ResourceUnit reference and an OnThreadUnitWatcher. Supports loading a file asynchronously or synchronously, waiting for the load to complete, initializing the resource, acquiring the resource, and releasing the resource. Making requests from multiple threads on a single resource binder is not thread-safe, however it is thread-safe to attempt any operation even during resource loading.&lt;br /&gt;
&lt;br /&gt;
=== Thread Local Archive Api ===&lt;br /&gt;
A scoped thread local archive setter is provided, as well as a direct function for setting the current local archive. A ResourceBinder binding an archive resource must be provided, else the current local archive will be unset.&lt;br /&gt;
&lt;br /&gt;
=== Threading Api ===&lt;br /&gt;
An interface is provided to suspend, to resume, and to adjust the priority or core masks of the 3 thread types.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Engine::actor&amp;diff=113</id>
		<title>Engine::actor</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Engine::actor&amp;diff=113"/>
		<updated>2024-04-09T10:42:12Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Throw together a draft of actor system related info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This namespace houses [[ModuleSystem]]&#039;s Actor system. Treat names as unofficial unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
=== ActorModule ===&lt;br /&gt;
The namespace&#039;s [[Engine::module#IModule|IModule]]. &lt;br /&gt;
&lt;br /&gt;
== Managers ==&lt;br /&gt;
&lt;br /&gt;
=== ActorMgr ===&lt;br /&gt;
Maintains a tree of all IActors. A scheduler with 4 stages each with 8 priority levels for calculating IActors, with a customizable sleep calculate. A pool of actor relation links and an array of active actor relations, with a request queue to modify relations. Maintains request lists for changing an IActor&#039;s state. Houses the BaseProcMgr.&lt;br /&gt;
&lt;br /&gt;
==== BaseProcMgr ====&lt;br /&gt;
Maintains BaseProcCreateAndDelete threads as well as user callbacks to create and delete IActors asynchronously via atomic request queues.&lt;br /&gt;
&lt;br /&gt;
=== ActorInstanceMgr ===&lt;br /&gt;
Houses a set of user callbacks for the actor system. Manages the ActorInstanceHeap which is by default responsible for most IActor and PreActor memory management. Maintains an array of factories for creating IActor class derivatives by name.&lt;br /&gt;
&lt;br /&gt;
=== PreActorMgr ===&lt;br /&gt;
Houses the PreActorRenderer. A pool of ActorSystemSettings with active settings stored in a hash map. A pool of PreActorRenderInfo. Two pools of sets of PreActors. An array of all the sets of PreActors. A PreActor allocator managed by a linked list. Houses the ActorAIGroupMgr and LinkMgr.&lt;br /&gt;
&lt;br /&gt;
==== PreActorRenderer ====&lt;br /&gt;
Houses 2 MassModels. An array of PreActorRenderInfo currently pending load. An array of PreActors to be drawn sorted by their actor settings accompanied by an array of batch info grouping similar models together. Houses the PreActorModelComposer thread.&lt;br /&gt;
&lt;br /&gt;
===== PreActorModelComposer (TODO) =====&lt;br /&gt;
&lt;br /&gt;
==== ActorAIGroupMgr ====&lt;br /&gt;
Maintains a set of ActorAIGroup.&lt;br /&gt;
&lt;br /&gt;
==== LinkMgr ====&lt;br /&gt;
Manages an array of links for PreActors&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
&lt;br /&gt;
=== PreActor ===&lt;br /&gt;
PreActors manage the state of an ActorBase before it&#039;s instantiation. Typically data comes from a bcett file parsed by a BancEntity. A PreActor stores a reference to it&#039;s [[Engine::banc#BancEntity|BancEntity]], a home transform, a hash of it&#039;s transform, a name, a hash to serve as a unique id, and a reference to it&#039;s ActorSystemSettings. If applicable it can contain the following. A ByamlIter to a dynamic section of data used to initialize the ActorBase&#039;s Blackboard or for user defined purposes. A ByamlIter to a set of phive specific parameters. A set of information used to initialize the ActorBase&#039;s Blackboard. A reference to the PreActor&#039;s ActorAIGroup with a set of user provided callbacks from the ActorAIGroup&#039;s ActorLogic. A reference to the PreActor&#039;s SimultaneousGroup. A reference to the PreActor&#039;s FarDeleteGroup. A handle to a set of link&#039;s in the LinkMgr. A handle to a StaticCompound referencing the PreActor&#039;s Phive PlacementID.&lt;br /&gt;
&lt;br /&gt;
==== ActorSystemSettings (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== ActorAIGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== SimultaneousGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== FarDeleteGroup (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== IActor ===&lt;br /&gt;
This is the base interface of an actor that can be scheduled in the actor system. Each IActor has a heap meant for all of it&#039;s memory management, a unique id, the name of it&#039;s actor settings, a user defined name, it&#039;s current state, a set of request slots for requesting changes to it&#039;s state. A set of job slots for all 32 stage and priority combinations in the actor scheduler, with an extra sleep job slot. A tree map node for the ActorMgr. A reference to a structure used to manage the state for &amp;quot;hyperlinks&amp;quot; to an actor. A reference to a watcher for signifying state changes during asynchronous creation. A ring of references to the actor&#039;s relationships.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+State&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Uninitialized&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|InInitialize&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PostInitialized&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Schedulable&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Calc&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Paused&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sleeping&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PreFinalize&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Finalize&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PostFinalize&lt;br /&gt;
|9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScheduledForDeletion&lt;br /&gt;
|10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Deleted&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ActorBase ===&lt;br /&gt;
ActorBase extends IActor by implementing a job for each of the 4 calc stages provided by the ActorMgr&#039;s scheduler. These calc stages are named PreCalc, PostCalc, PostSensor, and FrameEndCalc. Notably, FrameStartCalc happens directly before PreCalc in the PreCalc job. ActorBase maintains a home transform, a current transform, a request for the next transform, angular and linear velocites, an AABB, a Document reference to it&#039;s ActorParam, a reference to it&#039;s PreActor, a Transceiver, a BlackboardAccessor, an ActorBaseLink to an optional linked actor, and a pause key allocator for maintaining a pause mask for calculate stages of the actor that can be individually paused. The majority of ActorBase behavior is implemented in a set of engine provided optional components (See [[Engine::component#IActorComponent|engine::component]]).&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bflyt&amp;diff=112</id>
		<title>Bflyt</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bflyt&amp;diff=112"/>
		<updated>2024-04-09T07:24:20Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nn::ui2d provides the Binary Cafe Layout file format to define the layout of ui elements.&lt;br /&gt;
&lt;br /&gt;
=== Header (FLYT) ===&lt;br /&gt;
[[Common nn::ui2d|Standard ui2d header.]]&lt;br /&gt;
&lt;br /&gt;
There are 23 possible section types:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Magic&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|User Data&lt;br /&gt;
|usd1&lt;br /&gt;
|User Data for the previous section, can contain special SystemData structures that extend functionality&lt;br /&gt;
|-&lt;br /&gt;
|Layout&lt;br /&gt;
|lyt1&lt;br /&gt;
|The headlining section for the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Texture List&lt;br /&gt;
|txl1&lt;br /&gt;
|A list of all textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Font List&lt;br /&gt;
|fnl1&lt;br /&gt;
|A list of all fonts used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Material List&lt;br /&gt;
|mat1&lt;br /&gt;
|All the materials used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Capture Texture List&lt;br /&gt;
|ctl1&lt;br /&gt;
|A list of all capture textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Vector Graphics Texture List&lt;br /&gt;
|vgl1&lt;br /&gt;
|A list of all vector graphics textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Pane Start&lt;br /&gt;
|pas1&lt;br /&gt;
|The start of a tree of panes, panes become children of last pane&lt;br /&gt;
|-&lt;br /&gt;
|Pane End&lt;br /&gt;
|pae1&lt;br /&gt;
|The end of a tree of panes&lt;br /&gt;
|-&lt;br /&gt;
|Pane&lt;br /&gt;
|pan1&lt;br /&gt;
|A default pane&lt;br /&gt;
|-&lt;br /&gt;
|Picture Pane&lt;br /&gt;
|pic1&lt;br /&gt;
|A pane that can contain images&lt;br /&gt;
|-&lt;br /&gt;
|TextBox Pane&lt;br /&gt;
|txt1&lt;br /&gt;
|A pane that can contain text&lt;br /&gt;
|-&lt;br /&gt;
|Window Pane&lt;br /&gt;
|wnd1&lt;br /&gt;
|A pane that contain a frame and multiple images&lt;br /&gt;
|-&lt;br /&gt;
|Parts Pane&lt;br /&gt;
|prt1&lt;br /&gt;
|A pane that can contain a sub layout&lt;br /&gt;
|-&lt;br /&gt;
|Alignment Pane&lt;br /&gt;
|ali1&lt;br /&gt;
|A pane that aligns it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Capture Pane&lt;br /&gt;
|cpt1&lt;br /&gt;
|A pane that captures it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Bounding Pane&lt;br /&gt;
|bnd1&lt;br /&gt;
|A pane that can be used in hit detection&lt;br /&gt;
|-&lt;br /&gt;
|Scissor Pane&lt;br /&gt;
|scr1&lt;br /&gt;
|A pane that scissors it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Group Start&lt;br /&gt;
|grs1&lt;br /&gt;
|The start of a group&lt;br /&gt;
|-&lt;br /&gt;
|Group End&lt;br /&gt;
|gre1&lt;br /&gt;
|The end of a group&lt;br /&gt;
|-&lt;br /&gt;
|Group&lt;br /&gt;
|grp1&lt;br /&gt;
|A group&lt;br /&gt;
|-&lt;br /&gt;
|Control Source&lt;br /&gt;
|cnt1&lt;br /&gt;
|The control source class and related for the layout&lt;br /&gt;
|-&lt;br /&gt;
|State Machine&lt;br /&gt;
|stm1&lt;br /&gt;
|A state machine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Layout (lyt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;lyt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Centered&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|PartsWidth&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|PartsHeight&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|variable&lt;br /&gt;
|char[]&lt;br /&gt;
|Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Layout SystemData ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!EnumValue&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|AnimTagName&lt;br /&gt;
|0x0&lt;br /&gt;
|Animation names?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== AnimTagName ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * String Count&lt;br /&gt;
|u32&lt;br /&gt;
|Anim Name String Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture List (txl1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;txl1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Texture Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Texture Count&lt;br /&gt;
|u32&lt;br /&gt;
|Texture Name Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Font List (fnt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;fnt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Font Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Font Count&lt;br /&gt;
|u32&lt;br /&gt;
|Font Name Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material List (mat1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;mat1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Material Count&lt;br /&gt;
|u32&lt;br /&gt;
|Material Data Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Memory ====&lt;br /&gt;
The layout of material memory is defined by this bitfield.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture Map Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture SRT (Scale Rotation Translation) Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture Coordinate Gen Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|Tev (Texture Environment) Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Alpha Compare Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Color Blend Mode Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Color And Alpha Blend Mode Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Rotate Vector Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Projection Texture Gen Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Font Color 2 Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Detailed Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|User Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture Extensions Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Vector Texture Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Brick Repeat Shader Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
The order of appearance of Material Data structures are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Structure&lt;br /&gt;
|-&lt;br /&gt;
|Material Data&lt;br /&gt;
|-&lt;br /&gt;
|Texture Map&lt;br /&gt;
|-&lt;br /&gt;
|Texture Extensions&lt;br /&gt;
|-&lt;br /&gt;
|Texture SRT&lt;br /&gt;
|-&lt;br /&gt;
|Texture Coordinate Gen&lt;br /&gt;
|-&lt;br /&gt;
|Tev Combiner&lt;br /&gt;
|-&lt;br /&gt;
|Alpha Compare&lt;br /&gt;
|-&lt;br /&gt;
|Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|Rotate Vector&lt;br /&gt;
|-&lt;br /&gt;
|Projection Texture Gen&lt;br /&gt;
|-&lt;br /&gt;
|Font Color 2&lt;br /&gt;
|-&lt;br /&gt;
|DetailedCombiner&lt;br /&gt;
|-&lt;br /&gt;
|User Combiner&lt;br /&gt;
|-&lt;br /&gt;
|Vector Texture Info&lt;br /&gt;
|-&lt;br /&gt;
|Brick Repeat Shader Info&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Color Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!EnumValue&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Color4u8&lt;br /&gt;
|0x0&lt;br /&gt;
|Material Color data offsets point to a Color4u8&lt;br /&gt;
|-&lt;br /&gt;
|Color4f&lt;br /&gt;
|0x1&lt;br /&gt;
|Material Color data offsets point to a Color4f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Color Data ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Color Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Color Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1 * Color Count&lt;br /&gt;
|u8&lt;br /&gt;
|Color Offsets&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Color4u8) 0x4 * Color Count&lt;br /&gt;
(Color4f) 0xc * Color Count&lt;br /&gt;
|Color4u8&lt;br /&gt;
Color4f&lt;br /&gt;
|Color Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Data ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1c&lt;br /&gt;
|char[0x1c]&lt;br /&gt;
|Material name&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|Material Memory&lt;br /&gt;
|Material memory bitfield&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|variable&lt;br /&gt;
|MaterialColorData&lt;br /&gt;
|Material color data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Map ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Texture Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture UV Options&lt;br /&gt;
|U Options&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture UV Options&lt;br /&gt;
|V Options&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Texture UV Options =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Wrap Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Filter&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Extensions ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Is Capture Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Is Vector Graphics Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x1e&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture SRT ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Rotation&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Scale&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Coordinate Gen (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Tev Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Alpha Compare ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Alpha Test Function&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|float&lt;br /&gt;
|Alpha Compare Reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alpha Test Function =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Never&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThan&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equal&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NotEqual&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreaterEqual&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Greater&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Always&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Blend Mode ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Equation&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Function Source&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Function Destination&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Logic Operation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Blend Equation =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Add&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sub&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ReverseSub&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Min&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Max&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Blend Function =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Zero&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|One&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Color&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Color Minus One&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Alpha&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Alpha Minus One&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Alpha&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Alpha Minus One&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Color&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Color Minus One&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Logic Operation =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NoOp&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Clear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Set&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Copy&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CopyInverted&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Invert&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|And&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nand&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Or&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nor&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Xor&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equivalent&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AndReverse&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AndInverted&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OrReverse&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OrInverted&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Rotate Vector (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Projection Texture Gen (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Font Color 2 (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Detailed Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== User Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Vector Texture Info (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Brick Repeat Shader Info (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== Capture Texture List  (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Vector Graphics Texture List (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Pane Start ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pas1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pane End ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pae1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pane (pan1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pan1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Pane Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Origin Bitfield&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Alpha&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|FlagEx&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x18&lt;br /&gt;
|char[0x18]&lt;br /&gt;
|Pane name&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|char[0x8]&lt;br /&gt;
|User name&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Rotation&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Scale&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Pane System Data ====&lt;br /&gt;
0x10 onwards is runtime appended user data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Note; 0-2 use unofficial names&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|QuadScale0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|QuadScale1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AlignmentOptions&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MaskTexture&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DropShadow&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ProceduralShape&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PaneEffect&lt;br /&gt;
|0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ProceduralShapeRuntime&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|StateMachine&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Reserve0&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Root&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Pane (pic1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;pic1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Top Left&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Top Right&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Bottom Left&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Bottom Right&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Index&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Texture Count&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Shape&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x20&lt;br /&gt;
|Texture UV&lt;br /&gt;
|Texture UV Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Texture UV =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Top Left&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Top Right&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Bottom Left&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Bottom Right&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TextBox Pane (txt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;pic1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Text Buffer Size&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Text Length&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Font Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Text Origin&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Line Alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x5e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Italic Tilt&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Text Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Font Top Color&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Font Bottom Color&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Font Size&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Character Space&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Line Space&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Label Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Shadow Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x8c&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Shadow Size&lt;br /&gt;
|-&lt;br /&gt;
|0x94&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Shadow Top Color&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Shadow Bottom Color&lt;br /&gt;
|-&lt;br /&gt;
|0x9c&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Shadow Italic Tilt&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Line Transform Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Per Character Transform Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Line Transform (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Per Character Transform (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== Window Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Parts Pane ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;prt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Property Count&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Magnification&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x28 * Property Count&lt;br /&gt;
|Parts Property&lt;br /&gt;
|Property Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Parts Property ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x18&lt;br /&gt;
|char[0x18]&lt;br /&gt;
|Property Name&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Usage Flag&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Basic Usage Flag&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Material  Usage Flag&lt;br /&gt;
|-&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Pane Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|User Data Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Pane Basic Info Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Parts Pane Basic Info ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|char[0x8]&lt;br /&gt;
|User Name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Rotation&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Scale&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Size&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Pane Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Alignment Pane ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;ali1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Capture Pane ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;cpt1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bounding Pane ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;bnd1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scissor Pane ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;scr1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Group Start ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;grs1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Group End ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;gre1&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Group ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;grp1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x21&lt;br /&gt;
|char[0x21]&lt;br /&gt;
|Group Name&lt;br /&gt;
|-&lt;br /&gt;
|0x29&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x2a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Pane Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0x18 * Pane Count&lt;br /&gt;
|char[ChildCount][0x18]&lt;br /&gt;
|Pane Name Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Control Source ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;cnt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Name Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Pane Count&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Anim Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Pane Name Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Anim Name Offset Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|char[]&lt;br /&gt;
|Control Name&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=110</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=110"/>
		<updated>2024-04-05T22:56:31Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Change entry string to External Action&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;AINB&#039;&#039;&#039; (&#039;&#039;&#039;AI&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039;ode &#039;&#039;&#039;B&#039;&#039;&#039;inary) is a file format used for AI and logic in &#039;&#039;Tears of the Kingdom&#039;&#039; as well as other recent Nintendo EPD games. This article is primarily aimed at the version that appears in &#039;&#039;Tears of the Kingdom&#039;&#039; and &#039;&#039;Super Mario Bros. Wonder&#039;&#039; (v0x0407). AINB files can be found in the AI, Logic, and Sequence folders of the romfs as well as within various packs.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
AINB is a little endian format similar to most Switch file formats. An AINB file consists of a set of interconnected nodes which act like a syntax tree and control the behavior of actors. These nodes can also be calls to external AINB files (known as modules), allowing AINB files to form entire trees of files. The root file of the tree will have &amp;lt;code&amp;gt;.root.ainb&amp;lt;/code&amp;gt; as their extension while each module in the tree will have the extension &amp;lt;code&amp;gt;.module.ainb&amp;lt;/code&amp;gt;. There are three primary categories of AINB files in &#039;&#039;TotK&#039;&#039;: AI, Logic, and Sequence. For AI and Sequence files, the file&#039;s entry point is one or more commands which is linked to one or two child nodes. All nodes are accessed by their index (references to precondition nodes will use their precondition node index which is local to the amount of precondition nodes in the file).&lt;br /&gt;
&lt;br /&gt;
All string offsets in the file are relative to the beginning of the string pool and name hashes are 32-bit murmur3 hashes. There are six possible types for AINB parameters: int (signed 32-bit integer), bool, float (32-bit), vector3f, and pointer. Pointer parameters are pointers to objects.&lt;br /&gt;
&lt;br /&gt;
==== Section Order ====&lt;br /&gt;
&lt;br /&gt;
# 0x74-Byte File Header&lt;br /&gt;
# Commands&lt;br /&gt;
# Nodes&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# Attachment Parameters&lt;br /&gt;
# Immediate Parameters&lt;br /&gt;
# Input/Output Parameters&lt;br /&gt;
# Multi-Parameters&lt;br /&gt;
# Resident Update Array&lt;br /&gt;
# 0x50 Section (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
# Precondition Nodes&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AINB Modules&lt;br /&gt;
# External Action Array&lt;br /&gt;
# File Hashes&lt;br /&gt;
# Child Replacement Table&lt;br /&gt;
# 0x6C Section&lt;br /&gt;
# Enum Resolve Array&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
=== Sections ===&lt;br /&gt;
&lt;br /&gt;
==== File Header ====&lt;br /&gt;
AINB files begin with a 0x74 byte header. If the offset for a given section is empty, that section is not present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “AIB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x0407 in &#039;&#039;TotK&#039;&#039;, 0x0404 in &#039;&#039;S3&#039;&#039; and &#039;&#039;NSS&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Precondition Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Output Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Resolve Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Immediate Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Resident Update Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Input/Output Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Multi-Parameters Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Attachment Parameters Index Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Expression Binary Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Replacement Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Precondition Node Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (unused in &#039;&#039;TotK&#039;&#039;, always the same as the Resident Update Array Offset)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (always 0, used in &#039;&#039;Splatoon 3&#039;&#039;/&#039;&#039;Nintendo Switch Sports&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB Modules Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category (0 = AI, 1 = Logic, 2 = Sequence) - only &#039;&#039;TotK&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|External Action Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Identification Hashes Offset (Purpose Unknown)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Command Array ====&lt;br /&gt;
The command array immediately follows the file header and is an array of all commands in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Name Offset&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x04&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right Node Index (one greater than the corresponding node index)&lt;br /&gt;
|}&lt;br /&gt;
Command GUIDs are only used for debug messages. Right Node Index will be -1 if the command only has one child node.&lt;br /&gt;
&lt;br /&gt;
==== Node Array ====&lt;br /&gt;
The node array immediately follows the command array and is an array of all nodes in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Type Enum (see below)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Attachment Parameters Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|bitfield&lt;br /&gt;
|Node Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Type Name Offset (for UserDefined nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x407 only)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Body Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Multi-Param Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Base Attachment Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Base Precondition Node&lt;br /&gt;
|-&lt;br /&gt;
|0x26&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Precondition Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x58 Section Entry Offset (relative to the start of the file)&lt;br /&gt;
|-&lt;br /&gt;
|0x2A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x2C&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |0x10&lt;br /&gt;
|u32&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |GUID&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u16&lt;br /&gt;
|-&lt;br /&gt;
|u8[6]&lt;br /&gt;
|}&lt;br /&gt;
Just like with commands, node GUIDs are only used for debug messages. The 0x58 section entry offset will be empty if unused.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Node Type&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|UserDefined&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Element_Join&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|100&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|-&lt;br /&gt;
|0x65&lt;br /&gt;
|101&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|102&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|103&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|104&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0x69&lt;br /&gt;
|105&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0xC8&lt;br /&gt;
|200&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|-&lt;br /&gt;
|0xC9&lt;br /&gt;
|201&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|-&lt;br /&gt;
|0xCA&lt;br /&gt;
|202&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|-&lt;br /&gt;
|0xCB&lt;br /&gt;
|203&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|-&lt;br /&gt;
|0xCC&lt;br /&gt;
|204&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|-&lt;br /&gt;
|0xCD&lt;br /&gt;
|205&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|-&lt;br /&gt;
|0x012C&lt;br /&gt;
|300&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|-&lt;br /&gt;
|0x0190&lt;br /&gt;
|400&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|-&lt;br /&gt;
|0x01F4&lt;br /&gt;
|500&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|}&lt;br /&gt;
Node type names are official. For UserDefined nodes, node definitions can be found in a node definition files. This file is located at &amp;lt;code&amp;gt;NodeDefinition/Node.Product.[ver].aidefn.byml.zs&amp;lt;/code&amp;gt; in the corresponding file category folder.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Type Descriptions&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|UserDefined&lt;br /&gt;
|Custom node type, definition in NodeDefinition&lt;br /&gt;
|-&lt;br /&gt;
|Element_S32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of a signed int&lt;br /&gt;
|-&lt;br /&gt;
|Element_Sequential&lt;br /&gt;
|Links to nodes sequentially in the order listed&lt;br /&gt;
|-&lt;br /&gt;
|Element_Simultaneous&lt;br /&gt;
|Links simultaneously to multiple nodes&lt;br /&gt;
|-&lt;br /&gt;
|Element_F32Selector&lt;br /&gt;
|Conditionally links to a node depending on the value of 32-bit float&lt;br /&gt;
|-&lt;br /&gt;
|Element_StringSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a string&lt;br /&gt;
|-&lt;br /&gt;
|Element_RandomSelector&lt;br /&gt;
|Links to a node randomly&lt;br /&gt;
|-&lt;br /&gt;
|Element_BoolSelector&lt;br /&gt;
|Conditionally links to a node depending on the value of a bool&lt;br /&gt;
|-&lt;br /&gt;
|Element_Fork&lt;br /&gt;
|See Resident Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Join&lt;br /&gt;
|See Resident Update Array&lt;br /&gt;
|-&lt;br /&gt;
|Element_Alert&lt;br /&gt;
|Displays a debug message&lt;br /&gt;
|-&lt;br /&gt;
|Element_Expression&lt;br /&gt;
|Passes values to and from EXB commands&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_S32&lt;br /&gt;
|Receives a signed int input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Receives a 32-bit float input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Receives a vector3f input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Receives a string input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Receives a bool input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Receives an object pointer input from the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Returns a signed int output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Returns a 32-bit float output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Returns a vector3f output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Returns a string output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Returns a bool output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Returns an object pointer output from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Returns the node connection name from the module to the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node, specifies what resident node to return to in the calling AINB file&lt;br /&gt;
|-&lt;br /&gt;
|Element_SplitTiming&lt;br /&gt;
|Changes when child nodes are run (Enter - first time visiting a node, Update - every frame, Leave - ran upon leaving the node)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Node Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Precondition Node&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Module&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Resident Node&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Local Blackboard Parameters ====&lt;br /&gt;
This section contains an array of the Blackboard parameters used by file. These parameters may be sourced from external Blackboards or parameter files. The section begins with a 0x30 byte section header followed by the array of parameters, an array of default values of said parameters, and an array of file references if applicable. The order of parameters is in the order of string, int, float, bool, vector3f, and pointer. The section header contains six entries, one for each type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Section Header Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Number of Entries of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Parameter Index of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Relative Offset of the First Entry of the Corresponding Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Local Blackboard Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|bitfield&lt;br /&gt;
|Name Offset and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Offset (Notes)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Name Offset Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Does Not Have File Reference&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|File Reference Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is File Reference Valid&lt;br /&gt;
|}&lt;br /&gt;
The default value entries vary based on the parameter&#039;s data type. For int, float, and bool parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Vector3f entries are 12 bytes. Note that pointer parameters do not have default value entries and do not have default values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+File Reference Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Hash (no extension)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Extension Hash (no .)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Node Bodies ====&lt;br /&gt;
Each node body is composed of two parts: a 0x90 byte parameter section and a 0x14 child node section header followed by said section if applicable. The child node section contains information about the child node and specific connection types. The following parameter indices are indices into the parameter array for that specific type and data type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x6C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x74&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x7C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Output Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Input Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Output Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Bool/float Input Source Node/Output Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Standard Child Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Resident Update Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Resident Update Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|String Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Int Input Source Node Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Count (Unused in &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused &#039;&#039;TotK&#039;&#039;)&lt;br /&gt;
|}&lt;br /&gt;
If the node has any child nodes, the section header is followed by an array of u32 offsets to each of the child node entries. For most nodes, each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The interpretation of the value depends on the connection type. For input or output connections, the value is a string offset to the parameter name. For standard connections, the value is a string offset to the connection name. For resident update connections, the value is an index into the resident update array. Certain node/connection types will also extend the entry length. Selector-type nodes excluding &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; will have an extra four bytes which stores the condition for to link to the child node. For &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;, this is an immediate value. For &amp;lt;code&amp;gt;Element_RandomSelector&amp;lt;/code&amp;gt;, this is a weight and for &amp;lt;code&amp;gt;Element_StringSelector&amp;lt;/code&amp;gt; it is a u32 string offset. The condition for  &amp;lt;code&amp;gt;Element_BoolSelector&amp;lt;/code&amp;gt; is the entry&#039;s value string. &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; adds 24 bytes to each entry, consisting of four eight-byte sub-entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;code&amp;gt;Element_F32Selector Condition Entry&amp;lt;/code&amp;gt;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Local Blackboard Parameter Index and Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|float&lt;br /&gt;
|Condition Value&lt;br /&gt;
|}&lt;br /&gt;
The first two bytes of the four bytes at offset 0x00 are the local blackboard parameter index while the last bit is whether or not the index is used or not. The first entry for &amp;lt;code&amp;gt;Element_F32Selector&amp;lt;/code&amp;gt; is the minimum value condition while the second entry is the maximum value condition. The last two entries appear to be unused. The last child node entry for Selector-type nodes is the default case. The condition for this case is either a string offset to the string その他 (&amp;quot;Other&amp;quot;) or 0 (in the case of &amp;lt;code&amp;gt;Element_S32Selector&amp;lt;/code&amp;gt;). Input nodes that are Selector-type nodes also appear to have an additional eight bytes (purpose unknown). &amp;lt;code&amp;gt;Element_Expression&amp;lt;/code&amp;gt; have an additional eight bytes per input node (16 bytes in the case of vector3f entries). The purpose of these bytes is unknown.&lt;br /&gt;
&lt;br /&gt;
==== Attachment Parameters ====&lt;br /&gt;
This section contains an array of attachments for nodes. This section is preceded by the attachment index array which is an array of u32 indices into the entries in this section. Nodes contain an index into the index array rather than directly into this section. The section contains an array of entries followed by an array of parameter entries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Attachment Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameters Entry Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Function Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|EXB Input/Output Field Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Hash (version 0x0407 only)&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (possibly related to debug)&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Int Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Bool Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Float Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Vector3f Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Immediate Parameter Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pointer Immediate Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x48&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x4C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|-&lt;br /&gt;
|0x5C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown (contains address to next entry)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Immediate Parameters ====&lt;br /&gt;
This section contains an array of immediate parameters for nodes. The section begins with a six u32 relative offsets to the first entry for each data type. The data type order for this section is int, bool, float, string, vector3f, and pointer.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
The value is an immediate value for the data type (excluding string which is a string offset and pointer which doesn&#039;t store a value). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the flags to offset 0x08.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
This section contains an array of input and output parameter entries. Similarly to the immediate parameters section, the section begins with u32 relative offsets to the first entry of each data type. However, instead of six offsets, there are 12 - two for each data type (one input, one output). The order of parameters in this section is int input, int output, bool input, bool output, float intput, float output, string input, string output, vector3f input, vector3f output, pointer input, and pointer output.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Input Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input Child Node Index / Multi-Parameter Array Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Input/Output Source Node Index / Multi-Parameter Count&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Default Value&lt;br /&gt;
|}&lt;br /&gt;
The default value is an immediate value for the data type (excluding string which is a string offset and pointer which is always an empty four bytes). Pointer entries also have an additional u32 class name offset at offset 0x04, pushing the rest of the entry back by four bytes. If the input child node index is between -32768 and -100, it corresponds to a multi-parameter array index. The multi-parameter index can be calculated as follows: &amp;lt;code&amp;gt;MultiParamIndex = -100 - Index&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Each output parameter entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Output Parameter Entry&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|31&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
This section contains entries specifying parameters that have multiple values and the sources of those values. Each entry is eight bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Multi-Parameter Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input/Output Source Parameter Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Flags&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Flags&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Source Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Use Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is Not Local Blackboard Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Is EXB Index&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Pulse Thread Local Storage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set Pointer Flag Bit Zero&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Resident Update Array ====&lt;br /&gt;
This section is an array of entries for resident nodes that are updated mid-node update sequence. The first four bytes specify the number of entries. Each entry is four bytes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bits&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Is Valid Update&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Update Post Current Command Calculation&lt;br /&gt;
|}&lt;br /&gt;
If the first byte of the flags is set to false, then the entry contains another four bytes with a string offset (purpose unknown). By default, the node is scheduled to update pre-next command calculation, however, this can change depending on the flags set. Additionally, Fork and Join nodes behave differently. Fork nodes will append the node to the run array while Join nodes will update the node post-current command calculation.&lt;br /&gt;
&lt;br /&gt;
==== 0x50 Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Precondition Nodes Array ====&lt;br /&gt;
This section is an array of entries of precondition nodes present in the file.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Precondition Node Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Precondition Node Index (local to number of precondition nodes)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Expression Binary Section ====&lt;br /&gt;
The &#039;&#039;&#039;EXB&#039;&#039;&#039; (&#039;&#039;&#039;Ex&#039;&#039;&#039;pression &#039;&#039;&#039;B&#039;&#039;&#039;inary) section is a completely self-contained section that stores custom instructions for a simple command processor. These instructions are grouped into functions that can be called by nodes to perform calculations. Because the section is self-contained, all offsets in this section are local to the section. The EXB section is shared with ASB files (&#039;&#039;&#039;A&#039;&#039;&#039;nimation &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;B&#039;&#039;&#039;inary).&lt;br /&gt;
&lt;br /&gt;
===== Section Structure =====&lt;br /&gt;
EXB is essentially its own format and allows for the storage of custom functions in files.&lt;br /&gt;
&lt;br /&gt;
====== Section Order ======&lt;br /&gt;
&lt;br /&gt;
# 0x2C-Byte Header&lt;br /&gt;
# Command Info Table&lt;br /&gt;
# Instructions Table&lt;br /&gt;
# Parameter Region&lt;br /&gt;
# Signature Table&lt;br /&gt;
# String Pool&lt;br /&gt;
&lt;br /&gt;
===== Sub-Sections =====&lt;br /&gt;
&lt;br /&gt;
====== Header ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+EXB Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|char[4]&lt;br /&gt;
|Magic - “EXB “&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Version (0x02)&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter EXB Field Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|32-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|64-bit Scratch Allocation Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Command Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Signature Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Parameter Region Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String Pool Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Command Info Table ======&lt;br /&gt;
This section contains an array of command (function) info entries. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Command Info Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|s32&lt;br /&gt;
|Base Index Pre-Command Entry&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Pre-Entry Static Memory Usage&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Base Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Instruction Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Static Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|32-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|64-bit Scratch Memory Size&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Output Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Input Data Type Enum&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== Instructions Table ======&lt;br /&gt;
This section contains an array of instruction entries which are read by the EXB command processor. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Data Type Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Left-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Right-Hand Side Parameter Source Enum&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Left-Hand Side Parameter Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Right-Hand Side Parameter Value&lt;br /&gt;
|}&lt;br /&gt;
For UserDefined type instructions, the bytes at offset 0x02-0x04 become a u16 static memory index and the bytes at 0x04-0x08 become a u32 index into the function signatures table.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Instruction Types&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Instruction Type&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Terminator&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Store&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Negate&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|NegateBool&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Add&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Subtract&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|Multiply&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|Divide&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|Modulus&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|Increment&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|11&lt;br /&gt;
|Decrement&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|12&lt;br /&gt;
|ScalarMultiplyVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0D&lt;br /&gt;
|13&lt;br /&gt;
|ScalarDivideVec3f&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|14&lt;br /&gt;
|LeftShift&lt;br /&gt;
|-&lt;br /&gt;
|0x0F&lt;br /&gt;
|15&lt;br /&gt;
|RightShift&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|16&lt;br /&gt;
|LessThan&lt;br /&gt;
|-&lt;br /&gt;
|0x11&lt;br /&gt;
|17&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|18&lt;br /&gt;
|GreaterThan&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|19&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|20&lt;br /&gt;
|Equal&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|21&lt;br /&gt;
|NotEqual&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|22&lt;br /&gt;
|AND&lt;br /&gt;
|-&lt;br /&gt;
|0x17&lt;br /&gt;
|23&lt;br /&gt;
|XOR&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|24&lt;br /&gt;
|OR&lt;br /&gt;
|-&lt;br /&gt;
|0x19&lt;br /&gt;
|25&lt;br /&gt;
|LogicalAND&lt;br /&gt;
|-&lt;br /&gt;
|0x1A&lt;br /&gt;
|26&lt;br /&gt;
|LogicalOR&lt;br /&gt;
|-&lt;br /&gt;
|0x1B&lt;br /&gt;
|27&lt;br /&gt;
|UserFunction&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|28&lt;br /&gt;
|JumpIfLHSZero&lt;br /&gt;
|-&lt;br /&gt;
|0x1D&lt;br /&gt;
|29&lt;br /&gt;
|Jump&lt;br /&gt;
|}&lt;br /&gt;
UserFunctions are mapped to a function in the executable by function signature. There are two types of these functions: direct and object. Direct functions are straightforward functions that take up to two arguments and are matched using the function signature. Function objects can take additional arguments and are indexed at runtime.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Type Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0&lt;br /&gt;
|No Data&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Value/From User&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|bool&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|int&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|float&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|string&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|vector3f&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Parameter Source Enum&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Parameter Source&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0&lt;br /&gt;
|Immediate Parameters&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|1&lt;br /&gt;
|Immediate Parameters (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|2&lt;br /&gt;
|Static Memory&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|3&lt;br /&gt;
|Parameters Region&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|4&lt;br /&gt;
|Parameters Region (String)&lt;br /&gt;
|-&lt;br /&gt;
|0x05&lt;br /&gt;
|5&lt;br /&gt;
|Output Value&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|6&lt;br /&gt;
|Input Value&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|7&lt;br /&gt;
|32-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|8&lt;br /&gt;
|64-bit Scratch&lt;br /&gt;
|-&lt;br /&gt;
|0x09&lt;br /&gt;
|9&lt;br /&gt;
|UserOutput&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|10&lt;br /&gt;
|UserInput&lt;br /&gt;
|}&lt;br /&gt;
UserCallback is a class that contains virtual functions providing memory allocation. The input value is passed from the calling node and the output value is passed back.&lt;br /&gt;
&lt;br /&gt;
====== Parameter Region ======&lt;br /&gt;
The parameter region is a region that stores the values for parameters values that are too large to fit into two bytes. Parameters that get their values from this section instead store an offset relative to the beginning of the parameter region to the start of the value.&lt;br /&gt;
&lt;br /&gt;
====== Signatures Table ======&lt;br /&gt;
This section is an array of u32 string offsets for each function signature.&lt;br /&gt;
&lt;br /&gt;
====== String Pool ======&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in this section are relative to the beginning of the string pool.&lt;br /&gt;
&lt;br /&gt;
==== AINB Modules ====&lt;br /&gt;
This section contains an array of all AINB modules linked to the current AINB file. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AINB Module Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Path Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|File Category Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|AINB File Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== External Action Array ====&lt;br /&gt;
This section appears to interact with XLink. The first four bytes specify the entry count.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Entry String Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|String 1 Offset (always メインステート (&amp;quot;Main State&amp;quot;))&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|State Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== File Hashes ====&lt;br /&gt;
This section contains two 32-bit file hashes. The first hash is a hash for the file itself and the second hash appears to be a hash for that file&#039;s parent file. The purpose of these hashes is unclear.&lt;br /&gt;
&lt;br /&gt;
==== Child Replacement Table ====&lt;br /&gt;
This section is used to remove or replace specific nodes or attachments at runtime. This is used to toggle of debug nodes/attachments for release builds. The section begins with an eight-byte section header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Section Header&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Initialization Guard (Is Initialized)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Replacement Count&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Node Count&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|s16&lt;br /&gt;
|Override Attachment Parameter Count&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Child Replacement Table Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Replacement Type Enum (0 = remove child node, 1 = replace child node, 2 = remove attachment)&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index/Attachment Index&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|New Node Index (for child node replacements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x6C Section ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Enum Resolve Array ====&lt;br /&gt;
This section is used to resolve enum values at runtime. This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039; as all enum values are statically present in the file. However, in &#039;&#039;Splatoon 3&#039;&#039;, this section is used extensively as all enum values are stored in the main executable. The first four bytes of this section specifies the number of entries in the section.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Enum Resolve Array Entry&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Class Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Enum Value Name Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== String Pool ====&lt;br /&gt;
The string pool is an array of null-terminated strings encoded with UTF-8. All string offsets in the file are relative to the first byte of this section. Note that this section also contains some unreferenced strings which are the enums for certain parameters.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=109</id>
		<title>Phive</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=109"/>
		<updated>2024-04-05T22:36:25Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Phive is Nintendo&#039;s physics library built on top of an external physics library, either Havok or PhysX 3.4 have been observed. The PhysX branch doesn&#039;t implement the full feature set and is unused by the game it appears in. The library has an optional cloth and navigation mesh extension. It&#039;s responsible for providing actors many different physics controllers in a ControllerSet.&lt;br /&gt;
&lt;br /&gt;
=== PhiveBackEnd ===&lt;br /&gt;
This is a manager responsible for bootstrapping and handling the memory management of the external physics library.&lt;br /&gt;
&lt;br /&gt;
=== PhiveConfig ===&lt;br /&gt;
This is a global manager of the application&#039;s phive settings.&lt;br /&gt;
&lt;br /&gt;
=== DynamicsFramework ===&lt;br /&gt;
This is the main application manager for phive. It provides an additional set of managers.&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetBinder ===&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetConfig ===&lt;br /&gt;
&lt;br /&gt;
=== ControllerSet ===&lt;br /&gt;
This is a set of all physics controller for an actor. Wrapped by ModuleSystem&#039;s PhysicsComponent.&lt;br /&gt;
&lt;br /&gt;
=== CharacterController ===&lt;br /&gt;
Character controllers put the hands of physics into the game developers. The game can extend character controllers with Update, Result, MoveState, and External components.&lt;br /&gt;
&lt;br /&gt;
==== CharacterProperty ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMatterRigidBodyEntity ====&lt;br /&gt;
Extension of RigidBodyEntity for character controllers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Matter Rigid Body Specific Request Types&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|ChangeIsRigidBodyMode&lt;br /&gt;
|&lt;br /&gt;
|Appears to toggle whether the rigid body is treated as such?&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CharacterParam ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterUpdate ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMoveState ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterResult ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterExternal ====&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerEntity ===&lt;br /&gt;
Top level controller for a RigidBodyEntity.&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerSensor ===&lt;br /&gt;
Top level controller for a RigidBodySensor.&lt;br /&gt;
&lt;br /&gt;
=== RigidBody ===&lt;br /&gt;
The base RigidBody class. The game can file change requests for a RigidBody which will be applied in the next frame.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Known Request Types (unofficial)&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|AddToWorld&lt;br /&gt;
|&lt;br /&gt;
|Adds RigidBody as a member of their respective Physics world&lt;br /&gt;
|-&lt;br /&gt;
|RemoveFromWorld&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NoHit&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeCollisionQuality&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeEnableHitRayCast&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeMotionType&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeShape&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetSubLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyEntity ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of being a physical object.&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyEntityForceField ===&lt;br /&gt;
&lt;br /&gt;
=== RigidBodySensor ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of sensing.&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionEntity ===&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionSensor ===&lt;br /&gt;
&lt;br /&gt;
=== Shape ===&lt;br /&gt;
Shapes are used to provide form to a RigidBody&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ShapeType Enum (official)&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Sphere&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Capsule&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Polytope&lt;br /&gt;
|2&lt;br /&gt;
|A shape created out of an array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|Box&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cylinder&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cone&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CharacterPrism&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Compound&lt;br /&gt;
|7&lt;br /&gt;
|Combines other shapes into one&lt;br /&gt;
|-&lt;br /&gt;
|Mesh&lt;br /&gt;
|8&lt;br /&gt;
|A shape created from the mesh of a Bphsh file&lt;br /&gt;
|-&lt;br /&gt;
|HeightField&lt;br /&gt;
|9&lt;br /&gt;
|Base class for all height fields&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldBox&lt;br /&gt;
|10&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldSphere&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldCylinder&lt;br /&gt;
|12&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldQuadrant&lt;br /&gt;
|13&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldVertices&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|15&lt;br /&gt;
|Used in Bphsc for compound shapes&lt;br /&gt;
|-&lt;br /&gt;
|SDFSurfaceOfRevolution&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDFHeightField&lt;br /&gt;
|17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Dummy&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ConstraintController ===&lt;br /&gt;
&lt;br /&gt;
=== Constraint ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Constraint types (unofficial table)&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|BallAndSocket&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CogWheel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fixed&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeSlider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hinge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pulley&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RackAndPinion&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Slider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SpringDamper&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Placement ===&lt;br /&gt;
&lt;br /&gt;
=== StaticCompoundController ===&lt;br /&gt;
&lt;br /&gt;
=== Extension ===&lt;br /&gt;
&lt;br /&gt;
==== RopeExtension ====&lt;br /&gt;
&lt;br /&gt;
==== PhiveEntityControlExtension ====&lt;br /&gt;
&lt;br /&gt;
=== GraphicsControllerSet ===&lt;br /&gt;
This is a sub controller set of phive::ControllerSet responsible for physics controllers used for graphical effects.&lt;br /&gt;
&lt;br /&gt;
=== LookingController ===&lt;br /&gt;
&lt;br /&gt;
=== LookIKController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTextureScrollController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTexturePatternController ===&lt;br /&gt;
&lt;br /&gt;
=== HelperBone ===&lt;br /&gt;
&lt;br /&gt;
=== Cloth ===&lt;br /&gt;
&lt;br /&gt;
=== RagdollStructure ===&lt;br /&gt;
&lt;br /&gt;
=== FishBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== TailBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== FootIK ===&lt;br /&gt;
&lt;br /&gt;
=== HandIK ===&lt;br /&gt;
&lt;br /&gt;
=== SnakeIK ===&lt;br /&gt;
&lt;br /&gt;
=== BoneModifier ===&lt;br /&gt;
&lt;br /&gt;
=== ModelController ===&lt;br /&gt;
&lt;br /&gt;
=== NavMeshCharacter ===&lt;br /&gt;
[[Category:Software stack]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=108</id>
		<title>Phive</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Phive&amp;diff=108"/>
		<updated>2024-04-05T22:34:51Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Outline the classes of phive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Phive is Nintendo&#039;s physics library built on top of an external physics library, either Havok or PhysX 3.4 have been observed. The PhysX branch doesn&#039;t implement the full feature set and is unused by the game it appears in. The library has an optional cloth and navigation mesh extension. It&#039;s responsible for providing actors many different physics controllers in a ControllerSet.&lt;br /&gt;
&lt;br /&gt;
=== PhiveBackEnd ===&lt;br /&gt;
This is a manager responsible for bootstrapping and handling the memory management of the external physics library.&lt;br /&gt;
&lt;br /&gt;
=== PhiveConfig ===&lt;br /&gt;
This is a global manager of the application&#039;s phive settings.&lt;br /&gt;
&lt;br /&gt;
=== DynamicsFramework ===&lt;br /&gt;
This is the main application manager for phive. It provides an additional set of managers.&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetBinder ===&lt;br /&gt;
&lt;br /&gt;
=== ControllerSetConfig ===&lt;br /&gt;
&lt;br /&gt;
=== ControllerSet ===&lt;br /&gt;
This is a set of all physics controller for an actor. Wrapped by ModuleSystem&#039;s PhysicsComponent.&lt;br /&gt;
&lt;br /&gt;
=== CharacterController ===&lt;br /&gt;
Character controllers put the hands of physics into the game developers. The game can extend character controllers with Update, Result, MoveState, and External components.&lt;br /&gt;
&lt;br /&gt;
==== CharacterProperty ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMatterRigidBodyEntity ====&lt;br /&gt;
Extension of RigidBodyEntity for character controllers.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Matter Rigid Body Specific Request Types&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|ChangeIsRigidBodyMode&lt;br /&gt;
|&lt;br /&gt;
|Appears to toggle whether the rigid body is treated as such?&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|Extension to base request.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CharacterParam ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterUpdate ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterMoveState ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterResult ====&lt;br /&gt;
&lt;br /&gt;
==== CharacterExternal ====&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerEntity ===&lt;br /&gt;
Top level controller for a RigidBodyEntity.&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyControllerSensor ===&lt;br /&gt;
Top level controller for a RigidBodySensor.&lt;br /&gt;
&lt;br /&gt;
=== RigidBody ===&lt;br /&gt;
The base RigidBody class. The game can file change requests for a RigidBody which will be applied in the next frame.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Known Request Types (unofficial)&lt;br /&gt;
!Name&lt;br /&gt;
!Function Arguments&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|AddToWorld&lt;br /&gt;
|&lt;br /&gt;
|Adds RigidBody as a member of their respective Physics world&lt;br /&gt;
|-&lt;br /&gt;
|RemoveFromWorld&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NoHit&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeCollisionQuality&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeEnableHitRayCast&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeMotionType&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ChangeShape&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLayerMask&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetAngularVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetLinearVelocity&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetPositionAndRotation&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SetSubLayer&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyEntity ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of being a physical object.&lt;br /&gt;
&lt;br /&gt;
=== RigidBodyEntityForceField ===&lt;br /&gt;
&lt;br /&gt;
=== RigidBodySensor ===&lt;br /&gt;
These are rigid bodies that exist for the purpose of sensing.&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionEntity ===&lt;br /&gt;
&lt;br /&gt;
=== ContactCollectionSensor ===&lt;br /&gt;
&lt;br /&gt;
=== Shape ===&lt;br /&gt;
Shapes are used to provide form to a RigidBody&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ShapeType Enum (official)&lt;br /&gt;
!Name&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Sphere&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Capsule&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Polytope&lt;br /&gt;
|2&lt;br /&gt;
|A shape created out of an array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|Box&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cylinder&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Cone&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CharacterPrism&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Compound&lt;br /&gt;
|7&lt;br /&gt;
|Combines other shapes into one&lt;br /&gt;
|-&lt;br /&gt;
|Mesh&lt;br /&gt;
|8&lt;br /&gt;
|A shape created from the mesh of a Bphsh file&lt;br /&gt;
|-&lt;br /&gt;
|HeightField&lt;br /&gt;
|9&lt;br /&gt;
|Base class for all height fields&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldBox&lt;br /&gt;
|10&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldSphere&lt;br /&gt;
|11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldCylinder&lt;br /&gt;
|12&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldQuadrant&lt;br /&gt;
|13&lt;br /&gt;
|Used in Bphsc for Water&lt;br /&gt;
|-&lt;br /&gt;
|HeightFieldVertices&lt;br /&gt;
|14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|15&lt;br /&gt;
|Used in Bphsc for compound shapes&lt;br /&gt;
|-&lt;br /&gt;
|SDFSurfaceOfRevolution&lt;br /&gt;
|16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDFHeightField&lt;br /&gt;
|17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Dummy&lt;br /&gt;
|18&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ConstraintController ===&lt;br /&gt;
&lt;br /&gt;
=== Constraint ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Constraint types (unofficial table)&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|BallAndSocket&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CogWheel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fixed&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeSlider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hinge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pulley&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RackAndPinion&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Slider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SpringDamper&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Placement ===&lt;br /&gt;
&lt;br /&gt;
=== StaticCompoundController ===&lt;br /&gt;
&lt;br /&gt;
=== Extension ===&lt;br /&gt;
&lt;br /&gt;
==== RopeExtension ====&lt;br /&gt;
&lt;br /&gt;
==== PhiveEntityControlExtension ====&lt;br /&gt;
&lt;br /&gt;
=== GraphicsControllerSet ===&lt;br /&gt;
This is a sub controller set of phive::ControllerSet responsible for physics controllers used for graphical effects.&lt;br /&gt;
&lt;br /&gt;
=== LookingController ===&lt;br /&gt;
&lt;br /&gt;
=== LookIKController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTextureScrollController ===&lt;br /&gt;
&lt;br /&gt;
=== EyeTexturePatternController ===&lt;br /&gt;
&lt;br /&gt;
=== HelperBone ===&lt;br /&gt;
&lt;br /&gt;
=== Cloth ===&lt;br /&gt;
&lt;br /&gt;
=== RagdollStructure ===&lt;br /&gt;
&lt;br /&gt;
=== FishBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== TailBoneController ===&lt;br /&gt;
&lt;br /&gt;
=== FootIK ===&lt;br /&gt;
&lt;br /&gt;
=== HandIK ===&lt;br /&gt;
&lt;br /&gt;
=== SnakeIK ===&lt;br /&gt;
&lt;br /&gt;
=== BoneModifier ===&lt;br /&gt;
&lt;br /&gt;
=== ModelController ===&lt;br /&gt;
&lt;br /&gt;
=== NavMeshCharacter ===&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=107</id>
		<title>ModuleSystem</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ModuleSystem&amp;diff=107"/>
		<updated>2024-04-05T10:31:00Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Start a general synopsis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ModuleSystem is the unofficial name of Nintendo EPD&#039;s latest game engine, based on the name of the singular sead::Task at the heart of the mainloop. It&#039;s actor system appears to be a sequel in design to KingSystem, the engine created for The Legend of Zelda: Breath of the Wild. ModuleSystem appears to have replaced both ActionLibrary and LunchPack2 as the new primary engine for Nintendo EPD&#039;s and NST&#039;s game development teams. While each game shares a common set of engine features, each series appears to have a custom fork extending the engine with varying degrees of game specific functionality.&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Extension/Differences summary&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Switch Sports&lt;br /&gt;
|Graphics Module contains a Mii data manager.&lt;br /&gt;
|-&lt;br /&gt;
|Splatoon 3&lt;br /&gt;
|ModuleSystem is extended to thunder::ModuleSystem, notably adding the ability to run the CPU side of the mainloop multiple times per frame. Omits gamedata for a custom save system.&lt;br /&gt;
|-&lt;br /&gt;
|The Legend of Zelda: Tears of the Kingdom&lt;br /&gt;
|Major version up from Splatoon 3 and Nintendo Switch Sports. Some engine namespaces were updated between version 1.0.0 and 1.1.0. Includes the TerrainModule and LODModule, while most other games only contain references to these systems.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Wonder&lt;br /&gt;
|Some libraries are newer than Tears of the Kingdom, some are older.&lt;br /&gt;
|-&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Appears to be slightly behind version of Tears of the Kingdom. IActor  has a new Stasus state used when swapping actors between &amp;quot;combined scenes&amp;quot;. Replaces physics handling with a custom 2d physics engine, yet leaves the PhysicsModule with an unused version of the phive library implemented on top of PhysX instead of Havok.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Namespaces ===&lt;br /&gt;
The top level namespace for ModuleSystem is engine. Sub-namespaces typically include a module wrapping a system for a dedicated purpose, whether unique to the engine or contracted out to an external library. Interfaces to the system are typically provided to Actors or Scenes.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Namespace&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|actor&lt;br /&gt;
|Implements the actor system.&lt;br /&gt;
|-&lt;br /&gt;
|ai&lt;br /&gt;
|Wraps the ai library. Integrates with PreActors through ActorAIGroups, ActorBase through the AIComponent, and IScene through the SequenceComponent.&lt;br /&gt;
|-&lt;br /&gt;
|as&lt;br /&gt;
|Wraps the as library. Integrates with ActorBase through the RetargetScaleComponent, ASInfoComponent, ASOptimizeComponent, and ASComponent.&lt;br /&gt;
|-&lt;br /&gt;
|bake&lt;br /&gt;
|Wraps the bake library.&lt;br /&gt;
|-&lt;br /&gt;
|banc&lt;br /&gt;
|Implements BancEntities via the BancModule. Banc handles the parsing of map units into PreActors, actor ai groups, rails, placement groups, far delete groups, and custom game extensions.&lt;br /&gt;
|-&lt;br /&gt;
|bb (Unofficial)&lt;br /&gt;
|Wraps the bb library, responsible for managing bb::Blackboards. Integrates with ActorBase through BlackboardComponentActor and IScene with BlackboardComponentScene.&lt;br /&gt;
|-&lt;br /&gt;
|camera&lt;br /&gt;
|Implements a camera system. Integrates with ActorBase via the CameraComponent.&lt;br /&gt;
|-&lt;br /&gt;
|component&lt;br /&gt;
|Houses all engine components from the other namespaces for engine::actor::ActorBase and engine::scene::IScene.&lt;br /&gt;
|-&lt;br /&gt;
|controller&lt;br /&gt;
|Implements a controller manager.&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|Stubbed in retail. Seemingly implements a debug menu called &amp;quot;ClickMenu&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|effect&lt;br /&gt;
|Wraps shaft::effect for managing effect resources.&lt;br /&gt;
|-&lt;br /&gt;
|erepo (unofficial)&lt;br /&gt;
|Wraps the erepo library for PlayReport management.&lt;br /&gt;
|-&lt;br /&gt;
|event&lt;br /&gt;
|Implements an event system on top of the evfl library for Event Flows and Timelines, and the sdk movie library for prerendered video. Integrates with ActorBase through the BeforehandLoadEventComponent, EventMemberComponent, and EventPerformerComponent.&lt;br /&gt;
|-&lt;br /&gt;
|framework&lt;br /&gt;
|Implements a minor extension to sead::GameFrameworkNx, and the SpStepRateMgr.&lt;br /&gt;
|-&lt;br /&gt;
|gamedata&lt;br /&gt;
|Wraps the gmd library for managing a global, computable, and savable hash map of game data.&lt;br /&gt;
|-&lt;br /&gt;
|graphics (unofficial)&lt;br /&gt;
|Wraps the gsys library, which extends the agl library. Integrates with ActorBase through the ModelComponent and ModelBindComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lod&lt;br /&gt;
|Implements a level of detail system. Integrates with ActorBase through the LODComponent.&lt;br /&gt;
|-&lt;br /&gt;
|lua&lt;br /&gt;
|Stubbed in retail. Provides lua support for debugging purposes.&lt;br /&gt;
|-&lt;br /&gt;
|module&lt;br /&gt;
|Implements the ModuleSystem sead::Task, as well as the IModule interface.&lt;br /&gt;
|-&lt;br /&gt;
|physics&lt;br /&gt;
|Wraps the phive library. Integrates with ActorBase through the PhysicsComponent.&lt;br /&gt;
|-&lt;br /&gt;
|rail&lt;br /&gt;
|Implements the RailMgr, manages rails parsed from banc.&lt;br /&gt;
|-&lt;br /&gt;
|reaction&lt;br /&gt;
|Implements a system for triggering reactions through reaction actors and XLink commands somehow (unknown at time of writing). Integrates with ActorBase via the ReactionComponent.&lt;br /&gt;
|-&lt;br /&gt;
|resource&lt;br /&gt;
|Wraps the ares library and implements ares::IApplicationImpl to provide asynchronous file resource management through ResourceBinders. Also wraps the pp library and implements pp::GfMgrCallback to provide a general parameter system via hierarchical Documents.&lt;br /&gt;
|-&lt;br /&gt;
|rsdb&lt;br /&gt;
|Wraps the pp::rsdb sub library. Manages a set of engine as well as game extended resource databases.&lt;br /&gt;
|-&lt;br /&gt;
|rumble&lt;br /&gt;
|Implements a rumble call system to allow sending vibrations to controllers.&lt;br /&gt;
|-&lt;br /&gt;
|scene&lt;br /&gt;
|Implements the scene system.&lt;br /&gt;
|-&lt;br /&gt;
|sound&lt;br /&gt;
|Wraps the alto library, which extends the aal library, which extends the aal::atom sub library. &lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Implements the RomConfigMgr and PauseMgr&lt;br /&gt;
|-&lt;br /&gt;
|terrain&lt;br /&gt;
|Wraps the tera library. Provides terrain management.&lt;br /&gt;
|-&lt;br /&gt;
|transceiver (unofficial)&lt;br /&gt;
|Implements a transceiver based message systems. Messages can be sent to directly to a destination, or to a whole set of listeners.&lt;br /&gt;
|-&lt;br /&gt;
|ui&lt;br /&gt;
|Wraps the eui library, which in turn extends nn::ui2d. Provides ui processing and resource management through a layout category based system.&lt;br /&gt;
|-&lt;br /&gt;
|xlink&lt;br /&gt;
|Wraps the xlink2 library. Implements an XLink PreActor Manager. Integrates with ActorBase through the ELinkComponent, SLinkComponent, XLinkComponent, and XLinkSubComponent.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Non-Canon Namespaces ===&lt;br /&gt;
These are engine namespaces, that for one reason or another, appear to be game specific extensions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Game(s)&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|coll2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d collision system the game uses instead of phive.&lt;br /&gt;
|-&lt;br /&gt;
|level&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|message&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|move2d&lt;br /&gt;
|Mario Vs Donkey Kong&lt;br /&gt;
|Implements a 2d movement system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Main Loop ===&lt;br /&gt;
The mainloop is implemented as a single sead::Task in the standard sead::GameFrameworkNx mainloop. The mainloop consists of 4 sead::DependencyJobGraph&#039;s submitted and ran in a sead::DependencyJobWorkerMgr in succession. These are unofficially called as of writing BeforeActor, AfterActor, GSys, and GSysCalcGpu.&lt;br /&gt;
[[Category:Engines]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Rsizetable&amp;diff=105</id>
		<title>Rsizetable</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Rsizetable&amp;diff=105"/>
		<updated>2024-02-19T00:26:19Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Improve wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The resource size table is an ares file format managed by ares::ResourceSizeTable. &#039;&#039;&#039;The earliest revision has no header&#039;&#039;&#039;, only containing the crc32b array, the size of array is implicitly calculated. Succeeded by a version with a 0xc byte header and an optional array of fixed size file path + resource size pairs for file paths that would produce a hash collision (default fixed size of that game&#039;s max path). Since succeeded by a version with a new 0x16 byte header, the 0x6 byte magic makes all subsequent u32 values unaligned.&lt;br /&gt;
&lt;br /&gt;
=== Header (revision 1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;RSTB&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b resource size pair count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Path resource size pair count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header (revision 2) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x6&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;RESTBL&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of paths in collision table (0x80 and 0xa0 have been used)&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b resource size pair count&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Path resource size pair count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Crc32b Array ===&lt;br /&gt;
Array of hash + size pairs immediately following the header, if the header exists. Sorted by hash.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Crc32b of file path&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size required by file resource in ares&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path Array ===&lt;br /&gt;
Array of path + size pairs immediately following the Crc32b array, if the file path array exists. Sorted by path.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x80&lt;br /&gt;
|char[ares MaxPath]&lt;br /&gt;
|Fixed size file path&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size required by file resource in ares&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bflyt&amp;diff=93</id>
		<title>Bflyt</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bflyt&amp;diff=93"/>
		<updated>2023-12-27T05:13:27Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Start on bflyt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nn::ui2d provides the Binary Cafe Layout file format to define the layout of ui elements.&lt;br /&gt;
&lt;br /&gt;
=== Header (FLYT) ===&lt;br /&gt;
[[Common nn::ui2d|Standard ui2d header.]]&lt;br /&gt;
&lt;br /&gt;
There are 23 possible section types:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Magic&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|User Data&lt;br /&gt;
|usd1&lt;br /&gt;
|User Data for the previous section, can contain special SystemData structures that extend functionality&lt;br /&gt;
|-&lt;br /&gt;
|Layout&lt;br /&gt;
|lyt1&lt;br /&gt;
|The headlining section for the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Texture List&lt;br /&gt;
|txl1&lt;br /&gt;
|A list of all textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Font List&lt;br /&gt;
|fnl1&lt;br /&gt;
|A list of all fonts used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Material List&lt;br /&gt;
|mat1&lt;br /&gt;
|All the materials used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Capture Texture List&lt;br /&gt;
|ctl1&lt;br /&gt;
|A list of all capture textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Vector Graphics Texture List&lt;br /&gt;
|vgl1&lt;br /&gt;
|A list of all vector graphics textures used in the Layout&lt;br /&gt;
|-&lt;br /&gt;
|Pane Start&lt;br /&gt;
|pas1&lt;br /&gt;
|The start of a tree of panes, panes become children of last pane&lt;br /&gt;
|-&lt;br /&gt;
|Pane End&lt;br /&gt;
|pae1&lt;br /&gt;
|The end of a tree of panes&lt;br /&gt;
|-&lt;br /&gt;
|Pane&lt;br /&gt;
|pan1&lt;br /&gt;
|The default pane&lt;br /&gt;
|-&lt;br /&gt;
|Picture Pane&lt;br /&gt;
|pic1&lt;br /&gt;
|A pane that can contain images&lt;br /&gt;
|-&lt;br /&gt;
|TextBox Pane&lt;br /&gt;
|txt1&lt;br /&gt;
|A pane that can contain text&lt;br /&gt;
|-&lt;br /&gt;
|Window Pane&lt;br /&gt;
|wnd1&lt;br /&gt;
|A pane that contain a frame and multiple images&lt;br /&gt;
|-&lt;br /&gt;
|Parts Pane&lt;br /&gt;
|prt1&lt;br /&gt;
|A pane that can contain a sub layout&lt;br /&gt;
|-&lt;br /&gt;
|Alignment Pane&lt;br /&gt;
|ali1&lt;br /&gt;
|A pane that aligns it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Capture Pane&lt;br /&gt;
|cpt1&lt;br /&gt;
|A pane that captures it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Bounding Pane&lt;br /&gt;
|bnd1&lt;br /&gt;
|A pane that can be used in hit detection&lt;br /&gt;
|-&lt;br /&gt;
|Scissor Pane&lt;br /&gt;
|scr1&lt;br /&gt;
|A pane the scissors it&#039;s children&lt;br /&gt;
|-&lt;br /&gt;
|Group Start&lt;br /&gt;
|grs1&lt;br /&gt;
|The start of a group&lt;br /&gt;
|-&lt;br /&gt;
|Group End&lt;br /&gt;
|gre1&lt;br /&gt;
|The end of a group&lt;br /&gt;
|-&lt;br /&gt;
|Group&lt;br /&gt;
|grp1&lt;br /&gt;
|A group&lt;br /&gt;
|-&lt;br /&gt;
|Control Source&lt;br /&gt;
|cnt1&lt;br /&gt;
|The control source class and related for the layout&lt;br /&gt;
|-&lt;br /&gt;
|State Machine&lt;br /&gt;
|stm1&lt;br /&gt;
|A state machine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Layout (lyt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;lyt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Centered&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|PartsWidth&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|PartsHeight&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|variable&lt;br /&gt;
|char[]&lt;br /&gt;
|Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Layout SystemData ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!EnumValue&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|AnimTagName&lt;br /&gt;
|0x0&lt;br /&gt;
|Animation names?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== AnimTagName ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String Count&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * String Count&lt;br /&gt;
|u32&lt;br /&gt;
|Anim Name String Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture List (txl1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;txl1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Texture Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Texture Count&lt;br /&gt;
|u32&lt;br /&gt;
|Texture Name Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Font List (fnt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;fnt1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Font Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Font Count&lt;br /&gt;
|u32&lt;br /&gt;
|Font Name Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material List (mat1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;mat1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Material Count&lt;br /&gt;
|u32&lt;br /&gt;
|Material Data Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Memory ====&lt;br /&gt;
The layout of material memory is defined by this bitfield.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture Map Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture SRT (Scale Rotation Translation) Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Texture Coordinate Gen Count&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|Tev (Texture Environment) Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Alpha Compare Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Color Blend Mode Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Color And Alpha Blend Mode Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown0&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Projection Texture Gen Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown1&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Detailed Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|User Combiner Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture Extensions Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Vector Texture Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Brick Repeat Shader Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
The order of appearance of Material Data structures are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Structure&lt;br /&gt;
|-&lt;br /&gt;
|Material Data&lt;br /&gt;
|-&lt;br /&gt;
|Texture Map&lt;br /&gt;
|-&lt;br /&gt;
|Texture Extensions&lt;br /&gt;
|-&lt;br /&gt;
|Texture SRT&lt;br /&gt;
|-&lt;br /&gt;
|Texture Coordinate Gen&lt;br /&gt;
|-&lt;br /&gt;
|Tev Combiner&lt;br /&gt;
|-&lt;br /&gt;
|Alpha Compare&lt;br /&gt;
|-&lt;br /&gt;
|Blend Mode&lt;br /&gt;
|-&lt;br /&gt;
|Unknown0&lt;br /&gt;
|-&lt;br /&gt;
|Projection Texture Gen&lt;br /&gt;
|-&lt;br /&gt;
|Unknown1&lt;br /&gt;
|-&lt;br /&gt;
|DetailedCombiner&lt;br /&gt;
|-&lt;br /&gt;
|User Combiner&lt;br /&gt;
|-&lt;br /&gt;
|Vector Texture Info&lt;br /&gt;
|-&lt;br /&gt;
|Brick Repeat Shader Info&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Color Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!EnumValue&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Color4u8&lt;br /&gt;
|0x0&lt;br /&gt;
|Material Color data offsets point to a Color4u8&lt;br /&gt;
|-&lt;br /&gt;
|Color4f&lt;br /&gt;
|0x1&lt;br /&gt;
|Material Color data offsets point to a Color4f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Color Data ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Color Type&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Color Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1 * Color Count&lt;br /&gt;
|u8&lt;br /&gt;
|Color Offsets&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Color4u8) 0x4 * Color Count&lt;br /&gt;
(Color4f) 0xc * Color Count&lt;br /&gt;
|Color4u8&lt;br /&gt;
Color4f&lt;br /&gt;
|Color Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Material Data ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1c&lt;br /&gt;
|char[0x1c]&lt;br /&gt;
|Material name&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|Material Memory&lt;br /&gt;
|Material memory bitfield&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|variable&lt;br /&gt;
|MaterialColorData&lt;br /&gt;
|Material color data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Map ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Texture Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture UV Options&lt;br /&gt;
|U Options&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|Texture UV Options&lt;br /&gt;
|V Options&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Texture UV Options =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Wrap Mode&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|Filter&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Extensions ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bitfield Size&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Is Capture Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|Is Vector Graphics Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x1e&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture SRT ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Rotation&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Scale&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Texture Coordinate Gen (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Tev Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Alpha Compare ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Alpha Test Function&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|float&lt;br /&gt;
|Alpha Compare Reference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Alpha Test Function =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Never&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThan&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equal&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NotEqual&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreaterEqual&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Greater&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Always&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Blend Mode ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Equation&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Function Source&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Blend Function Destination&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Logic Operation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Blend Equation =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Add&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sub&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ReverseSub&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Min&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Max&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Blend Function =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Zero&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|One&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Color&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Color Minus One&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Alpha&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Alpha Minus One&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Alpha&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Destination Alpha Minus One&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Color&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Source Color Minus One&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Logic Operation =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NoOp&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Clear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Set&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Copy&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CopyInverted&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Invert&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|And&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nand&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Or&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nor&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Xor&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equivalent&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AndReverse&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AndInverted&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OrReverse&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OrInverted&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown0 (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Projection Texture Gen (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Unknown1 (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Detailed Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== User Combiner (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Vector Texture Info (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Brick Repeat Shader Info (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== Capture Texture List  (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Vector Graphics Texture List (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Pane Start (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Pane End (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Pane (pan1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pan1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Pane Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Origin Bitfield&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Alpha&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|FlagEx&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x18&lt;br /&gt;
|char[0x18]&lt;br /&gt;
|Pane name&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x8&lt;br /&gt;
|char[0x8]&lt;br /&gt;
|User name&lt;br /&gt;
|-&lt;br /&gt;
|0x2c&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0xc&lt;br /&gt;
|Vector3f&lt;br /&gt;
|Rotation&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Scale&lt;br /&gt;
|-&lt;br /&gt;
|0x4c&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Pane (pic1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;pic1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Top Left&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Top Right&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Bottom Left&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Vertex Color Bottom Right&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Index&lt;br /&gt;
|-&lt;br /&gt;
|0x66&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Texture Count&lt;br /&gt;
|-&lt;br /&gt;
|0x67&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is Shape&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x20&lt;br /&gt;
|Texture UV&lt;br /&gt;
|Texture UV Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Texture UV =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Top Left&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Top Right&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Bottom Left&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Bottom Right&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TextBox Pane (txt1) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x54&lt;br /&gt;
|Pane&lt;br /&gt;
|Magic: &amp;quot;pic1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Text Buffer Size&lt;br /&gt;
|-&lt;br /&gt;
|0x56&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Text Length&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Material Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Font Index&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Text Origin&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Line Alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x5e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Flags&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Italic Tilt&lt;br /&gt;
|-&lt;br /&gt;
|0x64&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Text Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Font Top Color&lt;br /&gt;
|-&lt;br /&gt;
|0x6c&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Font Bottom Color&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Font Size&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Character Space&lt;br /&gt;
|-&lt;br /&gt;
|0x7c&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Line Space&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Label Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Shadow Translation&lt;br /&gt;
|-&lt;br /&gt;
|0x8c&lt;br /&gt;
|0x8&lt;br /&gt;
|Vector2f&lt;br /&gt;
|Shadow Size&lt;br /&gt;
|-&lt;br /&gt;
|0x94&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Shadow Top Color&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x4&lt;br /&gt;
|Color4u8&lt;br /&gt;
|Shadow Bottom Color&lt;br /&gt;
|-&lt;br /&gt;
|0x9c&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Shadow Italic Tilt&lt;br /&gt;
|-&lt;br /&gt;
|0xa0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Line Transform Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xa4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Per Character Transform Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Line Transform (TODO) ====&lt;br /&gt;
&lt;br /&gt;
==== Per Character Transform (TODO) ====&lt;br /&gt;
&lt;br /&gt;
=== Window Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Parts Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Alignment Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Capture Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Bounding Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Scissor Pane (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Group Start (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Group End (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Group (TODO) ===&lt;br /&gt;
&lt;br /&gt;
=== Control Source (TODO) ===&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bffnt&amp;diff=92</id>
		<title>Bffnt</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bffnt&amp;diff=92"/>
		<updated>2023-12-27T03:46:19Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Early bffnt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Binary Cafe Font. nn::font in addition to supporting Open Type Fonts supports this custom bitmap font file format.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
[[Common nn::ui2d|Standard ui2d header.]]&lt;br /&gt;
&lt;br /&gt;
There are 5 section types, Font Information (FINF), Texture Glyph (TGLP), Character Width (CWDH), Code Map (CMAP), and Kerning (KRNG).&lt;br /&gt;
&lt;br /&gt;
=== Font Information ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;FINF&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Font Type&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Ascent&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Line Feed&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Alternate Character Index&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x3&lt;br /&gt;
|CharacterWidthData&lt;br /&gt;
|Default Character Widths&lt;br /&gt;
|-&lt;br /&gt;
|0x13&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Character Encoding&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Texture Glyph Offset (TGLP)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Character Width Offset (CWDH)&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Code Map Offset (CMAP)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Font Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Glyph&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|0x1&lt;br /&gt;
|Not witnessed by author&lt;br /&gt;
|-&lt;br /&gt;
|PackedTexture&lt;br /&gt;
|0x2&lt;br /&gt;
|Not witnessed by author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Character Encoding ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Utf16&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ShiftJis&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CP1252&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Character Width Data ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|s8&lt;br /&gt;
|Left Width&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Glyph Width&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Character Width&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture Glyph ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;TGLP&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Cell Width&lt;br /&gt;
|-&lt;br /&gt;
|0x9&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Cell Height&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Texture Count&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max Character Width&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Per Texture Size&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Baseline Position&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Image Format&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Cells Per Row&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Cells Per Column&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Image Width&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Image Height&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Image Data Offset ([[Bntx]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Image Format ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Unorm&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8_Unorm&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1_Unorm&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5_Unorm&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4_Unorm&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LA8_Unorm&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LA4_Unorm&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A4_Unorm&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A8_Unorm&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_Unorm&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_Unorm&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_Unorm&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Unorm&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Unorm&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SRGB&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_SRGB&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_SRGB&lt;br /&gt;
|0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_SRGB&lt;br /&gt;
|0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7_Unorm&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7_SRGB&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Character Width ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;CWDH&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|First Entry Index&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Last Entry Index&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Next Character Width Offset (CWDH)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x3&lt;br /&gt;
|CharacterWidthData&lt;br /&gt;
|Character Width Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Code Map ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;CMAP&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Code Range Begin&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Code Range End&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Map Method&lt;br /&gt;
|-&lt;br /&gt;
|0x12&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Next Code Map Offset (CMAP)&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x2&lt;br /&gt;
0x2 * Range&lt;br /&gt;
0x4 + 0x4 * Range&lt;br /&gt;
|Direct&lt;br /&gt;
Table&lt;br /&gt;
Scan&lt;br /&gt;
|See below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Code Map Method ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Direct&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Table&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Scan&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Direct ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Base Character&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2 * Range&lt;br /&gt;
|u16&lt;br /&gt;
|Character&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Scan ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Scan Half Count&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * Range&lt;br /&gt;
|ScanEntry&lt;br /&gt;
|Scan Entry Array (sorted)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Scan Entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Key&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kerning (TODO) ===&lt;br /&gt;
This section has not yet been witnessed by author.&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bflan&amp;diff=91</id>
		<title>Bflan</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bflan&amp;diff=91"/>
		<updated>2023-12-27T03:13:15Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Early Bflan page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nn::ui2d provides the Binary Cafe Layout Animation file format to store animations for Bflyt files.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
[[Common nn::ui2d|Standard ui2d header.]]&lt;br /&gt;
&lt;br /&gt;
There are 3 top level sections, Animation Tag (pat1), Animation Info (pai1), and Animation Share (pah1).&lt;br /&gt;
&lt;br /&gt;
=== Animation Tag ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pat1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Tag Order&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Group Count&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Name Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Group Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|User Data List Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Start Frame&lt;br /&gt;
|-&lt;br /&gt;
|0x1a&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|End Frame&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Group ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x21&lt;br /&gt;
|char[0x21]&lt;br /&gt;
|GroupName&lt;br /&gt;
|-&lt;br /&gt;
|0x21&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Flag&lt;br /&gt;
|-&lt;br /&gt;
|0x22&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Animation Info ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pai1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Frame count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Is looping&lt;br /&gt;
|-&lt;br /&gt;
|0xb&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Texture count&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Animation Content count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Animation Content offset array offset (u32 array of offsets to AnimationContent)&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4 * Texture Count&lt;br /&gt;
|u32&lt;br /&gt;
|Texture name offset array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Target ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Pane&lt;br /&gt;
|0x0&lt;br /&gt;
|Animation targets Panes&lt;br /&gt;
|-&lt;br /&gt;
|Material&lt;br /&gt;
|0x1&lt;br /&gt;
|Animation targets Materials&lt;br /&gt;
|-&lt;br /&gt;
|User&lt;br /&gt;
|0x2&lt;br /&gt;
|Animation targets UserData&lt;br /&gt;
|-&lt;br /&gt;
|PaneExt&lt;br /&gt;
|0x3&lt;br /&gt;
|Seems to duplicate as Pane sometimes?&lt;br /&gt;
|-&lt;br /&gt;
|StateMachine&lt;br /&gt;
|0x4&lt;br /&gt;
|Animation targets StateMachine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Content ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1c&lt;br /&gt;
|char[0x1c]&lt;br /&gt;
|Animation Name&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Animation Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Animation Target&lt;br /&gt;
|-&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4 * Animation Info Count&lt;br /&gt;
|u32&lt;br /&gt;
|Animation Info Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Info Type ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name (unofficial)&lt;br /&gt;
!Magic Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Per Character Transform Curve Anim&lt;br /&gt;
|FLCC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Extended User Data Anim&lt;br /&gt;
|FLEU&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Per Character Transform Anim&lt;br /&gt;
|FLCT&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pane SRT (Scale Rotation Translation) Anim&lt;br /&gt;
|FLPA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Vertex Color Anim&lt;br /&gt;
|FLVC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Visibility Anim&lt;br /&gt;
|FLVI&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Drop Shadow Anim&lt;br /&gt;
|FLDS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mask Texture Anim&lt;br /&gt;
|FLMT&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Procedural Shape Anim&lt;br /&gt;
|FLPS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Window Anim&lt;br /&gt;
|FLWN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|State Machine Anim&lt;br /&gt;
|FSMA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Alpha Compare Anim&lt;br /&gt;
|FLAC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Font Shadow Anim&lt;br /&gt;
|FLFS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Indirect SRT Anim&lt;br /&gt;
|FLIM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Material Color Anim&lt;br /&gt;
|FLMC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Texture SRT Anim&lt;br /&gt;
|FLTS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Texture Pattern Anim&lt;br /&gt;
|FLTP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Brick Repeat Anim&lt;br /&gt;
|FTBR&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Vector Graphics Anim&lt;br /&gt;
|FVGA&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Info ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Animation Info Type Magic&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Animation Target Count&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4 * Animation Target Count&lt;br /&gt;
|u32&lt;br /&gt;
|Animation Target Offset Array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Curve ====&lt;br /&gt;
&lt;br /&gt;
===== Animation Curve Type =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name (unofficial)&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Constant&lt;br /&gt;
|0x0&lt;br /&gt;
|Plain float values&lt;br /&gt;
|-&lt;br /&gt;
|Step&lt;br /&gt;
|0x1&lt;br /&gt;
|Step key frames&lt;br /&gt;
|-&lt;br /&gt;
|Hermite&lt;br /&gt;
|0x2&lt;br /&gt;
|Hermite key frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Step Key =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Key Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Hermite Key =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Key Index&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|float&lt;br /&gt;
|Slope&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Animation Target ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Target Index&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Anim Curve Type&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Frame Count&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Key Array Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Animation Share ===&lt;br /&gt;
Note; at time of writing author has not seen a Bflan with this section&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|Ui2d Section Header&lt;br /&gt;
|Magic: &amp;quot;pah1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Share Info Offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Share Info Count&lt;br /&gt;
|-&lt;br /&gt;
|0xe&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Unknown/Reserved&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Byaml&amp;diff=90</id>
		<title>Byaml</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Byaml&amp;diff=90"/>
		<updated>2023-12-27T02:20:10Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Broken website moment (failed to delete apparently).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Byaml is Nintendo EPD&#039;s binary take on Yet Another Markup Language. It is handled by a dedicated library under the namespace &amp;quot;byaml&amp;quot; in later titles. Every version up to version 10 is supported by Nintendo&#039;s library as of Super Mario Wonder. Library supports both little and big endian.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Magic (&amp;quot;YB&amp;quot; in little-endian, &amp;quot;BY&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version (Up to 10 since Super Mario Wonder)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Key table offset (to ByamlContainer)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String table offset  (to ByamlContainer)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Root data offset (to ByamlContainer)&lt;br /&gt;
|}&lt;br /&gt;
=== Byaml Container ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8 (NodeDataType Enum)&lt;br /&gt;
|Container data type&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Count of container elements&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NodeDataType specific data&lt;br /&gt;
|}&lt;br /&gt;
As of version 10 the root data of a header can point to a non-container type, in which case the ByamlContainer header will contain only the data type, with the single value stored directly after the ByamlContainer header.&lt;br /&gt;
&lt;br /&gt;
=== Node Data Types ===&lt;br /&gt;
u8 enum of node data types that can appear. &amp;quot;Value&amp;quot; describes what the Value in a NodeDataType + Value pair means. These pairs are found in every container type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Name(unofficial)&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Container &amp;quot;Value&amp;quot; Description&lt;br /&gt;
|-&lt;br /&gt;
|HashArray&lt;br /&gt;
|0x20-0x2f&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Hash Array type&lt;br /&gt;
|-&lt;br /&gt;
|HashArrayWithRemap&lt;br /&gt;
|0x30-0x3f&lt;br /&gt;
|Same as above but when accessing elements by index that index is remapped&lt;br /&gt;
|-&lt;br /&gt;
|StringIndex&lt;br /&gt;
|0xa0&lt;br /&gt;
|Value is an index into the string table&lt;br /&gt;
|-&lt;br /&gt;
|BinaryData&lt;br /&gt;
|0xa1&lt;br /&gt;
|Value is an absolute offset from the header to size of binary data followed by the binary data&lt;br /&gt;
|-&lt;br /&gt;
|BinaryDataWithAlignment&lt;br /&gt;
|0xa2&lt;br /&gt;
|Same as above but pointing to the size of the binary data, followed by alignment, followed by binary data&lt;br /&gt;
|-&lt;br /&gt;
|Array&lt;br /&gt;
|0xc0&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Array type&lt;br /&gt;
|-&lt;br /&gt;
|Dictionary&lt;br /&gt;
|0xc1&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Dictionary type&lt;br /&gt;
|-&lt;br /&gt;
|Key/StringTable&lt;br /&gt;
|0xc2&lt;br /&gt;
|(Only found in ByamlContainer pointed to by header)&lt;br /&gt;
|-&lt;br /&gt;
|DictionaryWithRemap&lt;br /&gt;
|0xc4&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Dictionary with remap type&lt;br /&gt;
|-&lt;br /&gt;
|RelocatedKey/StringTable&lt;br /&gt;
|0xc5&lt;br /&gt;
|(Only found in ByamlContainer pointed to by header)&lt;br /&gt;
|-&lt;br /&gt;
|MonoTypedArray&lt;br /&gt;
|0xc8&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Array with remap type&lt;br /&gt;
|-&lt;br /&gt;
|Bool&lt;br /&gt;
|0xd0&lt;br /&gt;
|Value is a bool&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|0xd1&lt;br /&gt;
|Value is a signed 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|F32&lt;br /&gt;
|0xd2&lt;br /&gt;
|Value is a 32-bit floating point number&lt;br /&gt;
|-&lt;br /&gt;
|U32&lt;br /&gt;
|0xd3&lt;br /&gt;
|Value is a unsigned 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|S64&lt;br /&gt;
|0xd4&lt;br /&gt;
|Value is an absolute offset to a signed 64-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|U64&lt;br /&gt;
|0xd5&lt;br /&gt;
|Value is an absolute offset to a unsigned 64-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|F64&lt;br /&gt;
|0xd6&lt;br /&gt;
|Value is an absolute offset to a 64-bit floating point number&lt;br /&gt;
|-&lt;br /&gt;
|Null&lt;br /&gt;
|0xff&lt;br /&gt;
|Value is 0 (null)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Key/String Tables (0xc2, 0xc5) ===&lt;br /&gt;
Only pointed to by the header, these tables are responsible for storing strings. The key table is used for dictionary containers and is sorted, the string table is for string data.&lt;br /&gt;
&lt;br /&gt;
==== Key/String Table (0xc2) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|String offset array, offsets relative  to string table header&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|string data&lt;br /&gt;
|Array of strings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Relocated Key/String Table (0xc5) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|String offset array, except the first element, which is an offset to a u64 value to be added to the other string offsets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hash Array (0x20-0x2f) ===&lt;br /&gt;
Recent container types first noticed (to writer&#039;s knowledge) in the byaml library of the 3d All Stars menu. NodeDataType + Value pairs can be accessed through hash values and indices.&lt;br /&gt;
&lt;br /&gt;
==== Hash Pair ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|(container NodeDataType &amp;amp; 0xf) * 0x4&lt;br /&gt;
|u32[N]&lt;br /&gt;
|Hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Hash Array (0x20-0x2f) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xN * ByamlContainer count&lt;br /&gt;
|HashPair&lt;br /&gt;
|Hash + value array sorted by hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for HashPair value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Hash Array With Remap (0x30-0x3f) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xN * ByamlContainer count&lt;br /&gt;
|HashPair&lt;br /&gt;
|Hash + value array sorted by hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for HashPair value&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(if count &amp;lt; 0x100) 0x1 * ByamlContainer count&lt;br /&gt;
(if count &amp;lt; 0x10000) 0x2 * ByamlContainer count&lt;br /&gt;
&lt;br /&gt;
(else) 0x4 * ByamlContainer count&lt;br /&gt;
|u8, u16, u32&lt;br /&gt;
|Index remap table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Array (0xc0, 0xc8) ===&lt;br /&gt;
Container types where NodeDataType + Value pairs can be accessed through indices.&lt;br /&gt;
&lt;br /&gt;
==== Array (0xc0) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType array matching index of value&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|Value array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mono-Typed Array (0xc8) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1 (aligned up by 0x4)&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for every array value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|Value array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Dictionary (0xc1, 0xc4) ===&lt;br /&gt;
Container types where NodeDataType + Value pairs can be accessed through a string key or indices.&lt;br /&gt;
&lt;br /&gt;
==== Byaml Dictionary Pair ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Key table index&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Node Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dictionary (0xc1) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8 * ByamlContainer count&lt;br /&gt;
|ByamlDictionaryPair&lt;br /&gt;
|Dictionary pair array sorted by key index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dictionary With Remap (0xc4) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8 * ByamlContainer count&lt;br /&gt;
|ByamlDictionaryPair&lt;br /&gt;
|Dictionary pair array sorted by key index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(if count &amp;lt; 0x100) 0x1 * ByamlContainer count&lt;br /&gt;
(if count &amp;lt; 0x10000) 0x2 * ByamlContainer count&lt;br /&gt;
&lt;br /&gt;
(else) 0x4 * ByamlContainer count&lt;br /&gt;
|u8, u16, u32&lt;br /&gt;
|Index remap table&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Byaml&amp;diff=89</id>
		<title>Byaml</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Byaml&amp;diff=89"/>
		<updated>2023-12-27T02:18:15Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Minor update for version 10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Byaml is Nintendo EPD&#039;s binary take on Yet Another Markup Language. It is handled by a dedicated library under the namespace &amp;quot;byaml&amp;quot; in later titles. Every version up to version 10 is supported by Nintendo&#039;s library as of Super Mario Wonder. Library supports both little and big endian.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Magic (&amp;quot;YB&amp;quot; in little-endian, &amp;quot;BY&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version (Up to 10 since Super Mario Wonder)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Key table offset (to ByamlContainer)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|String table offset  (to ByamlContainer)&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Root data offset (to ByamlContainer)&lt;br /&gt;
|}&lt;br /&gt;
As of version 10 the root data can point to a non-container type, in which the value will be stored directly after the ByamlContainer&lt;br /&gt;
&lt;br /&gt;
=== Byaml Container ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8 (NodeDataType Enum)&lt;br /&gt;
|Container data type&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Count of container elements&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|NodeDataType specific data&lt;br /&gt;
|}&lt;br /&gt;
As of version 10 the root data of a header can point to a non-container type, in which case the ByamlContainer header will contain only the data type, with the single value stored directly after the ByamlContainer header.&lt;br /&gt;
&lt;br /&gt;
=== Node Data Types ===&lt;br /&gt;
u8 enum of node data types that can appear. &amp;quot;Value&amp;quot; describes what the Value in a NodeDataType + Value pair means. These pairs are found in every container type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Name(unofficial)&lt;br /&gt;
!Enum Value&lt;br /&gt;
!Container &amp;quot;Value&amp;quot; Description&lt;br /&gt;
|-&lt;br /&gt;
|HashArray&lt;br /&gt;
|0x20-0x2f&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Hash Array type&lt;br /&gt;
|-&lt;br /&gt;
|HashArrayWithRemap&lt;br /&gt;
|0x30-0x3f&lt;br /&gt;
|Same as above but when accessing elements by index that index is remapped&lt;br /&gt;
|-&lt;br /&gt;
|StringIndex&lt;br /&gt;
|0xa0&lt;br /&gt;
|Value is an index into the string table&lt;br /&gt;
|-&lt;br /&gt;
|BinaryData&lt;br /&gt;
|0xa1&lt;br /&gt;
|Value is an absolute offset from the header to size of binary data followed by the binary data&lt;br /&gt;
|-&lt;br /&gt;
|BinaryDataWithAlignment&lt;br /&gt;
|0xa2&lt;br /&gt;
|Same as above but pointing to the size of the binary data, followed by alignment, followed by binary data&lt;br /&gt;
|-&lt;br /&gt;
|Array&lt;br /&gt;
|0xc0&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Array type&lt;br /&gt;
|-&lt;br /&gt;
|Dictionary&lt;br /&gt;
|0xc1&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Dictionary type&lt;br /&gt;
|-&lt;br /&gt;
|Key/StringTable&lt;br /&gt;
|0xc2&lt;br /&gt;
|(Only found in ByamlContainer pointed to by header)&lt;br /&gt;
|-&lt;br /&gt;
|DictionaryWithRemap&lt;br /&gt;
|0xc4&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Dictionary with remap type&lt;br /&gt;
|-&lt;br /&gt;
|RelocatedKey/StringTable&lt;br /&gt;
|0xc5&lt;br /&gt;
|(Only found in ByamlContainer pointed to by header)&lt;br /&gt;
|-&lt;br /&gt;
|MonoTypedArray&lt;br /&gt;
|0xc8&lt;br /&gt;
|Value is an absolute offset to a ByamlContainer of the Array with remap type&lt;br /&gt;
|-&lt;br /&gt;
|Bool&lt;br /&gt;
|0xd0&lt;br /&gt;
|Value is a bool&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|0xd1&lt;br /&gt;
|Value is a signed 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|F32&lt;br /&gt;
|0xd2&lt;br /&gt;
|Value is a 32-bit floating point number&lt;br /&gt;
|-&lt;br /&gt;
|U32&lt;br /&gt;
|0xd3&lt;br /&gt;
|Value is a unsigned 32-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|S64&lt;br /&gt;
|0xd4&lt;br /&gt;
|Value is an absolute offset to a signed 64-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|U64&lt;br /&gt;
|0xd5&lt;br /&gt;
|Value is an absolute offset to a unsigned 64-bit integer&lt;br /&gt;
|-&lt;br /&gt;
|F64&lt;br /&gt;
|0xd6&lt;br /&gt;
|Value is an absolute offset to a 64-bit floating point number&lt;br /&gt;
|-&lt;br /&gt;
|Null&lt;br /&gt;
|0xff&lt;br /&gt;
|Value is 0 (null)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Key/String Tables (0xc2, 0xc5) ===&lt;br /&gt;
Only pointed to by the header, these tables are responsible for storing strings. The key table is used for dictionary containers and is sorted, the string table is for string data.&lt;br /&gt;
&lt;br /&gt;
==== Key/String Table (0xc2) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|String offset array, offsets relative  to string table header&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|string data&lt;br /&gt;
|Array of strings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Relocated Key/String Table (0xc5) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|String offset array, except the first element, which is an offset to a u64 value to be added to the other string offsets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hash Array (0x20-0x2f) ===&lt;br /&gt;
Recent container types first noticed (to writer&#039;s knowledge) in the byaml library of the 3d All Stars menu. NodeDataType + Value pairs can be accessed through hash values and indices.&lt;br /&gt;
&lt;br /&gt;
==== Hash Pair ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|(container NodeDataType &amp;amp; 0xf) * 0x4&lt;br /&gt;
|u32[N]&lt;br /&gt;
|Hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Hash Array (0x20-0x2f) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xN * ByamlContainer count&lt;br /&gt;
|HashPair&lt;br /&gt;
|Hash + value array sorted by hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for HashPair value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Hash Array With Remap (0x30-0x3f) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0xN * ByamlContainer count&lt;br /&gt;
|HashPair&lt;br /&gt;
|Hash + value array sorted by hash&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for HashPair value&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(if count &amp;lt; 0x100) 0x1 * ByamlContainer count&lt;br /&gt;
(if count &amp;lt; 0x10000) 0x2 * ByamlContainer count&lt;br /&gt;
&lt;br /&gt;
(else) 0x4 * ByamlContainer count&lt;br /&gt;
|u8, u16, u32&lt;br /&gt;
|Index remap table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Array (0xc0, 0xc8) ===&lt;br /&gt;
Container types where NodeDataType + Value pairs can be accessed through indices.&lt;br /&gt;
&lt;br /&gt;
==== Array (0xc0) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1 * ByamlContainer count&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType array matching index of value&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|Value array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Mono-Typed Array (0xc8) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1 (aligned up by 0x4)&lt;br /&gt;
|u8&lt;br /&gt;
|NodeDataType for every array value&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4 * ByamlContainer count&lt;br /&gt;
|u32&lt;br /&gt;
|Value array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Dictionary (0xc1, 0xc4) ===&lt;br /&gt;
Container types where NodeDataType + Value pairs can be accessed through a string key or indices.&lt;br /&gt;
&lt;br /&gt;
==== Byaml Dictionary Pair ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|Key table index&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Node Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dictionary (0xc1) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4-7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8 * ByamlContainer count&lt;br /&gt;
|ByamlDictionaryPair&lt;br /&gt;
|Dictionary pair array sorted by key index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dictionary With Remap (0xc4) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 7&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|ByamlContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x8 * ByamlContainer count&lt;br /&gt;
|ByamlDictionaryPair&lt;br /&gt;
|Dictionary pair array sorted by key index&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(if count &amp;lt; 0x100) 0x1 * ByamlContainer count&lt;br /&gt;
(if count &amp;lt; 0x10000) 0x2 * ByamlContainer count&lt;br /&gt;
&lt;br /&gt;
(else) 0x4 * ByamlContainer count&lt;br /&gt;
|u8, u16, u32&lt;br /&gt;
|Index remap table&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bntx&amp;diff=74</id>
		<title>Bntx</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bntx&amp;diff=74"/>
		<updated>2023-05-09T21:04:11Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Fix links 2.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bntx is a texture archive file format implemented by nn::gfx.&lt;br /&gt;
&lt;br /&gt;
=== Header (nn::gfx::ResTextureFile) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x20&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryFileHeader|nn::util::BinaryFileHeader]]&lt;br /&gt;
|Magic (&amp;quot;BNTX    &amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x28&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureContainer|nn::gfx::ResTextureContainer]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureContainer ===&lt;br /&gt;
Container for holding an array of texture info, and information about the GPU region containing textures&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;NX  &amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Texture count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureInfo|ResTextureInfo]] **&lt;br /&gt;
|Texture info array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureData|ResTextureData]] *&lt;br /&gt;
|Texture data gpu region header&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Texture info dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place MemoryPool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|User MemoryPool (initialized by nn::gfx to point to the in-place MemoryPool if one is not provided)&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|s32&lt;br /&gt;
|Base MemoryPool offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureInfo ===&lt;br /&gt;
Block contains all the data necessary to initialize a Texture and a TextureView object in nn::gfx.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryBlockHeader|nn::util::BinaryBlockHeader]]&lt;br /&gt;
|Magic (&amp;quot;BRTI&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x28&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::TextureInfo|nn::gfx::TextureInfo]]&lt;br /&gt;
|Texture info for nn::gfx&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|u8[4]&lt;br /&gt;
|Packaged texture layout?&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x14&lt;br /&gt;
|u8[0x14]&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Total texture size (including all mip maps)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Texture data alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|nn::gfx::ChannelSource[4]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|nn::gfx::ImageDimension&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x3&lt;br /&gt;
|u8[3]&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|Texture name&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureContainer|nn::gfx::ResTextureContainer]] *&lt;br /&gt;
|Pointer to parent texture container&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|void **&lt;br /&gt;
|Array of pointers to each texture mip map level&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#Gfx User Data|Gfx User Data]] *&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TTexture *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TTextureView *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place TextureView&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::DescriptorSlot&lt;br /&gt;
|Runtime descriptor slot for the registered Texture + TextureView&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureData ===&lt;br /&gt;
This block header directly precedes the 0x1000 byte page aligned GPU memory region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryBlockHeader|nn::util::BinaryBlockHeader]]&lt;br /&gt;
|Magic (&amp;quot;BRTD&amp;quot; in big-endian)&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Bntx&amp;diff=73</id>
		<title>Bntx</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Bntx&amp;diff=73"/>
		<updated>2023-05-09T21:02:07Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Create Bntx page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bntx is a texture archive file format implemented by nn::gfx.&lt;br /&gt;
&lt;br /&gt;
=== Header (nn::gfx::ResTextureFile) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x20&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryFileHeader|nn::util::BinaryFileHeader]]&lt;br /&gt;
|Magic (&amp;quot;BNTX    &amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x28&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureContainer|nn::gfx::ResTextureContainer]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureContainer ===&lt;br /&gt;
Container for holding an array of texture info, and information about the GPU region containing textures&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;NX  &amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Texture count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#ResTextureInfo|ResTextureInfo]] **&lt;br /&gt;
|Texture info array&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#ResTextureData|ResTextureData]] *&lt;br /&gt;
|Texture data gpu region header&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|Texture info dictionary&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place MemoryPool&lt;br /&gt;
|-&lt;br /&gt;
|0x28&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TMemoryPool *&lt;br /&gt;
|User MemoryPool (initialized by nn::gfx to point to the in-place MemoryPool if one is not provided)&lt;br /&gt;
|-&lt;br /&gt;
|0x30&lt;br /&gt;
|0x4&lt;br /&gt;
|s32&lt;br /&gt;
|Base MemoryPool offset&lt;br /&gt;
|-&lt;br /&gt;
|0x34&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureInfo ===&lt;br /&gt;
Block contains all the data necessary to initialize a Texture and a TextureView object in nn::gfx.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryBlockHeader|nn::util::BinaryBlockHeader]]&lt;br /&gt;
|Magic (&amp;quot;BRTI&amp;quot; in big-endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x28&lt;br /&gt;
|[[Common nn::gfx#nn::gfx::TextureInfo|nn::gfx::TextureInfo]]&lt;br /&gt;
|Texture info for nn::gfx&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x4&lt;br /&gt;
|u8[4]&lt;br /&gt;
|Packaged texture layout?&lt;br /&gt;
|-&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x14&lt;br /&gt;
|u8[0x14]&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x50&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Total texture size (including all mip maps)&lt;br /&gt;
|-&lt;br /&gt;
|0x54&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Texture data alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x58&lt;br /&gt;
|0x4&lt;br /&gt;
|nn::gfx::ChannelSource[4]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5c&lt;br /&gt;
|0x1&lt;br /&gt;
|nn::gfx::ImageDimension&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x5d&lt;br /&gt;
|0x3&lt;br /&gt;
|u8[3]&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x60&lt;br /&gt;
|0x8&lt;br /&gt;
|const char * (NW)&lt;br /&gt;
|Texture name&lt;br /&gt;
|-&lt;br /&gt;
|0x68&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Bntx#nn::gfx::ResTextureContainer|nn::gfx::ResTextureContainer]] *&lt;br /&gt;
|Pointer to parent texture container&lt;br /&gt;
|-&lt;br /&gt;
|0x70&lt;br /&gt;
|0x8&lt;br /&gt;
|void **&lt;br /&gt;
|Array of pointers to each texture mip map level&lt;br /&gt;
|-&lt;br /&gt;
|0x78&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::gfx#Gfx User Data|Gfx User Data]] *&lt;br /&gt;
|User data array&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TTexture *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::TTextureView *&lt;br /&gt;
|Points to reserved 0x100 byte region for an in-place TextureView&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|0x8&lt;br /&gt;
|nn::gfx::DescriptorSlot&lt;br /&gt;
|Runtime descriptor slot for the registered Texture + TextureView&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|0x8&lt;br /&gt;
|[[Common nn::util#nn::util::ResDic|nn::util::ResDic]] *&lt;br /&gt;
|User data dictionary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ResTextureData ===&lt;br /&gt;
This block header directly precedes the 0x1000 byte page aligned GPU memory region.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Version 4.1.0&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x10&lt;br /&gt;
|[[Common nn::util#nn::util::BinaryBlockHeader|nn::util::BinaryBlockHeader]]&lt;br /&gt;
|Magic (&amp;quot;BRTD&amp;quot; in big-endian)&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=72</id>
		<title>Common nn::gfx</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=72"/>
		<updated>2023-05-09T20:53:51Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Spell check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Structures and enums from nn::gfx appearing across nn::gfx file formats and nn::g3d file formats. Notably the nn::gfx formats [[Bnsh]] and [[Bntx]], as well as nn::g3d [[Bfres]].&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolFlags ===&lt;br /&gt;
Flags denoting how a memory pool can be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CpuNoAccess&lt;br /&gt;
|0x1 (1 &amp;lt;&amp;lt; 0)&lt;br /&gt;
|Memory is unable to be mapped to CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuUncached&lt;br /&gt;
|0x2 (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
|Memory is coherent on CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuCached&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Memory is cached on CPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuNoAccess&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Memory is unable to be read by the GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuUncached&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Memory is coherent on GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuCached&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Memory is cached on GPU&lt;br /&gt;
|-&lt;br /&gt;
|ShaderCode&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Memory is shader code for the GPU&lt;br /&gt;
|-&lt;br /&gt;
|Compressible&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Physical&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Virtual&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::MemoryPoolFlags)&lt;br /&gt;
|MemoryPool flags&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 &lt;br /&gt;
|Memory size&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Memory pointer (must be 0x1000 aka page aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::GpuAccessFlags ===&lt;br /&gt;
Flags denoting how a buffer or texture will be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|VertexBuffer&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Vertex buffer&lt;br /&gt;
|-&lt;br /&gt;
|IndexBuffer&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Index buffer&lt;br /&gt;
|-&lt;br /&gt;
|UniformBuffer&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Uniform/Storage buffer&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Texture&lt;br /&gt;
|-&lt;br /&gt;
|TransferDestination&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Transfer destination&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetColor&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|For render target colors&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetDepth&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|For render target depths&lt;br /&gt;
|-&lt;br /&gt;
|IndirectDraw&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|For indirect draw commands&lt;br /&gt;
|-&lt;br /&gt;
|DisplayTexture&lt;br /&gt;
|0x400 (1 &amp;lt;&amp;lt; 10)&lt;br /&gt;
|For present&lt;br /&gt;
|-&lt;br /&gt;
|Counter&lt;br /&gt;
|0x800 (1 &amp;lt;&amp;lt; 11)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BufferInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Buffer size&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|GPU access flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx:::ImageStorageDimension ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Type1D&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type2D&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type3D&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TileMode (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Optimal&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ChannelFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1&lt;br /&gt;
|0x1a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H&lt;br /&gt;
|0x1f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4x4&lt;br /&gt;
|0x2d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x4&lt;br /&gt;
|0x2e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x5&lt;br /&gt;
|0x2f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x5&lt;br /&gt;
|0x30&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x6&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x5&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x6&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x8&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x5&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x6&lt;br /&gt;
|0x26&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x8&lt;br /&gt;
|0x37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x10&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x10&lt;br /&gt;
|0x39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x12&lt;br /&gt;
|0x3a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1&lt;br /&gt;
|0x3b&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TypeFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Unorm&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Snorm&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SInt&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SRGB&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Depth&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UScaled&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SScaled&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UFloat&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ImageFormat ===&lt;br /&gt;
Image formats are formed by a ChannelFormat and a TypeFormat. ImageFormat = (ChannelFormat &amp;lt;&amp;lt; 8) | TypeFormat&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|R8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Z16_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F_SharedFloat&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32F_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_SF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_UF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0:0&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Packaged Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:1&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse Binding&lt;br /&gt;
|-&lt;br /&gt;
|0x0:2&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse&lt;br /&gt;
|-&lt;br /&gt;
|0x0:3&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is ResTexture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:4&lt;br /&gt;
|4 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Storage dimension (nn::gfx::ImageStorageDimension)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Tile mode (nn::gfx::TileMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Swizzle (???)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Mip levels&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Sample count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Image format (nn::gfx::ImageFormat)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Gpu access flags (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Depth&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Array layers&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Packaged texture layout (???)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureAddressMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Repeat&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorRepeat&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToEdge&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToBorder&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorClampToBorder&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ComparisonFunction ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Never&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThan&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equal&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreateThan&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NotEqual&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Always&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BorderColor (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|White&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TransparentBlack&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MipMapFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MagFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MinFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ReductionFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Average&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Min&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Max&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::SamplerInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode U (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode V (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode W (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|CompareOp (nn::gfx::ComparisonFunction)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Border color (nn::gfx::BorderColor)&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:0&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|MipMap filter (nn::gfx::MipMapFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:2&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Mag filter (nn::gfx::MagFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:4&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Min filter (nn::gfx::MinFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:6&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:7&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable CompareOp&lt;br /&gt;
|-&lt;br /&gt;
|0x6:8&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reduction filter (nn::gfx::ReductionFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:a&lt;br /&gt;
|6 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp min&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod bias&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx Embed File ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Offset to file&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of file&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data Type ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Byte&lt;br /&gt;
|0x3&lt;br /&gt;
|Used for arbitrary binary data (other files)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|const char *&lt;br /&gt;
|User data name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|User data (can be nullptr)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|s32&lt;br /&gt;
|User data entries&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|User Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x2b&lt;br /&gt;
|u8[0x2b]&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=71</id>
		<title>Common nn::gfx</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_nn::gfx&amp;diff=71"/>
		<updated>2023-05-09T20:35:02Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Correct enum class names and mark unofficial ones.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Structures and enums from nn::gfx appearing across nn::gfx file formats and nn::g3d file formats. Notably the nn::gfx formats [[Bnsh]] and [[Bntx]], as well as nn::g3d [[Bfres]].&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolFlags ===&lt;br /&gt;
Flags denoting how a memory pool can be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CpuNoAccess&lt;br /&gt;
|0x1 (1 &amp;lt;&amp;lt; 0)&lt;br /&gt;
|Memory is unable to be mapped to CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuUncached&lt;br /&gt;
|0x2 (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
|Memory is coherent on CPU&lt;br /&gt;
|-&lt;br /&gt;
|CpuCached&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Memory is cached on CPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuNoAccess&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Memory is unable to be read by the GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuUncached&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Memory is coherent on GPU&lt;br /&gt;
|-&lt;br /&gt;
|GpuCached&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Memory is cached on GPU&lt;br /&gt;
|-&lt;br /&gt;
|ShaderCode&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Memory is shader code for the GPU&lt;br /&gt;
|-&lt;br /&gt;
|Compressible&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Physical&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|Virtual&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MemoryPoolInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::MemoryPoolFlags)&lt;br /&gt;
|MemoryPool flags&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 &lt;br /&gt;
|Memory size&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Memory pointer (must be 0x1000 aka page aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::GpuAccessFlags ===&lt;br /&gt;
Flags denoting how a buffer or texture will be accessed.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|VertexBuffer&lt;br /&gt;
|0x4 (1 &amp;lt;&amp;lt; 2)&lt;br /&gt;
|Vertex buffer&lt;br /&gt;
|-&lt;br /&gt;
|IndexBuffer&lt;br /&gt;
|0x8 (1 &amp;lt;&amp;lt; 3)&lt;br /&gt;
|Index buffer&lt;br /&gt;
|-&lt;br /&gt;
|UniformBuffer&lt;br /&gt;
|0x10 (1 &amp;lt;&amp;lt; 4)&lt;br /&gt;
|Uniform/Storage buffer&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|0x20 (1 &amp;lt;&amp;lt; 5)&lt;br /&gt;
|Texture&lt;br /&gt;
|-&lt;br /&gt;
|TransferDestination&lt;br /&gt;
|0x40 (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
|Transfer destination&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetColor&lt;br /&gt;
|0x80 (1 &amp;lt;&amp;lt; 7)&lt;br /&gt;
|For render target colors&lt;br /&gt;
|-&lt;br /&gt;
|RenderTargetDepth&lt;br /&gt;
|0x100 (1 &amp;lt;&amp;lt; 8)&lt;br /&gt;
|For render target depths&lt;br /&gt;
|-&lt;br /&gt;
|IndirectDraw&lt;br /&gt;
|0x200 (1 &amp;lt;&amp;lt; 9)&lt;br /&gt;
|For indirect draw commands&lt;br /&gt;
|-&lt;br /&gt;
|DisplayTexture&lt;br /&gt;
|0x400 (1 &amp;lt;&amp;lt; 10)&lt;br /&gt;
|For present&lt;br /&gt;
|-&lt;br /&gt;
|Counter&lt;br /&gt;
|0x800 (1 &amp;lt;&amp;lt; 11)&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BufferInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Buffer size&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x4&lt;br /&gt;
|u32 (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|GPU access flags&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx:::ImageStorageDimension ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Type1D&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type2D&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Type3D&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TileMode (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Optimal&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ChannelFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8&lt;br /&gt;
|0xb&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8&lt;br /&gt;
|0xc&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F&lt;br /&gt;
|0xd&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2&lt;br /&gt;
|0xe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F&lt;br /&gt;
|0xf&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16&lt;br /&gt;
|0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8&lt;br /&gt;
|0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32&lt;br /&gt;
|0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16&lt;br /&gt;
|0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8&lt;br /&gt;
|0x16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32&lt;br /&gt;
|0x17&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32&lt;br /&gt;
|0x18&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32&lt;br /&gt;
|0x19&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1&lt;br /&gt;
|0x1a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4&lt;br /&gt;
|0x1d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5&lt;br /&gt;
|0x1e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H&lt;br /&gt;
|0x1f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U&lt;br /&gt;
|0x20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4x4&lt;br /&gt;
|0x2d&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x4&lt;br /&gt;
|0x2e&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5x5&lt;br /&gt;
|0x2f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x5&lt;br /&gt;
|0x30&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6x6&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x5&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x6&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8x8&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x5&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x6&lt;br /&gt;
|0x26&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x8&lt;br /&gt;
|0x37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10x10&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x10&lt;br /&gt;
|0x39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12x12&lt;br /&gt;
|0x3a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1&lt;br /&gt;
|0x3b&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TypeFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Unorm&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Snorm&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UInt&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SInt&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SRGB&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Depth&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UScaled&lt;br /&gt;
|0x8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SScaled&lt;br /&gt;
|0x9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UFloat&lt;br /&gt;
|0xa&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ImageFormat ===&lt;br /&gt;
Image formats are formed by a ChannelFormat and a TypeFormat. ImageFormat = (ChannelFormat &amp;lt;&amp;lt; 8) | TypeFormat&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|R8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R4G4B4A4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G5B5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|A1B5G5R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R5G6B5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G6R5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Z16_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R8G8B8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B8G8R8A8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R9G9B9E5F_SharedFloat&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R10G10B10A2_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R11G11B10F_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D24S8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32F_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R16G16B16A16_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D32FS8_Depth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_UInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_SInt&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|R32G32B32A32_Float&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC1_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC2_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC3_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC4_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC5_Snorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_SF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC6H_UF16&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BC7U_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_4X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X4_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_5X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_6X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_8X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X5_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X6_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X8_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_10X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X10_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ASTC_12X12_SRGB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|B5G5R5A1_Unorm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0:0&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Packaged Texture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:1&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse Binding&lt;br /&gt;
|-&lt;br /&gt;
|0x0:2&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is Sparse&lt;br /&gt;
|-&lt;br /&gt;
|0x0:3&lt;br /&gt;
|1 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Is ResTexture&lt;br /&gt;
|-&lt;br /&gt;
|0x0:4&lt;br /&gt;
|4 bit&lt;br /&gt;
|u8&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Storage dimension (nn::gfx::ImageStorageDimension)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Tile mode (nn::gfx::TileMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Swizzle (???)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Mip levels&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Sample count&lt;br /&gt;
|-&lt;br /&gt;
|0xa&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Image format (nn::gfx::ImageFormat)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Gpu access flags (nn::gfx::GpuAccessFlags)&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Width&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Height&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Depth&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Array layers&lt;br /&gt;
|-&lt;br /&gt;
|0x24&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Packaged texture layout (???)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::TextureAddressMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Repeat&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorRepeat&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToEdge&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ClampToBorder&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MirrorClampToBorder&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ComparisonFunction ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Never&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThan&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Equal&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LessThanEqual&lt;br /&gt;
|0x3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreateThan&lt;br /&gt;
|0x4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NotEqual&lt;br /&gt;
|0x5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GreaterThanEqual&lt;br /&gt;
|0x6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Always&lt;br /&gt;
|0x7&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::BorderColor (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|White&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TransparentBlack&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MipMapFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|None&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MagFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::MinFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Invalid&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nearest&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Linear&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::ReductionFilter (Unofficial) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Average&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Min&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Max&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== nn::gfx::SamplerInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode U (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x1&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode V (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x2&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Wrap Mode W (nn::gfx::TextureAddressMode)&lt;br /&gt;
|-&lt;br /&gt;
|0x3&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|CompareOp (nn::gfx::ComparisonFunction)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Border color (nn::gfx::BorderColor)&lt;br /&gt;
|-&lt;br /&gt;
|0x5&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:0&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|MipMap filter (nn::gfx::MipMapFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:2&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Mag filter (nn::gfx::MagFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:4&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Min filter (nn::gfx::MinFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:6&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable anisotropy&lt;br /&gt;
|-&lt;br /&gt;
|0x6:7&lt;br /&gt;
|1 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Enable CompareOp&lt;br /&gt;
|-&lt;br /&gt;
|0x6:8&lt;br /&gt;
|2 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reduction filter (nn::gfx::ReductionFilter)&lt;br /&gt;
|-&lt;br /&gt;
|0x6:a&lt;br /&gt;
|6 bit&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp min&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod clamp max&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|Float&lt;br /&gt;
|Lod bias&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|-&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx Embed File ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|Offset to file&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Size of file&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data Type ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name (Unofficial)&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|S32&lt;br /&gt;
|0x0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Float&lt;br /&gt;
|0x1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Strin&lt;br /&gt;
|0x2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Byte&lt;br /&gt;
|0x3&lt;br /&gt;
|Used for arbitrary binary data (other files)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gfx User Data ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x8&lt;br /&gt;
|cosnt char *&lt;br /&gt;
|User data name&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x8&lt;br /&gt;
|void *&lt;br /&gt;
|User data (can be nullptr)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|s32&lt;br /&gt;
|User data entries&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|User Data Type&lt;br /&gt;
|-&lt;br /&gt;
|0x15&lt;br /&gt;
|0x2b&lt;br /&gt;
|u8[0x2b]&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=70</id>
		<title>Sarc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=70"/>
		<updated>2023-05-09T20:25:50Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sarc is a file archive format. Files are typically accessed by a binary sorted by a hash value derived from a custom hash function. For a more detailed article, see: https://github.com/Kinnay/Nintendo-File-Formats/wiki/SARC-File-Format&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SARC&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Endianess (Always reads as 0xfeff in platform&#039;s native endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Total file size&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array offset&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfat Section ===&lt;br /&gt;
The sfat section follows after the sarc header (header + size of header).&lt;br /&gt;
&lt;br /&gt;
==== Sfat Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|File count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Hash seed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sfat Entry Array ====&lt;br /&gt;
The sfat entry array follows the sfat header (header + size of header). Array is sized by the sfat header file count, and is sorted by a custom hash derived from the hash seed in the sfat header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File name hash&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|File name offset (may be invalid)&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Number of file hash collisions&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array start offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array end offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfnt Section ===&lt;br /&gt;
Following the sfat section is the sfnt section, a header preceding an array of file path of null-terminated strings.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x8)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=69</id>
		<title>Sarc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=69"/>
		<updated>2023-05-09T20:25:30Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: Link Kinnay&amp;#039;s sarc documentation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sarc is a file archive format. Files are typically accessed by a binary sorted by a hash value derived from a custom hash function. See for a more detailed article: https://github.com/Kinnay/Nintendo-File-Formats/wiki/SARC-File-Format&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SARC&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Endianess (Always reads as 0xfeff in platform&#039;s native endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Total file size&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array offset&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfat Section ===&lt;br /&gt;
The sfat section follows after the sarc header (header + size of header).&lt;br /&gt;
&lt;br /&gt;
==== Sfat Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|File count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Hash seed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sfat Entry Array ====&lt;br /&gt;
The sfat entry array follows the sfat header (header + size of header). Array is sized by the sfat header file count, and is sorted by a custom hash derived from the hash seed in the sfat header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File name hash&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|File name offset (may be invalid)&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Number of file hash collisions&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array start offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array end offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfnt Section ===&lt;br /&gt;
Following the sfat section is the sfnt section, a header preceding an array of file path of null-terminated strings.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x8)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=68</id>
		<title>Sarc</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Sarc&amp;diff=68"/>
		<updated>2023-05-09T20:06:55Z</updated>

		<summary type="html">&lt;p&gt;Watertoon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sarc is a file archive format. Files are typically accessed by a binary sorted by a hash value derived from a custom hash function.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SARC&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Endianess (Always reads as 0xfeff in platform&#039;s native endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Total file size&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array offset&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Alignment&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Version&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfat Section ===&lt;br /&gt;
The sfat section follows after the sarc header (header + size of header).&lt;br /&gt;
&lt;br /&gt;
==== Sfat Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x14)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|File count&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Hash seed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sfat Entry Array ====&lt;br /&gt;
The sfat entry array follows the sfat header (header + size of header). Array is sized by the sfat header file count, and is sorted by a custom hash derived from the hash seed in the sfat header.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File name hash&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x3&lt;br /&gt;
|u24&lt;br /&gt;
|File name offset (may be invalid)&lt;br /&gt;
|-&lt;br /&gt;
|0x7&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Number of file hash collisions&lt;br /&gt;
|-&lt;br /&gt;
|0x8&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array start offset&lt;br /&gt;
|-&lt;br /&gt;
|0xc&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|File array end offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sfnt Section ===&lt;br /&gt;
Following the sfat section is the sfnt section, a header preceding an array of file path of null-terminated strings.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Size&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x0&lt;br /&gt;
|0x4&lt;br /&gt;
|u32&lt;br /&gt;
|Magic (&amp;quot;SFAT&amp;quot; in big endian)&lt;br /&gt;
|-&lt;br /&gt;
|0x4&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Size of header (0x8)&lt;br /&gt;
|-&lt;br /&gt;
|0x6&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Reserved&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Watertoon</name></author>
	</entry>
</feed>