Introduction

Open View → Animation Editor to browse everything in DATA/GLOBAL/ANIMATION.PAK — every animation clip the game ships, for characters and for props alike.

The editor lets you find a clip, watch it play on a model, export it to a DCC format, and bring new animation back in. It replaces the old raw PAK extract/repack window, which offered no way to see what a file actually contained.

This window is also what opens when you pick an animation for an entity parameter — see Using it as a Picker.

How Animations are Organised

Cathode does not keep a flat list of clips. It asks for animation the way the game needs it, and the editor mirrors that:

  • Kind — the two tabs at the top. Character animations covers anything rigged to a character skeleton; Environment animations covers props and world geometry.
  • Animation set — roughly "one rig's worth of animation". Most sets are named after the skeleton they belong to. Sets whose names begin with # are the game's own grouping entries rather than characters, so they're sorted to the bottom of the list.
  • Context — the state the character is in. A set's clips are grouped by context: one unnamed group that always applies, and then one group per state that overrides it. More than a quarter of the game's sets have more than one context, and some have as many as 25.
  • Clip — the animation itself. A clip is referenced by the name its set plays it by, which is not the same as its filename.

One more thing worth knowing before you export anything: nearly every clip is authored on a shared rig and moved onto the individual character's skeleton at runtime. The Authored on column tells you which rig a clip was actually built against, which matters when you come to export or preview it.

Browsing

As shown below, the window is split top and bottom: animation sets above, the clips inside the selected set below, with a Context dropdown between them. Drag the splitter to rebalance — the position is remembered, as is which tab you were last on.

The Animation Editor window with the ALIEN set selected in the top list, its always-available context chosen, and one clip highlighted in the clip list below with the summary line and the Import, Preview and Export buttons along the bottom.

The Animations window on the Character animations tab: sets above, the clips in the chosen context below, and the selection summary beside the buttons.

Both lists sort by any column: click a heading to sort by it, click again to reverse. Numeric columns sort as numbers, so you can order by length or frame count and get a sensible result.

Sets & Contexts

The set list shows the set name, the skeleton it uses, how many contexts hold clips, and how many clips it holds in total. A set with no clips left in it is greyed out.

When every set on screen is named after its own rig — which a search often leaves you with, though not the full list in the screenshot above, where the first-person sets share a rig — the Skeleton column collapses and hands its width to the names.

Pick a set and the Context dropdown fills with the contexts that actually contain animation. The unnamed one is listed as (always available), and each entry shows its clip count.

The Clip List

Each row describes one clip:

  • Animation — the name the set plays it by, which is what an animation parameter stores
  • File — the file it lives in inside the PAK
  • Authored on — the rig it was built against
  • Frames and Length — how long it runs
  • Properties — how many events it fires and how many settings are hung off it
  • Notes — flagged when the clip is unusual; additive means it layers over whatever else is playing rather than replacing it

Hover a row for its full path, plus any non-standard metadata it carries — how far a locomotion clip travels, where an aim clip points, which sound an audio event fires and from which bone.

A clip that could not be read is greyed out and says so in Notes. That is a defect in the file rather than in the clip you asked for, and the rest of the list still works.

The line above the buttons summarises the selection — frame count and frame rate, bone count, float tracks if it has any, and the rig it was authored on with that rig's bone count. Below it are the buttons: on the left, what to do with the selected clip — Preview…, Metadata…, Replace… and Delete — and on the right, Import… and Export All…. Right-click a clip for the same actions, or press Delete to delete it. The status bar along the very bottom counts the sets and clips in the PAK, and reports when it is being written.

Previewing

Select a clip and hit Preview… (or double-click it) to open the Animation Preview window, shown below, and watch it play.

The Animation Preview window showing the alien mesh mid-animation in the 3D viewport, the parts-of-the-mesh checklist on the right, the event marker timeline underneath with a marker selected, and the play, speed, loop and display toggles along the bottom.

Animation Preview playing an ALIEN clip: the mesh above, the clip's event markers in lanes below.

Nothing in the game's data records which model goes with which animation set, so the first time you preview a character's set it plays on the rig alone, and the mesh line reads None — showing the rig on its own. Use Choose Mesh… to select a model and Choose Rig… to select a skeleton. Both choices are remembered per animation set, so you only do it once per character. A character's mesh brings its own rig: pick one and the preview moves onto the rig that mesh is skinned to, wherever the clip can be retargeted onto it the way the game plays it. The two lines beside those buttons say what's in use: the mesh, and the rig with its bone count — plus, when the clip was authored on a different rig, the route it was retargeted along. When something might otherwise look like a fault — a limb the clip never moves, an additive clip shown over the bind pose, a mesh that isn't skinned to the rig you picked, a clip authored on a rig the game's files don't hold — an amber note underneath says so.

For a clip on the Character animations tab, Choose Mesh… lists the skinned meshes in the open level that the clip can be shown on properly: those skinned to the rig in use, and those whose own rig the clip can be retargeted onto. For a clip whose rig the game's files don't hold, that means the characters with enough bones to play it. If nothing fits, every skinned mesh is listed, with a message explaining that the clip will play on it bone for bone. Choose Rig… opens the same Choose a skeleton dialog as an export; with a character's mesh on show, the rig that mesh is skinned to comes first and is pre-selected, marked the mesh on show. You can still pick another rig; if the mesh isn't skinned to it, the amber note says so and names the rig the mesh belongs to.

For a clip on the Environment animations tab there is usually nothing to pick: the preview takes the mesh the open level animates with that rig, and the mesh line says how many of its parts the rig moves. Choose Mesh… lists the static meshes in the open level that the rig animates; if there are none it says so and lists every static mesh, though one the rig doesn't name won't move. Meshes always come from the open level, so with no level loaded Choose Mesh… says so and the rig plays on its own.

Playback controls:

  • Play / Pause, a frame and time readout, a scrub ruler along the top of the timeline, and a Speed dropdown from 0.1x to 2x
  • Loop — repeat rather than stopping at the end
  • Root motion — let the clip carry the character across the scene instead of holding it on the spot
  • Show mesh, Show rig, Show textures — draw the model, the skeleton, and the model's materials
  • Parts of the mesh — show or hide individual pieces, grouped by LOD with each piece's vertex count; the first LOD starts on and the rest off. Show all / Hide all flip the lot

The preview closes with the Animation Editor.

Underneath the viewport is the clip's timeline of markers — the moments the clip fires something, one lane per event name. Click a marker and the line beneath the timeline says when it fires and what it does: a footstep sound, an effect, a gameplay callback — or, as with the marker selected in the screenshot, that it's a named moment with nothing attached.

Metadata… beside it opens the clip's metadata to edit; save there and the timeline redraws its markers in place.

Export… in this window writes out the clip and the mesh it's playing on together, with a prop assembled the way the preview draws it. As with a model export, a .cs2meta.json sidecar is written beside the file. Keep it there, renamed to match if you save the model under a new name, so that importing the model again brings every part back as it was.

Exporting

Export All… writes every clip currently listed. Select more than one row and the button becomes Export Selected… and writes just those. Everything goes into a single file.

Available formats are FBX, glTF (.gltf / .glb) and COLLADA — the formats that can actually carry an animation. OBJ isn't offered here for that reason.

Because a large export can be very large indeed, OpenCAGE checks the clip count, bone count and frame count against the format you chose and warns you before writing if the result is going to be big.

Clips that couldn't be read are skipped, and the summary at the end tells you how many were left out.

Choosing a Rig

An animation is only meaningful against a skeleton, so exporting opens the Choose a skeleton dialog shown below and asks which one to write it against. Each rig is listed with its bone count and how many of the clips being exported were authored on it. There's no guessing involved — the clips name the rig they were authored on, and that one sorts to the top of the list and is pre-selected. Everything else is there if you want to experiment with retargeting.

The Choose a skeleton dialog listing rigs with their bone counts, the rig the clips were authored on pre-selected at the top, and the Export as dropdown set to For viewing - held on the spot.

Export asks for a rig; the one the clips were authored on is pre-selected, and the Export as mode sits underneath.

Export Modes

The Export as dropdown at the bottom of that dialog decides what happens to bones the clip never mentions, and to the root. Viewing and re-importing want different things from the same clip:

  • For viewing - held on the spot — bones the clip doesn't touch stay at the rig's rest pose, so the character still looks like itself. Root motion is ignored and the animation plays in place.
  • For viewing - travelling as the clip carries it — as above, but the root moves, so a walk cycle walks.
  • For editing and re-importing - exactly what the clip holds — writes precisely what's stored, including the root as the engine sees it. This is the one to use if you intend to edit the animation and bring it back in.

A rig rests its root a long way from identity, so an export that looks right is not necessarily an export that can come back in. If you're round-tripping an animation, always use For editing and re-importing.

An animation you've edited in Blender can come back in as an FBX saved with Blender's default export settings. Blender thins out the keys as it saves, so set Simplify (under Bake Animation) to 0 in its FBX export options if you want every key kept as you left it.

Importing

Select the animation set you want the clip to belong to, then hit Import… and pick an FBX, glTF, GLB or COLLADA file. The Import animation into … dialog opens, titled after the set you chose and pictured below, showing what OpenCAGE found in the file and everything that has to be decided before it goes in. Nothing is committed until you press Import.

The Import animation into ALIEN dialog showing the file path, the play-by name and stored-as path, the rig, root bone and frame rate dropdowns, and a summary reporting 196 frames and that the mannequin animation was converted onto the game's skeleton.

Import animation, reading a mannequin clip ("Orange justice" by Coldary on Sketchfab, CC-BY 4.0) onto the ALIEN set — the summary says it was converted rather than matched by name.

Once you do, the clip is added to the set and ANIMATION.PAK is written straight away — an import that isn't saved has done nothing, so there's no separate save step. The clip list refreshes with your new animation selected.

A Saving the animations window shows how the write is going. It writes everything OpenCAGE holds for the file, so changes still waiting in an open Animation Tree Editor or Blend Set Editor, and kept tree layouts, go in with your clip. (Changes you chose not to save as you closed those editors are put back first, so they never go in.) The first write also keeps a copy of the original ANIMATION.PAK for the Mod Manager, so it takes longer.

Import… says Can't import instead of asking for a file while mods are being applied (wait for them to finish), or if ANIMATION.PAK has changed on disk since OpenCAGE loaded it, through a game file check or another tool (restart OpenCAGE to load it as it is now), or if the Mod Manager has loaded it again since this window read it (close the window and open it again).

A model import that carries animation opens this same window for each clip in the file (see the Model Editor), with a Set dropdown added so the set and the rig are chosen together.

Import Options

  • Play it by — the name the set will use to reference the clip. Defaults to the filename, sanitised and in lower case.
  • Stored as — the path the clip takes inside the PAK.
  • Rig — the skeleton the animation is built against. The rigs the chosen set can use are offered.
  • Root bone — what to do with the rig's root, which belongs to the engine rather than the rig. Automatic - carry the character only if the file moves the root is the default and is usually right; Leave the root to the game, whatever the file does forces it; Keep as authored, root motion and all writes out root motion exactly as the file has it.
  • Frame rate — As the file says, or force 24, 25, 30 or 60 fps.
  • Layer over what is already playing — makes the clip additive rather than replacing whatever else is running.

The summary panel updates every time you change something: how many frames and how long, how many of the file's animated nodes matched a bone on the rig (or, for a converted file, how many of the rig's bones it drives), what the file itself claims its frame rate is, and what will happen to the root. Use it to check the import before committing — if a file that should already be on the rig only matches a handful of nodes, something is wrong with the rig choice.

Preview… opens the animation preview on the imported result, so you can look at it rather than guess.

The root bone setting is what turns a character round. If an imported animation comes out facing the wrong way or sliding across the floor, that's the first option to revisit.

Retargeting

Import normally matches the file's nodes to the rig's bones by name, which requires the file to already be on that rig — in practice, that it came out of OpenCAGE in the first place.

Animation you find online generally isn't. Most of it is built on the Unreal Engine mannequin or a Mixamo (HumanIK) rig. Both rest differently from the game's rigs and have different proportions, and the mannequin also has different bone names and a different idea of which way is left. For those files OpenCAGE works out the corrective from the two rest poses and rebuilds the animation on the game's rig by itself — when it has, the summary reads Converted from the file's own skeleton onto …, as in the screenshot above, rather than reporting how many nodes matched by name.

There is nothing to switch on. The conversion is applied when the file looks like a rig OpenCAGE recognises, the Rig you chose is one it can build onto, and the file's names don't show it is already on that rig: none of its nodes match a bone, or they only match because the file's own rig uses the same joint names (a Mixamo export without its mixamorig: prefix). A file that really is on the rig, such as an OpenCAGE export, is imported as-is. If converting fails where matching by name worked, the file is matched by name and the summary warns you. One that matches nothing and can't be converted is reported as This can't be imported, with the reason.

Both the humanoid rigs and the alien are supported targets. Bones the game's rig has and the file's rig doesn't — the alien's tail, spikes and jaw, a human's armour bones — keep their rest shape and ride their parent, which is normal rather than an error. In the screenshot above the mannequin drives 20 of the alien's 127 bones. The game's rig keeps its own bone lengths, too; only the angles come across. If the two rigs turn out to be mirror images of each other, the summary says so; that's also normal and is handled.

Replacing an Animation

Select a clip and hit Replace… to rebuild it from an FBX, glTF, GLB or COLLADA file. The clip keeps its name, the path it is stored under and its place in its set, so everything that plays it — scripts, animation trees, blend sets — keeps working and now plays the new animation.

The same window as an import opens, titled Replace '…' in SET, with Play it by and Stored as fixed. The rig starts on the one the clip was built against; pick another and the summary says so. Layer over what is already playing starts as the clip was. The summary also lists what the clip keeps from before: its events (those inside the new length) and the settings the game chooses and blends it by — how far and how fast it travels, where it points — which describe the old animation and are not measured again. Preview… shows the result before anything changes.

Press Replace and ANIMATION.PAK is written straight away, as for an import. An open preview switches to the new clip.

Replace says why when a clip can't be rebuilt in place: a clip stored together with other animations (the game's "resident" sets), or one whose metadata has more than one use. Import the new animation under another name instead and point what plays the old one at it.

A clip that ships with the game can be replaced — it changes for every character that plays it, in every level.

Editing Metadata

Select a clip and hit Metadata… (or Metadata… in the Animation Preview window) to see its metadata — its settings, and the tracks of moments it fires them at — as the game stores them, in a window titled Metadata of '…'. The window works on a copy: nothing changes until you press Save, and ANIMATION.PAK is written straight away then. Cancel lets your changes go; closing the window with changes asks first.

The Block dropdown picks which part of the metadata you're looking at. The animation itself holds what goes for the clip however it plays (its label, length and so on); Use 0, Use 1 … hold the tags of each use of the clip — footsteps and sounds normally live in Use 0.

  • Tracks are the timeline's lanes — AUDIO_Foley, LeftStrike, start_rag_doll — each with its number of entries. Type a name and Add a track, Rename the selected one, or Remove it.
  • Entries of the track lists when each entry fires, in seconds, what it fires, and what that is: a sound shows its event and the bone it plays from. Type a time (within the clip's length), pick what it fires from the block's settings (or nothing, for a plain moment such as a foot strike), then Add, or select an entry and Apply your change, or Remove it. Entries stay in time order. Removing a track's last entry removes the track.
  • Settings in this block lists every named value: its type, value and the game's own Mirrors / Play speed / Convert flags. Add, change (Apply) or remove a setting. Numbers are typed as 1.5; a VECTOR as x, y, z; a sound (AUDIO) in the form the game uses, [ArgumentList={},Bone={LeftFoot},Event={your_sound_event},Offset={0,0,0},UseArguments={No}] — choosing AUDIO for a new setting fills the form in for you. Renaming a setting renames it in the entries that fire it.

Everything is shown as stored, including names OpenCAGE doesn't know the meaning of; a name made only of digits is a name the game's string tables don't hold, kept as it is. A few things are kept as they are:

  • anim_label, meta_label and the two unnamed values are how the game finds the clip's metadata, so they can't be changed.
  • A setting an entry fires can't be removed until those entries fire something else or are removed.
  • Values of types OpenCAGE doesn't read (64-bit numbers, script interfaces) show as (not read) and can only be removed.

Save puts the change into every stored copy of the clip at once, and only if every copy reads back as the game would read it; new names go into the PAK's list of names so they keep their names next time. A clip stored together with other animations, or whose copies differ, opens read only and says why. A clip that ships with the game can be edited: the window says the change is to it everywhere it plays.

Deleting an Animation

Select a clip you imported and hit Delete (or press Delete). It is taken out of its set's clip list, the PAK's index of clips, and ANIMATION.PAK itself, which is written straight away. This can't be undone, so OpenCAGE asks first.

Only clips imported with OpenCAGE (stored under ANIMATION\OPENCAGE\) can be deleted: the game itself, and every level's scripts, may ask for one it ships with by name. To change what one of those plays, replace it instead.

Delete refuses, and lists them, while anything here still plays the clip: an animation tree node, a blend set its character uses, or an entity in the open level. Point those at another animation first. Other levels' scripts aren't checked — one that still asks for a deleted clip plays nothing.

Using it as a Picker

Animation parameters used to be filled from a plain list of enum strings. They now open this window instead, so you can see what a clip is called, how long it runs and what it fires before committing to it.

The window opens titled Choose an animation (or Choose an animation set), on whatever the entity is already set to — right down to selecting the animation itself and scrolling to it — and an extra button appears at the bottom right, after Import… and Export All…: Use This Animation (or Use This Set for an animation set parameter), which hands the choice back to the parameter, as shown below. When you're picking an animation, double-clicking a clip picks it; when you're picking a set, double-clicking a clip opens its preview as usual. The Animation Tree Editor and Blend Set Editor open it the same way to pick a clip, titled after the node or blend set.

The animation browser opened as a picker, titled Choose an animation, with the current clip pre-selected and a Use This Animation button added at the bottom right.

The same window opened from an animation parameter: the clip the entity already uses is selected, and Use This Animation sits at the bottom right.

An animation parameter stores the name the set plays the clip by, and an animation set parameter stores the set's own name. Neither stores a path.

An animation only plays from a set that holds it, so the two are filled in together. Picking an animation also sets the entity's AnimationSet to the set it came from. In the set picker, selecting a clip turns the button into Use Set + Animation, which fills in Animation as well. Either way, both values change in one undo step. An entity without the other parameter just takes the one you picked.