ASB
ASB (Animation Sequence Binary) is a file format used to store animation sequences for actors in recent Nintendo EPD games such as The Legend of Zelda: Tears of the Kingdom and Nintendo Switch Sports. This article is primarily aimed at the version that appears in Tears of the Kingdom (v0x0417). ASB files can be found in the AS folder of the romfs as well as the AS folder of certain pack files.
File Structure
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.
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).
Section Order
- File Header (0x6C bytes in version 0x417, 0x68 bytes in version 0x40F)
- AS Commands
- Nodes
- Event Entries Offsets
- Node Bodies
- 0x38 Section Indices
- 0x38 Section
- 0x2C Section
- Events
- Transitions (possibly the wrong description)
- 0x64 Section
- Local Blackboard Parameters
- 0x34 Section (possibly animation slots)
- Bone Groups
- 0x40 Section
- Tag List
- Expression Binary
- String Triplets
- Tag Groups
- Command Groups
- 0x28 Section
- String Pool
Sections
File Header
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x04 | char[4] | Magic - "ASB " |
0x04 | 0x04 | u32 | Version (0x0417 in Tears of the Kingdom, 0x040F in Nintendo Switch Sports and Splatoon 3) |
0x08 | 0x04 | u32 | Filename Offset |
0x0C | 0x04 | u32 | AS Command Count |
0x10 | 0x04 | u32 | Node Count |
0x14 | 0x04 | u32 | Event Count |
0x18 | 0x04 | u32 | 0x34 Section Entry Count |
0x1C | 0x04 | u32 | 0x38 Section Entry Count |
0x20 | 0x04 | u32 | Local Blackboard Parameters Offset |
0x24 | 0x04 | u32 | String Pool Offset |
0x28 | 0x04 | u32 | 0x28 Section Offset |
0x2C | 0x04 | u32 | 0x2C Section Offset |
0x30 | 0x04 | u32 | Event Entries Offset Array Offset |
0x34 | 0x04 | u32 | 0x34 Section Offset |
0x38 | 0x04 | u32 | 0x38 Section Offset |
0x3C | 0x04 | u32 | 0x38 Section Indices Array Offset |
0x40 | 0x04 | u32 | 0x40 Section Offset |
0x44 | 0x04 | u32 | 0x40 Section Entry Count |
0x48 | 0x04 | u32 | Bone Groups Offset |
0x4C | 0x04 | u32 | Bone Group Count |
0x50 | 0x04 | u32 | String Pool Size |
0x54 | 0x04 | u32 | Transitions Offset |
0x58 | 0x04 | u32 | Tag List Offset |
0x5C | 0x04 | u32 | String Triplets Offset |
0x60 | 0x04 | u32 | EXB Offset (empty if section does not exist) |
0x64 | 0x04 | u32 | 0x64 Section Offset (empty if section does not exist) |
0x68 | 0x04 | u32 | Command Groups Offset (version 0x417 only) |