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