CathodeLib 0.9.1

dotnet add package CathodeLib --version 0.9.1
                    
NuGet\Install-Package CathodeLib -Version 0.9.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CathodeLib" Version="0.9.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CathodeLib" Version="0.9.1" />
                    
Directory.Packages.props
<PackageReference Include="CathodeLib" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CathodeLib --version 0.9.1
                    
#r "nuget: CathodeLib, 0.9.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CathodeLib@0.9.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CathodeLib&version=0.9.1
                    
Install as a Cake Addin
#tool nuget:?package=CathodeLib&version=0.9.1
                    
Install as a Cake Tool

<img src="https://i.imgur.com/TZNGZVA.jpg" width="100%">

CathodeLib - Alien: Isolation C# Library

CathodeLib is an open source library providing functionality to handle formats from the Cathode game engine, for modding Alien: Isolation. Used to power OpenCAGE!

Available as a NuGet package, or alternatively just include this repo as a submodule in your project!


All parsers inherit from a base CathodeFile class which provides:

  • A static Implementation flag, defining if the parser supports CREATE, LOAD, and/or SAVE functionality for the file. Parsers which support all three have the ability to generate files from scratch.
  • A Loaded bool, which is true if the parser has populated its values from a pre-existing file that it has loaded. If false, the parser is creating a new file on save.
  • A Filepath string, which is the filepath that the parser is using to either load or save the file.
  • A Save function, which will save the file out if the parser has the SAVE flag. This function can optionally be given a new filepath to save the file to. Returns false if saving fails.
  • Events for OnLoadBegin, OnLoadSuccess, OnSaveBegin, OnSaveSuccess which fire at load/save start and successful completion respectively, with the appropriate filepath as an arg.

Most parsers provide access to the file's content via an Entries parameter, however this can vary per implementation.

Note: in debug mode the parsers will all fail hard, however in release mode all load/save calls are wrapped in try/catch statements.

Parsers currently available in CathodeLib:

  • CATHODE.AlphaLightLevel handles level WORLD/ALPHALIGHT_LEVEL.BIN files
    • This is a A16B16G16R16F image with a specified resolution, baking alpha light data for the level
  • CATHODE.AnimationStrings handles ANIM_STRING_DB.BIN and ANIM_STRING_DB_DEBUG.BIN files within `ANIMATION.PAK
    • This is a database of hashed animation-related strings, and their associated hashes
  • CATHODE.AnimClipDB handles ANIM_CLIP_DB.BIN files within ANIMATION.PAK
    • This is a database of animation clips available by character type (WIP)
  • CATHODE.BML handles any .BML files
    • Get/set content as an XmlDocument via BML.Content
  • CATHODE.CharacterAccessorySets handles level WORLD/CHARACTERACCESSORYSETS.BIN files
    • This is a collection of metadata for Character entities within the level (e.g. gender, build, assets, etc)
  • CATHODE.CollisionMaps handles level WORLD/COLLISION.MAP files
    • This defines COLLISION_MAPPING resource data for collision barriers, including zone metadata
  • CATHODE.Collisions handles level WORLD/COLLISION.BIN files
    • This defines weighted collision data for character hitboxes
  • CATHODE.Commands handles level WORLD/COMMANDS.PAK and/or WORLD/COMMANDS.BIN files
    • This consists of Composite scripts which hold various Entity types for logic
      • FunctionEntity = functions which execute functionality, with parameters and links to child Entity objects
      • VariableEntity = variables which can be used externally as parameters on an instanced Composite via a FunctionEntity
      • ProxyEntity = a proxy of a FunctionEntity within another Composite, useful for acting on events in another composite
      • OverrideEntity = an override of a parameter value on an entity within an instanced Composite in this Composite
    • A Utils member provides various utilities for working with Commands data via data tables appended to the saved file
  • CATHODE.CustomCharacterAssetData handles the CHR_INFO/CUSTOMCHARACTERASSETDATA.BIN file
    • This defines the tints and decals that character asset types use
  • CATHODE.CustomCharacterConstrainedComponents handles the CHR_INFO/CUSTOMCHARACTERCONSTRAINEDCOMPONENTS.BIN file
    • This defines the character parameters that character component types use
  • CATHODE.CustomCharacterInfo handles the CHR_INFO/CUSTOMCHARACTERINFO.BIN file
    • This defines base character presets, including skeletons and accessories
  • CATHODE.EnvironmentAnimations handles level WORLD/ENVIRONMENT_ANIMATION.DAT files
    • This defines environmental animation data (WIP)
  • CATHODE.EnvironmentMaps handles level WORLD/ENVIRONMENTMAP.BIN files
    • This maps instanced entities with environment map textures
  • CATHODE.Lights handles level WORLD/LIGHTS.BIN files
    • This defines various lighting data for instanced entities (although, modifying it appears to have no visual impact)
  • CATHODE.MaterialMappings handles level WORLD/MATERIAL_MAPPINGS.PAK files
    • This defines material remappings, used for modifying materials on instanced entities (WIP)
  • CATHODE.Materials handles level RENDERABLE/LEVEL_MODELS.MTL & LEVEL_MODELS.CST files
    • This defines material data, including texture pointers and constant buffers (WIP)
  • CATHODE.EXPERIMENTAL.MissionSave handles *.AIS files
    • This handles save file data (WIP)
  • CATHODE.Models handles level RENDERABLE/LEVEL_MODELS.PAK & MODELS_LEVEL.BIN files
    • This contains model mesh data in a CS2 format
  • CATHODE.MorphTargets handles level WORLD/MORPH_TARGET_DB.BIN files
    • This defines morph data for faces (WIP)
  • CATHODE.Movers handles level WORLD/MODELS.MVR files
    • This defines instance specific info for entities, including constant buffers and renderables (WIP)
  • CATHODE.EXPERIMENTAL.NavigationMesh handles level WORLD/STATE_*/NAV_MESH files
    • This contains the navmesh for the level state, with associated properties (WIP)
  • CATHODE.PAK2 handles UI.PAK and ANIMATIONS.PAK files
    • This allows parsing of the PAK2 archive format, containing embedded files
  • CATHODE.PathBarrierResources handles level WORLD/PATH_BARRIER_RESOURCES files
    • This defines the navmesh barrier resources (WIP)
  • CATHODE.PhysicsMaps handles level WORLD/PHYSICS.MAP files
    • This defines DYNAMIC_PHYSICS_SYSTEM resource data for composite instances with physics systems
  • CATHODE.EXPERIMENTAL.ProgressionSave handles PROGRESSION.AIS files
    • This handles progression save file data (WIP)
  • CATHODE.RadiosityInstanceMap handles level RENDERABLE/RADIOSITY_INSTANCE_MAP.TXT files
    • This contains mappings between lightmap transforms in RADIOSITY_RUNTIME to resource indexes
  • CATHODE.RenderableElements handles level WORLD/REDS.BIN files
    • This defines all renderable elements in a level - a model index with associated material index and count
  • CATHODE.Resources handles level WORLD/RESOURCES.BIN files
    • This defines all available resources within the level
  • CATHODE.Shaders handles level RENDERABLE/LEVEL_SHADERS_DX11.PAK & LEVEL_SHADERS_DX11_BIN.PAK & LEVEL_SHADERS_DX11_IDX_REMAP.PAK files
    • This defines all shaders within the level and additional metadata (WIP)
  • CATHODE.SkeleDB handles the ANIM_SYS/SKELE/DB.BIN file within ANIMATION.PAK
    • This defines all available skeletons and mappings
  • CATHODE.SoundBankData handles level WORLD/SOUNDBANKDATA.DAT files
    • This defines all soundbanks available to be utilised within the game
  • CATHODE.SoundDialogueLookups handles level WORLD/SOUNDDIALOGUELOOKUPS.DAT files
    • This defines a lookup table for animation/sound hashes within soundbanks
  • CATHODE.SoundEnvironmentData handles level WORLD/SOUNDENVIRONMENTDATA.DAT files
    • This defines all reverb types that are used within the level
  • CATHODE.SoundEventData handles level WORLD/SOUNDEVENTDATA.DAT files
    • This defines all sound events available to be utilised within the game
  • CATHODE.SoundFlashModels handles level WORLD/SOUNDFLASHMODELS.DAT files
    • This maps flash texture resource IDs with the model IDs that use them within the level
  • CATHODE.SoundLoadZones handles level WORLD/SOUNDLOADZONES.DAT files
    • This specifies all soundbanks that are used within the level
  • CATHODE.SoundNodeNetwork handles level WORLD/SOUNDNODENETWORK.DAT files
    • This defines the layout of the sound node network within the level, used for sound propagation (WIP)
  • CATHODE.TextDB handles *.TXT files within TEXT directories
    • This defines a database of subtitles, which are saved per language
  • CATHODE.Textures handles level WORLD/LEVEL_TEXTURES.ALL.PAK & LEVEL_TEXTURE_HEADERS.ALL.BIN files
    • This contains all textures used within the level with additional metadata
  • CATHODE.EXPERIMENTAL.Traversals handles level WORLD/STATE_*/TRAVERSAL files
    • This contains traversal metadata for the level (WIP)

Check out a full overview of the Commands structure on the Wiki, and follow this handy guide to create your first script!


<p align="center">CathodeLib is in no way related to (or endorsed by) Creative Assembly or SEGA.</p>

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.9.1 126 7/15/2025
0.9.0 133 7/13/2025
0.8.3 248 5/13/2025
0.8.2 179 4/24/2025
0.8.1 114 3/29/2025
0.8.0 110 3/29/2025
0.7.2 96 3/22/2025
0.7.1 157 10/24/2024
0.7.0 133 10/24/2024
0.6.0 323 2/7/2024
0.5.1 635 8/3/2023
0.5.0 644 4/24/2023
0.4.0 672 3/7/2023
0.3.3 805 1/8/2023
0.3.2 779 1/3/2023
0.3.1 765 1/2/2023
0.3.0 731 1/2/2023
0.2.0 910 7/29/2022
0.1.1 1,120 11/15/2020