<?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=Dt12345</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=Dt12345"/>
	<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/wiki/Special:Contributions/Dt12345"/>
	<updated>2026-04-28T13:44:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=128</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=128"/>
		<updated>2025-01-09T04:19:03Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: update resident update stuff -&amp;gt; active node&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;
# 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) - only &#039;&#039;TotK&#039;&#039; ( for &#039;&#039;Splatoon 3&#039;&#039;, 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=127</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=127"/>
		<updated>2025-01-09T04:02:53Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: immediate param -&amp;gt; internal param and added node flag 3&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;
# Internal 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;
|Internal 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; ( for &#039;&#039;Splatoon 3&#039;&#039;, 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 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;
|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;
|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 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 internalparameters 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 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;
==== 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=125</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=125"/>
		<updated>2024-11-30T17:22:43Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: link to github repo while documentation is still incomplete&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=124</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=124"/>
		<updated>2024-11-30T17:17:41Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: small correction&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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;
==== 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=123</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=123"/>
		<updated>2024-11-30T17:15:20Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: name change 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 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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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&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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=122</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=122"/>
		<updated>2024-11-30T17:14:04Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: some naming updates&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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&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 preset index. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Pp&amp;diff=117</id>
		<title>Pp</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Pp&amp;diff=117"/>
		<updated>2024-04-12T19:16:38Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added enum maps&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;
=== PropEnumMap ===&lt;br /&gt;
Extends Composite.&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;
=== TypedParamEnumMap ===&lt;br /&gt;
Extends Composite.&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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=114</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=114"/>
		<updated>2024-04-12T01:17:04Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: minor update&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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&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 Presets&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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 Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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 preset index. 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 Preset Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Preset 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_Phive&amp;diff=111</id>
		<title>Common Phive</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_Phive&amp;diff=111"/>
		<updated>2024-04-06T21:57:44Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: small fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Common Phive 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;
|0x6&lt;br /&gt;
|char[6]&lt;br /&gt;
|Magic (&amp;quot;Phive\x00&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserve&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserve&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Byte Order Mark&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Phive File Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max Section Capacity (N)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x4 * N&lt;br /&gt;
|u32 * N&lt;br /&gt;
|Section Offset Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0C + 0x4 * N&lt;br /&gt;
|0x4 * N&lt;br /&gt;
|u32 * N&lt;br /&gt;
|Section Size Array&lt;br /&gt;
|}&lt;br /&gt;
The header is padded to 0x10 bytes. The last non-empty offset in the section offset array is the file size. While the header structure is identical across all Phive formats (with the exception of BPHHB which is just an AAMP file), the sections contained will vary from format to format.&lt;br /&gt;
&lt;br /&gt;
=== Phive File Types ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Phive File Types&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!File Type&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0x0&lt;br /&gt;
|Shape&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0x1&lt;br /&gt;
|NavMesh&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|0x2&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|0x3&lt;br /&gt;
|Cloth&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=106</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=106"/>
		<updated>2024-02-21T02:14:01Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: update Element_StateEnd&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;
# Entry Strings&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;
|Entry Strings Offset (purpose unknown)&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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=104</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=104"/>
		<updated>2024-02-01T23:18:51Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: /* ASB Parameter */&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Partial Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Presets&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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 Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Partial Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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;
|0x68 Section 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;
|s32&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 parameter flags are negative, then the bottom two bytes of flag are an index value and value at 0x04 becomes the default value.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;flags &amp;amp; 0x81000000 == 0&amp;lt;/code&amp;gt;, the index is an EXB function index. Otherwise, if the datatype is not float or vector3f, the index is an ASB blackboard index. If the datatype is float or vector3f, then if &amp;lt;code&amp;gt;(flags &amp;gt;&amp;gt; 0xe) &amp;lt; 3 or (flags &amp;gt;&amp;gt; 8) &amp;amp; 1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;(flag &amp;gt;&amp;gt; 9) &amp;amp; 1 == 0&amp;lt;/code&amp;gt;, the flag is an ASB blackboard index (appears to be exceptions but they aren&#039;t well understood). Otherwise, the the index is a calculation preset index.&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;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x22&lt;br /&gt;
|0x04&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;
|0x3C Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&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 Preset Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Preset Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x3C Entry 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; |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;
&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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=103</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=103"/>
		<updated>2024-02-01T21:40:34Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added node types&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Partial Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Presets&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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 Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Partial Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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;
|0x68 Section 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;
|s32&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 parameter flags are negative, then the bottom two bytes of flag are an index value.&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;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x22&lt;br /&gt;
|0x04&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;
|0x3C Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&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 Preset Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Preset Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x3C Entry 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; |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;
&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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=102</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=102"/>
		<updated>2024-02-01T21:31:36Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added node info&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Partial Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Presets&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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 Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Partial Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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;
|0x68 Section 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;
|s32&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 parameter flags are negative, then the bottom two bytes of flag are an index value.&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;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x22&lt;br /&gt;
|0x04&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;
|0x3C Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|&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 Preset Index&lt;br /&gt;
|-&lt;br /&gt;
|0x0E&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Calculation Preset Count&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|0x3C Entry 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; |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;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=101</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=101"/>
		<updated>2024-02-01T21:23:10Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added AS commands section&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; (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;), and 0x418 (&#039;&#039;Super Mario Bros. Wonder&#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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Partial Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Presets&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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 Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Partial Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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;
|0x68 Section 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;
|s32&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 parameter flags are negative, then the bottom two bytes of flag are an index value.&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;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Filename Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|0x08&lt;br /&gt;
|Parameter&amp;lt;s32&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x20&lt;br /&gt;
|0x02&lt;br /&gt;
|u16&lt;br /&gt;
|Child Node Index&lt;br /&gt;
|-&lt;br /&gt;
|0x22&lt;br /&gt;
|0x04&lt;br /&gt;
|u16&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=100</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=100"/>
		<updated>2024-01-17T03:30:08Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added page category&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; (v0x0417). 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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Animation Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# Calculation Presets&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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;
|Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Animation Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Presets Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Calculation Preset 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;
|EXB 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;
|0x68 Section Offset (version 0x417 only)&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=Common_Phive&amp;diff=99</id>
		<title>Common Phive</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=Common_Phive&amp;diff=99"/>
		<updated>2024-01-17T02:46:08Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: created page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Common Phive 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;
|0x6&lt;br /&gt;
|char[6]&lt;br /&gt;
|Magic (&amp;quot;Phive\x00&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|0x06&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserve&lt;br /&gt;
|-&lt;br /&gt;
|0x07&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Reserve&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|0x2&lt;br /&gt;
|u16&lt;br /&gt;
|Byte Order Mark&lt;br /&gt;
|-&lt;br /&gt;
|0x0A&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Phive File Type&lt;br /&gt;
|-&lt;br /&gt;
|0x0B&lt;br /&gt;
|0x1&lt;br /&gt;
|u8&lt;br /&gt;
|Max Section Capacity (N)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x4 * N&lt;br /&gt;
|u32 * N&lt;br /&gt;
|Section Offset Array&lt;br /&gt;
|-&lt;br /&gt;
|0x0C + 0x4 * N&lt;br /&gt;
|0x4 * N&lt;br /&gt;
|u32 * N&lt;br /&gt;
|Section Size Array&lt;br /&gt;
|}&lt;br /&gt;
The header is padded to 0x10 bytes. The last non-empty offset in the section offset array is the file size. While the header structure is identical across all Phive formats (with the exception of BPHHB which is just an AAMP file), the sections contained will vary from format to format.&lt;br /&gt;
&lt;br /&gt;
=== Phive File Types ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Phive File Types&lt;br /&gt;
!Value (Dec)&lt;br /&gt;
!Value (Hex)&lt;br /&gt;
!File Type&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0x0&lt;br /&gt;
|Shape&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0x1&lt;br /&gt;
|NavMesh&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|0x2&lt;br /&gt;
|StaticCompound&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|0x3&lt;br /&gt;
|Cloth&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|0x4&lt;br /&gt;
|ControllerSet (unconfirmed)&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=98</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=98"/>
		<updated>2024-01-08T22:50:44Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: I was going to finish this but I don&amp;#039;t have the motivation to rn so I just made a few small fixes to what already was here&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; (v0x0417). 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).&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;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# Animation Slots&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# 0x40 Section&lt;br /&gt;
# Valid Tag List&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# AS Markings&lt;br /&gt;
# 0x68 Section (version 0x417 only)&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 (0x0417 in &#039;&#039;Tears of the Kingdom&#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;
|Slot Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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 Table Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|Animation Slots Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Entry 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;
|EXB 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;
|0x68 Section Offset (version 0x417 only)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=96</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=96"/>
		<updated>2023-12-31T04:55:32Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: mixed up two sections accidentally&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; (v0x0417). 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.&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).&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 Entries Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions (possibly the wrong description)&lt;br /&gt;
# Command Groups&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# 0x34 Section (possibly animation slots)&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# 0x40 Section&lt;br /&gt;
# Tag List&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# String Triplets&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# 0x68 Section&lt;br /&gt;
# 0x28 Section&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;
|+&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;, 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;
|0x34 Section Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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;
|0x28 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|0x34 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Entry 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;
|EXB 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;
|0x68 Section Offset (version 0x417 only)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=95</id>
		<title>ASB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=ASB&amp;diff=95"/>
		<updated>2023-12-31T04:21:09Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: started on an overview, will finish when the rest of the format is finished&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; (v0x0417). 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.&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).&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 Entries Offsets&lt;br /&gt;
# Node Bodies&lt;br /&gt;
# 0x38 Section Indices&lt;br /&gt;
# 0x38 Section&lt;br /&gt;
# 0x2C Section&lt;br /&gt;
# Events&lt;br /&gt;
# Transitions (possibly the wrong description)&lt;br /&gt;
# 0x64 Section&lt;br /&gt;
# Local Blackboard Parameters&lt;br /&gt;
# 0x34 Section (possibly animation slots)&lt;br /&gt;
# Bone Groups&lt;br /&gt;
# 0x40 Section&lt;br /&gt;
# Tag List&lt;br /&gt;
# Expression Binary&lt;br /&gt;
# String Triplets&lt;br /&gt;
# Tag Groups&lt;br /&gt;
# Command Groups&lt;br /&gt;
# 0x28 Section&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;
|+&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;, 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;
|0x34 Section Entry Count&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Entry 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;
|0x28 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x2C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x2C Section 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;
|0x34 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x38&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x38 Section Indices Array Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x40&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Offset&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|0x40 Section Entry 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;
|EXB 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;
|0x64 Section 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;
|Command Groups Offset (version 0x417 only)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=94</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=94"/>
		<updated>2023-12-31T04:20:46Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: fixed a preposition :P&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;
# Entry Strings&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;
|Entry Strings Offset (purpose unknown)&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&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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=88</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=88"/>
		<updated>2023-12-26T19:00:38Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: switched to module terminology&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 on &#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;
# Entry Strings&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;
|Entry Strings Offset (purpose unknown)&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&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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=87</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=87"/>
		<updated>2023-12-26T18:35:41Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: figured out the other one too&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 on &#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, 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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=86</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=86"/>
		<updated>2023-12-26T18:34:10Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: figured out what one of the unknown hashes was&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 on &#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, 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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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;
|Unknown Hash&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=85</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=85"/>
		<updated>2023-12-25T20:40:20Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: changed bool size&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 on &#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, 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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=84</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=84"/>
		<updated>2023-12-07T18:31:31Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: fixed formatting&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 on &#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, 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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=83</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=83"/>
		<updated>2023-12-01T04:25:39Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: &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 on &#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, 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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=82</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=82"/>
		<updated>2023-12-01T04:24:56Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added exb section&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=81</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=81"/>
		<updated>2023-12-01T03:59:11Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added all sections except exb&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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.&lt;br /&gt;
&lt;br /&gt;
// TODO: finish&lt;br /&gt;
&lt;br /&gt;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=80</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=80"/>
		<updated>2023-12-01T03:19:29Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added info on all the short sections&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
&lt;br /&gt;
==== Immediate Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&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.&lt;br /&gt;
&lt;br /&gt;
==== Embedded AINB Files ====&lt;br /&gt;
This section contains an array of all external AINB files 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;
|+Embedded AINB File 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;
==== Entry Strings ====&lt;br /&gt;
The purpose of this section is unknown. 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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=79</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=79"/>
		<updated>2023-12-01T02:58:09Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: fixed formatting&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
&lt;br /&gt;
==== Immediate Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Resident Update Array ====&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;
&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.&lt;br /&gt;
&lt;br /&gt;
==== Embedded AINB Files ====&lt;br /&gt;
&lt;br /&gt;
==== Entry Strings ====&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;
&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;
&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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=78</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=78"/>
		<updated>2023-12-01T02:56:50Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: &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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
&lt;br /&gt;
==== Immediate Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Resident Update Array ====&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;
&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.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Embedded AINB Files&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Entry Strings&#039;&#039;&#039; ====&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;
==== &#039;&#039;&#039;Child Replacement Table&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;0x6C Section&#039;&#039;&#039; ====&lt;br /&gt;
This section is unused in &#039;&#039;Tears of the Kingdom&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Enum Resolve Array&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;String Pool&#039;&#039;&#039; ====&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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=77</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=77"/>
		<updated>2023-12-01T02:53:57Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: added child node info&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
&lt;br /&gt;
==== Immediate Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Multi-Parameters ====&lt;br /&gt;
&lt;br /&gt;
==== Resident Update Array ====&lt;br /&gt;
&lt;br /&gt;
==== 0x50 Section ====&lt;br /&gt;
&lt;br /&gt;
==== Precondition Nodes Array ====&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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Embedded AINB Files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entry Strings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Child Replacement Table&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x6C Section&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enum Resolve Array&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;String Pool&#039;&#039;&#039;&lt;br /&gt;
&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.&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=76</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=76"/>
		<updated>2023-12-01T02:28:52Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: &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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
// TODO: finish&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
	<entry>
		<id>https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=75</id>
		<title>AINB</title>
		<link rel="alternate" type="text/html" href="https://epd.zeldamods.org/w/index.php?title=AINB&amp;diff=75"/>
		<updated>2023-12-01T02:27:45Z</updated>

		<summary type="html">&lt;p&gt;Dt12345: created AINB page and started documenting things&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 on &#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, 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;
&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;
# Embedded AINB Files&lt;br /&gt;
# Entry Strings&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;
==== 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 TotK, 0x0404 in S3 and NSS)&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;
|Embedded AINB Files 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;
|Entry Strings Offset (purpose unknown)&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;
|Passes a signed int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_String&lt;br /&gt;
|Passes a string as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Input_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as input&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_S32&lt;br /&gt;
|Passes a signed int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_F32&lt;br /&gt;
|Passes a 32-bit float as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Vec3f&lt;br /&gt;
|Passes a vector3f as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_String&lt;br /&gt;
|Passes a string as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Bool&lt;br /&gt;
|Passes a boolean int as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Output_Ptr&lt;br /&gt;
|Passes a pointer as output to another node as output&lt;br /&gt;
|-&lt;br /&gt;
|Element_ModuleIF_Child&lt;br /&gt;
|Unsure, appears to just be a node connected to a ModuleIF node as a child node&lt;br /&gt;
|-&lt;br /&gt;
|Element_StateEnd&lt;br /&gt;
|Termination node&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 External AINB File&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;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|&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;
|&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;
|&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;
|&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 and float parameters, the entry is a four byte immediate value. String entries are a four byte string value offset. Bool entries are a single byte immediate value and 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;
|Unknown Hash&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|0x04&lt;br /&gt;
|u32&lt;br /&gt;
|Unknown Hash&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 TotK)&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|0x01&lt;br /&gt;
|u8&lt;br /&gt;
|Unknown Connection Type Base Index (Unused TotK)&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;
// TODO: finish&lt;br /&gt;
[[Category:File formats]]&lt;/div&gt;</summary>
		<author><name>Dt12345</name></author>
	</entry>
</feed>