Difference between revisions of "ANCS (File Format)"

From Retro Modding Wiki
Jump to: navigation, search
m (Footer)
(Animation Set)
 
(30 intermediate revisions by 3 users not shown)
Line 1: Line 1:
The '''ANCS format''' defines characters for animation in Metroid Prime 1 and 2. Starting in Metroid Prime 3, it was replaced by the [[CHAR (Metroid Prime 3)|CHAR]] format. The extension stands for '''AN'''imation '''C'''haracter '''S'''et.
+
The '''ANCS format''' defines character sets and animation sets in Metroid Prime 1 and 2. Starting in Metroid Prime 3, it was replaced by the [[CHAR (File Format)|CHAR]] and [[SAND (File Format)|SAND]] formats. The extension stands for '''AN'''imation '''C'''haracter '''S'''et.
 
+
{{todo|Notate Metroid Prime 2 differences.}}
+
{{researchmajor|reason=Most of the file structure is known, but we still don't know what any of it actually is! Also, the table at the end of the file is unknown.}}
+
  
 
__TOC__
 
__TOC__
  
== Header ==
+
== Format ==
  
The ANCS format is split up into multiple nodes. Each node defines a character - a model, a skeleton, and a skin - and then sets a number of animation-related parameters on each one. At the end of the file, after every node, is a listing of [[ANIM (File Format)|ANIM]] and [[EVNT (File Format)|EVNT]] files.
+
{| class="wikitable"
 +
! Type
 +
! Name
 +
! Notes
 +
|-
 +
| u16
 +
| '''Version'''
 +
| Always 1.
 +
|-
 +
| [[#Character Set|Character Set]]
 +
| '''Character Set'''
 +
| Set of characters that share animation data.
 +
|-
 +
| [[#Animation Set|Animation Set]]
 +
| '''Animation Set'''
 +
| Set of animations used by the characters in the character set.
 +
|}
  
There's a very short 8-byte header before the nodes begin.
+
=== Character Set ===
  
 
{| class="wikitable"
 
{| class="wikitable"
! Offset
+
! Type
! Size
+
! Count
! Description
+
! Name
 +
! Notes
 
|-
 
|-
| 0x0
+
| u16
| 2
+
| 1
| {{unknown|'''Unknown'''; always 1}}
+
| '''Version'''
 +
| Always 1.
 
|-
 
|-
| 0x2
+
| u32
| 2
+
| 1
| {{unknown|'''Unknown'''; always 1 (maybe actually one 32-bit magic?)}}
+
| '''Character Count'''
|-
+
| Count of characters in this set.
| 0x4
+
| 4
+
| '''Node count'''
+
 
|-
 
|-
| 0x8
+
| [[#Character|Character]]
| colspan=2 {{unknown|Nodes begin}}
+
| ''Character Count''
 +
| '''Characters Array'''
 +
| Array of characters.
 
|}
 
|}
  
== Nodes ==
+
==== Character ====
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
 
! Count
 
! Count
! Description
+
! Name
 +
! Notes
 +
! V1
 +
! V2
 +
! V4
 +
! V5
 +
! V10
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Node number'''; starts at 0, increases by 1 on each subsequent node
+
| '''Character ID'''
 +
| Typically begins at 0 and increments by 1 on each successive character in the set.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u16
 
| u16
 
| 1
 
| 1
| {{unknown|Flags? This value can alter the structure of the file. Usually 6.}}
+
| '''Version'''
 +
| This can vary between different files/characters. Usually 5 or 6 in MP1 and 10 in MP2.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| string
 
| string
 
| 1
 
| 1
| '''Node name''' (zero-terminated)
+
| '''Name'''
 +
| Name of the character. Not used by the game; was likely included for debugging purposes.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[CMDL (Metroid Prime)|CMDL]]
+
| Asset ID ([[CMDL (Metroid Prime)|CMDL]])
 
| 1
 
| 1
| '''Model'''
+
| '''Model ID'''
 +
| ID of the model used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[CSKR (File Format)|CSKR]]
+
| Asset ID ([[CSKR_(File_Format)|CSKR]])
 
| 1
 
| 1
| '''Skin'''
+
| '''Skin ID'''
 +
| ID of the skin used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[CINF (File Format)|CINF]]
+
| Asset ID ([[CINF_(File_Format)|CINF]])
 
| 1
 
| 1
| '''Skeleton'''
+
| '''Skeleton ID'''
 +
| ID of the skeleton used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Animation count'''
+
| '''Animation Name Count'''
|}
+
| Count of animation names in the next array.
 
+
| {{check}}
This struct then repeats ''animation count'' times:
+
| {{check}}
 
+
| {{check}}
{| class="wikitable"
+
| {{check}}
! Type
+
| {{check}}
! Count
+
|-
! Description
+
| [[#Animation Name|Animation Name]]
 +
| ''Animation Name Count''
 +
| '''Animation Name Array'''
 +
| Array of names of animations used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[PAS Database]]
 +
| 1
 +
| '''PAS Database'''
 +
| Not much is known about how this data is used.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[#Particle Resource Data|Particle Resource Data]]
 +
| 1
 +
| '''Particle Resource Data'''
 +
| List of particle assets being used by this character. This includes particles being used by attached effects as well as by [[EVNT (File Format)|animation events]].
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Animation number'''; starts with 0, increases by 1 on each subsequent animation
+
| {{unknown}}
 +
|
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| {{unknown}}
 +
|
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| '''Animation AABB Count'''
 +
| Count of animation bounding boxes.
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[#Animation AABB|Animation AABB]]
 +
| ''Animation AABB Count''
 +
| '''Animation AABB Array'''
 +
| Array of animation bounding boxes for this character.
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| '''Effect Count'''
 +
| Count of attached effects.
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[#Effect|Effect]]
 +
| ''Effect Count''
 +
| '''Effect Array'''
 +
| Effects attached to this character.
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[CMDL_(Metroid_Prime)|CMDL]])
 +
| 1
 +
| '''Frozen Model'''
 +
| Overlay model that appears when the character is frozen with the Ice/Dark Beam.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[CSKR_(File_Format)|CSKR]])
 +
| 1
 +
| '''Frozen Skin'''
 +
| Skin for rigging the ''Frozen Model'' to the character's skeleton.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| '''Animation Count'''
 +
| Count of animations used by this character.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| ''Animation Count''
 +
| '''Animation ID Map'''
 +
| Array of animation IDs. Indexing this array with the character-relative animation ID returns the animset-relative animation ID.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[CSPP (File Format)|CSPP]])
 +
| 1
 +
| '''Spatial Primitives ID'''
 +
| ID of the spatial primitives used by this character.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 
|-
 
|-
 
| u8
 
| u8
 
| 1
 
| 1
| {{unknown|'''Unknown'''; usually 0}}
+
| {{unknown}}
 +
|  
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 
|-
 
|-
| string
+
| u32
 
| 1
 
| 1
| '''Animation name''' (zero-terminated)
+
| '''Indexed Animation AABB Count'''
 +
| Count of indexed animation bounding boxes.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
|-
 +
| [[#Indexed Animation AABB|Indexed Animation AABB]]
 +
| ''Indexed Animation AABB Count''
 +
| '''Indexed Animation AABB Array'''
 +
| Unknown purpose.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 
|}
 
|}
  
=== PAS Database ===
+
===== Animation Name =====
 
+
The next part of the file is the PAS Database, which creates animation states and sets parameters on them. The PAS Database header is structured:
+
  
 
{| class="wikitable"
 
{| class="wikitable"
! Offset
+
! Type
! Size
+
! Name
! Description
+
! Notes
 +
! V1
 +
! V10
 
|-
 
|-
| 0x0
+
| u32
| 4
+
| '''Animation ID'''
| '''"PAS4" magic''' fourCC
+
| Character-relative animation ID. Must be remapped via the ''Animation ID Map'' to access the corresponding animation in the animset.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| 0x4
+
| string
| 4
+
| {{unknown|'''Unknown'''}}
| '''Anim state count'''
+
| Always empty.
 +
| {{check}}
 +
| {{nocheck}}
 
|-
 
|-
| 0x8
+
| string
| 4
+
| '''Animation Name'''
| '''Default state''' (will be 0xFFFFFFFF on files with no anim states)
+
| The name of the animation.
 +
| {{check}}
 +
| {{check}}
 
|}
 
|}
  
==== Anim State ====
+
===== Particle Resource Data =====
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
 
! Count
 
! Count
! Description
+
! Name
 +
! Notes
 +
! V5
 +
! V6
 +
! V10
 
|-
 
|-
| u32
+
| u32  
 
| 1
 
| 1
| {{unknown|'''Unknown'''}}
+
| '''Generic Particle Count'''
 +
| Count of generic particle systems.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[PART (File Format)|PART]])
 +
| ''Generic Particle Count''
 +
| '''Generic Particle List'''
 +
| List of generic particle systems used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Parm Info count''' (PC)
+
| '''Swoosh Particle Count'''
 +
| Count of swoosh particle systems.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[SWHC (File Format)|SWHC]])
 +
| ''Swoosh Particle Count''
 +
| '''Swoosh Particle List'''
 +
| List of swoosh particle systems used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| {{unknown}}
 +
| Always 0.
 +
| {{nocheck}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| u32
 +
| 1
 +
| '''Electric Particle Count'''
 +
| Count of electric particle systems.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| Asset ID ([[ELSC_(File_Format)|ELSC]])
 +
| ''Electric Particle Count''
 +
| '''Electric Particle List'''
 +
| List of electric particle systems used by this character.
 +
| {{check}}
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Anim Info count''' (AC)
+
| '''Spawn Particle Count'''
 +
| Count of spawn particle systems.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 
|-
 
|-
| [[#Parm Info|Parm Info]]
+
| Asset ID ([[SPSC (File Format)|SPSC]])
| PC
+
| ''Spawn Particle Count''
| '''Parm Info'''
+
| '''Spawn Particle List'''
 +
| List of spawn particle systems used by this character.
 +
| {{nocheck}}
 +
| {{nocheck}}
 +
| {{check}}
 +
|}
 +
 
 +
===== Animation AABB =====
 +
 
 +
{| class="wikitable"
 +
! Type
 +
! Name
 +
! Notes
 +
|-
 +
| string
 +
| '''Animation Name'''
 +
|
 
|-
 
|-
| [[#Anim Info|Anim Info]]
+
| {{AABox}}
| AC
+
| '''Animation Bounding Box'''
| '''Anim Info'''
+
|
 
|}
 
|}
  
===== Parm Info =====
+
===== Indexed Animation AABB =====
 +
 
 +
Similar to [[#Animation AABB|Animation AABB]], but with animations referenced via ID instead of name.
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
! Count
+
! Name
! Description
+
! Notes
 
|-
 
|-
 
| u32
 
| u32
 +
| '''Animation ID'''
 +
| Confirm this is character-relative?
 +
|-
 +
| {{AABox}}
 +
| '''Animation Bounding Box'''
 +
|
 +
|}
 +
 +
===== Effect =====
 +
 +
{| class="wikitable"
 +
! Type
 +
! Count
 +
! Name
 +
! Notes
 +
|-
 +
| string
 
| 1
 
| 1
| '''Parm Type'''; enum ranging from 0 to 4, see below for possible values
+
| '''Effect Name'''
 +
| Name of the effect.
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| {{unknown|'''Unknown'''}}
+
| '''Effect Component Count'''
|-
+
| Count of effect components
| float
+
| 1
+
| {{unknown|'''Unknown'''}}
+
 
|-
 
|-
| ParmType
+
| [[#Effect Component|Effect Component]]
| 2
+
| ''Effect Component Count''
| '''Parms'''
+
| '''Effect Components'''
 +
| Array of effect components used by this effect.
 
|}
 
|}
  
These are the possible types that can be specified by Parm Type:
+
====== Effect Component ======
  
 
{| class="wikitable"
 
{| class="wikitable"
! Value
 
! Size
 
 
! Type
 
! Type
 +
! Name
 +
! Notes
 
|-
 
|-
| 0
+
| string
| 4
+
| '''Component Name'''
| s32
+
| Name of this effect component.
 
|-
 
|-
| 1
+
| {{FourCC}}
| 4
+
| '''Particle Asset Type'''
| u32
+
| Type of the particle used by this effect.
 +
|-
 +
| Asset ID
 +
| '''Particle Asset ID'''
 +
| Particle resource used by this effect.
 +
|-
 +
| string
 +
| '''Bone Name'''
 +
| Bone that the component is attached to.
 
|-
 
|-
| 2
 
| 4
 
 
| float
 
| float
 +
| '''Scale'''
 +
| Scale of the component.
 
|-
 
|-
| 3
+
| u32
| 1
+
| '''Parented Mode'''
| bool
+
| Needs documentation
 
|-
 
|-
| 4
+
| u32
| 4
+
| '''Flags'''
| enum
+
| Needs documentation
 
|}
 
|}
  
===== Anim Info =====
+
=== Animation Set ===
 
+
The Anim Info structure is a little unorthodox. It starts with an unknown 32-bit value, and then is followed by a set of values. There's one value present per Parm Info instance, and the type of each value corresponds to that Parm Info's Parm Type setting.
+
 
+
=== Particles ===
+
 
+
Note: if the flag value at the start of the node is 5 instead of 6, when of these values is missing. It's currently not known specifically which one it toggles, so be careful.
+
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
 
! Count
 
! Count
! Description
+
! Name
 +
! Notes
 +
! MP1
 +
! MP2
 +
|-
 +
| u16
 +
| 1
 +
| '''Version'''
 +
| Always 4. Note there are format differences between MP1 and MP2 despite them both being version 4.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Particle count''' (PC)
+
| '''Animation Count'''
 +
| Count of animations contained by the set.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[PART (File Format)|PART]]
+
| [[#Animation|Animation]]
| PC
+
| ''Animation Count''
| '''Particle file IDs'''
+
| '''Animation Array'''
 +
| Array of animations.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Swoosh particle count''' (SC)
+
| '''Transition Count'''
 +
| Count of transitions contained by the set.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[SWHC (File Format)|SWHC]]
+
| [[#Transition|Transition]]
| SC
+
| ''Transition Count''
| '''Swoosh particle file IDs'''
+
| '''Transition Array'''
 +
| Array of transitions.
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[Meta-Transition]]
 +
| 1
 +
| '''Default Transition'''
 +
|
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| {{unknown|'''Unknown'''}}
+
| '''Additive Animation Count'''
 +
| Count of additive animations contained by the set.
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| [[#Additive Animation|Additive Animation]]
 +
| ''Additive Animation Count''
 +
| '''Additive Animation Array'''
 +
| Array of additive animations. Although any animation can be used as additive, this array allows for customizing the fade in/out time for each animation.
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| float
 +
| 1
 +
| '''Default Additive Fade-In Time'''
 +
| Fade-in time used for additive animations not listed in the above array.
 +
| {{check}}
 +
| {{check}}
 +
|-
 +
| float
 +
| 1
 +
| '''Default Additive Fade-Out Time'''
 +
| Fade-out time used for additive animations not listed in the above array.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| '''Electric particle count''' (EC)
+
| '''Half Transition Count'''
 +
| Count of half transitions contained by the set.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
| [[ELSC (File Format)|ELSC]]
+
| [[#Half Transition|Half Transition]]
| EC
+
| ''Half Transition Count''
| '''Electric particle file IDs'''
+
| '''Half Transition Array'''
 +
| Array of half transitions.
 +
| {{check}}
 +
| {{check}}
 
|-
 
|-
 
| u32
 
| u32
 
| 1
 
| 1
| {{unknown|'''Unknown'''}}
+
| '''Animation Resource Count'''
 +
| Count of animation assets used by this set.
 +
| {{check}}
 +
| {{nocheck}}
 +
|-
 +
| [[#Animation Resource Pair|Animation Resource Pair]]
 +
| ''Animation Resource Count''
 +
| '''Animation Resource List'''
 +
| List of animation assets used by this set.
 +
| {{check}}
 +
| {{nocheck}}
 +
|-
 +
| u32
 +
| 1
 +
| '''Event Set Count'''
 +
| Count of event sets. Matches the animation count.
 +
| {{nocheck}}
 +
| {{check}}
 +
|-
 +
| [[EVNT_(File_Format)|Event Set]]
 +
| ''Event Set Count''
 +
| '''Event Set Array'''
 +
| Array of animation events. Each event set maps to the animation at the same index. Note this is basically MP1's [[EVNT (File Format)|EVNT]] file format, but embedded in ANCS.
 +
| {{nocheck}}
 +
| {{check}}
 
|}
 
|}
  
=== Animations ===
+
==== Animation ====
 
+
This section begins with a 32-bit count value, then this struct repeats:
+
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
! Count
+
! Name
! Description
+
! Notes
 
|-
 
|-
 
| string
 
| string
| 1
+
| '''Name'''
| '''Animation name'''
+
| Animation name.
 
|-
 
|-
| float
+
| [[Meta-Animation]]
| 6
+
| '''Animation'''
| {{unknown|'''Unknown'''; possibly an AABB}}
+
| Meta-animation data.
 
|}
 
|}
  
=== Effects ===
+
==== Transition ====
 
+
This section is used for effect placement - binding particles to bones, which is used for things like Space Pirate eye fire. It starts with a 32-bit count value, then this stuct repeats:
+
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
! Count
+
! Name
! Description
+
! Notes
 
|-
 
|-
| string
+
| u32
| 1
+
| {{unknown}}
| '''Effect name'''
+
|  
 
|-
 
|-
 
| u32
 
| u32
| 1
+
| '''Animation ID A'''
| {{unknown|'''Unknown'''}}
+
| The animation being transitioned from.
 
|-
 
|-
| string
+
| u32
| 1
+
| '''Animation ID B'''
| '''Effect name 2'''
+
| The animation being transitioned to.
 
|-
 
|-
| char
+
| [[Meta-Transition]]
| 4
+
| '''Transition'''
| '''"PART" fourCC'''
+
| Meta-transition data.
 +
|}
 +
 
 +
==== Additive Animation ====
 +
 
 +
{| class="wikitable"
 +
! Type
 +
! Name
 +
! Notes
 
|-
 
|-
| [[PART (File Format)|PART]]
+
| u32
| 1
+
| '''Animation ID'''
| '''Particle file ID'''
+
|
 
|-
 
|-
| string
+
| float
| 1
+
| '''Fade-In Time'''
| '''Bone name'''
+
| Fade-in duration.
 
|-
 
|-
 
| float
 
| float
| 1
+
| '''Fade-Out Time'''
| {{unknown|'''Unknown'''}}
+
| Fade-out duration.
 +
|}
 +
 
 +
==== Half Transition ====
 +
 
 +
{| class="wikitable"
 +
! Type
 +
! Name
 +
! Notes
 
|-
 
|-
 
| u32
 
| u32
| 1
+
| '''Animation ID'''
| {{unknown|'''Unknown'''}}
+
| The animation being transitioned from.
 
|-
 
|-
| u32
+
| [[Meta-Transition]]
| 1
+
| '''Transition'''
| {{unknown|'''Unknown'''}}
+
| Meta-transition data.
 
|}
 
|}
  
=== Footer ===
+
==== Animation Resource Pair ====
 
+
The end of the node structure contains this data:
+
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Type
 
! Type
! Count
+
! Name
! Description
+
 
|-
 
|-
| [[CMDL (Metroid Prime)|CMDL]]
+
| Asset ID ([[ANIM_(File_Format)|ANIM]])
| 1
+
| '''ANIM ID'''
| {{unknown|'''Unknown model'''}}
+
 
|-
 
|-
| [[CSKR (Metroid Prime)|CSKR]]
+
| Asset ID ([[EVNT_(File_Format)|EVNT]])
| 1
+
| '''EVNT ID'''
| {{unknown|'''Unknown skin'''}}
+
|-
+
| u32
+
| 1
+
| {{unknown|'''Unknown count''' (UC)}}
+
|-
+
| u32
+
| UC
+
| {{unknown|'''Unknowns'''}}
+
 
|}
 
|}
  

Latest revision as of 02:04, 3 March 2017

The ANCS format defines character sets and animation sets in Metroid Prime 1 and 2. Starting in Metroid Prime 3, it was replaced by the CHAR and SAND formats. The extension stands for ANimation Character Set.

Format

Type Name Notes
u16 Version Always 1.
Character Set Character Set Set of characters that share animation data.
Animation Set Animation Set Set of animations used by the characters in the character set.

Character Set

Type Count Name Notes
u16 1 Version Always 1.
u32 1 Character Count Count of characters in this set.
Character Character Count Characters Array Array of characters.

Character

Type Count Name Notes V1 V2 V4 V5 V10
u32 1 Character ID Typically begins at 0 and increments by 1 on each successive character in the set.
u16 1 Version This can vary between different files/characters. Usually 5 or 6 in MP1 and 10 in MP2.
string 1 Name Name of the character. Not used by the game; was likely included for debugging purposes.
Asset ID (CMDL) 1 Model ID ID of the model used by this character.
Asset ID (CSKR) 1 Skin ID ID of the skin used by this character.
Asset ID (CINF) 1 Skeleton ID ID of the skeleton used by this character.
u32 1 Animation Name Count Count of animation names in the next array.
Animation Name Animation Name Count Animation Name Array Array of names of animations used by this character.
PAS Database 1 PAS Database Not much is known about how this data is used.
Particle Resource Data 1 Particle Resource Data List of particle assets being used by this character. This includes particles being used by attached effects as well as by animation events.
u32 1 Unknown
u32 1 Unknown
u32 1 Animation AABB Count Count of animation bounding boxes.
Animation AABB Animation AABB Count Animation AABB Array Array of animation bounding boxes for this character.
u32 1 Effect Count Count of attached effects.
Effect Effect Count Effect Array Effects attached to this character.
Asset ID (CMDL) 1 Frozen Model Overlay model that appears when the character is frozen with the Ice/Dark Beam.
Asset ID (CSKR) 1 Frozen Skin Skin for rigging the Frozen Model to the character's skeleton.
u32 1 Animation Count Count of animations used by this character.
u32 Animation Count Animation ID Map Array of animation IDs. Indexing this array with the character-relative animation ID returns the animset-relative animation ID.
Asset ID (CSPP) 1 Spatial Primitives ID ID of the spatial primitives used by this character.
u8 1 Unknown
u32 1 Indexed Animation AABB Count Count of indexed animation bounding boxes.
Indexed Animation AABB Indexed Animation AABB Count Indexed Animation AABB Array Unknown purpose.
Animation Name
Type Name Notes V1 V10
u32 Animation ID Character-relative animation ID. Must be remapped via the Animation ID Map to access the corresponding animation in the animset.
string Unknown Always empty.
string Animation Name The name of the animation.
Particle Resource Data
Type Count Name Notes V5 V6 V10
u32 1 Generic Particle Count Count of generic particle systems.
Asset ID (PART) Generic Particle Count Generic Particle List List of generic particle systems used by this character.
u32 1 Swoosh Particle Count Count of swoosh particle systems.
Asset ID (SWHC) Swoosh Particle Count Swoosh Particle List List of swoosh particle systems used by this character.
u32 1 Unknown Always 0.
u32 1 Electric Particle Count Count of electric particle systems.
Asset ID (ELSC) Electric Particle Count Electric Particle List List of electric particle systems used by this character.
u32 1 Spawn Particle Count Count of spawn particle systems.
Asset ID (SPSC) Spawn Particle Count Spawn Particle List List of spawn particle systems used by this character.
Animation AABB
Type Name Notes
string Animation Name
AABox Animation Bounding Box
Indexed Animation AABB

Similar to Animation AABB, but with animations referenced via ID instead of name.

Type Name Notes
u32 Animation ID Confirm this is character-relative?
AABox Animation Bounding Box
Effect
Type Count Name Notes
string 1 Effect Name Name of the effect.
u32 1 Effect Component Count Count of effect components
Effect Component Effect Component Count Effect Components Array of effect components used by this effect.
Effect Component
Type Name Notes
string Component Name Name of this effect component.
FourCC Particle Asset Type Type of the particle used by this effect.
Asset ID Particle Asset ID Particle resource used by this effect.
string Bone Name Bone that the component is attached to.
float Scale Scale of the component.
u32 Parented Mode Needs documentation
u32 Flags Needs documentation

Animation Set

Type Count Name Notes MP1 MP2
u16 1 Version Always 4. Note there are format differences between MP1 and MP2 despite them both being version 4.
u32 1 Animation Count Count of animations contained by the set.
Animation Animation Count Animation Array Array of animations.
u32 1 Transition Count Count of transitions contained by the set.
Transition Transition Count Transition Array Array of transitions.
Meta-Transition 1 Default Transition
u32 1 Additive Animation Count Count of additive animations contained by the set.
Additive Animation Additive Animation Count Additive Animation Array Array of additive animations. Although any animation can be used as additive, this array allows for customizing the fade in/out time for each animation.
float 1 Default Additive Fade-In Time Fade-in time used for additive animations not listed in the above array.
float 1 Default Additive Fade-Out Time Fade-out time used for additive animations not listed in the above array.
u32 1 Half Transition Count Count of half transitions contained by the set.
Half Transition Half Transition Count Half Transition Array Array of half transitions.
u32 1 Animation Resource Count Count of animation assets used by this set.
Animation Resource Pair Animation Resource Count Animation Resource List List of animation assets used by this set.
u32 1 Event Set Count Count of event sets. Matches the animation count.
Event Set Event Set Count Event Set Array Array of animation events. Each event set maps to the animation at the same index. Note this is basically MP1's EVNT file format, but embedded in ANCS.

Animation

Type Name Notes
string Name Animation name.
Meta-Animation Animation Meta-animation data.

Transition

Type Name Notes
u32 Unknown
u32 Animation ID A The animation being transitioned from.
u32 Animation ID B The animation being transitioned to.
Meta-Transition Transition Meta-transition data.

Additive Animation

Type Name Notes
u32 Animation ID
float Fade-In Time Fade-in duration.
float Fade-Out Time Fade-out duration.

Half Transition

Type Name Notes
u32 Animation ID The animation being transitioned from.
Meta-Transition Transition Meta-transition data.

Animation Resource Pair

Type Name
Asset ID (ANIM) ANIM ID
Asset ID (EVNT) EVNT ID