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
Implementationflag, defining if the parser supportsCREATE,LOAD, and/orSAVEfunctionality for the file. Parsers which support all three have the ability to generate files from scratch. - A
Loadedbool, 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
Filepathstring, which is the filepath that the parser is using to either load or save the file. - A
Savefunction, which will save the file out if the parser has theSAVEflag. This function can optionally be given a new filepath to save the file to. Returns false if saving fails. - Events for
OnLoadBegin,OnLoadSuccess,OnSaveBegin,OnSaveSuccesswhich 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.
CATHODE.AlphaLightLevelhandles levelWORLD/ALPHALIGHT_LEVEL.BINfiles- This is a A16B16G16R16F image with a specified resolution, baking alpha light data for the level
CATHODE.AnimationStringshandlesANIM_STRING_DB.BINandANIM_STRING_DB_DEBUG.BINfiles within `ANIMATION.PAK- This is a database of hashed animation-related strings, and their associated hashes
CATHODE.AnimClipDBhandlesANIM_CLIP_DB.BINfiles withinANIMATION.PAK- This is a database of animation clips available by character type (WIP)
CATHODE.BMLhandles any.BMLfiles- Get/set content as an
XmlDocumentviaBML.Content
- Get/set content as an
CATHODE.CharacterAccessorySetshandles levelWORLD/CHARACTERACCESSORYSETS.BINfiles- This is a collection of metadata for Character entities within the level (e.g. gender, build, assets, etc)
CATHODE.CollisionMapshandles levelWORLD/COLLISION.MAPfiles- This defines COLLISION_MAPPING resource data for collision barriers, including zone metadata
CATHODE.Collisionshandles levelWORLD/COLLISION.BINfiles- This defines weighted collision data for character hitboxes
CATHODE.Commandshandles levelWORLD/COMMANDS.PAKand/orWORLD/COMMANDS.BINfiles- This consists of
Compositescripts which hold variousEntitytypes for logicFunctionEntity= functions which execute functionality, with parameters and links to childEntityobjectsVariableEntity= variables which can be used externally as parameters on an instancedCompositevia aFunctionEntityProxyEntity= a proxy of aFunctionEntitywithin anotherComposite, useful for acting on events in another compositeOverrideEntity= an override of a parameter value on an entity within an instancedCompositein thisComposite
- A
Utilsmember provides various utilities for working with Commands data via data tables appended to the saved file
- This consists of
CATHODE.CustomCharacterAssetDatahandles theCHR_INFO/CUSTOMCHARACTERASSETDATA.BINfile- This defines the tints and decals that character asset types use
CATHODE.CustomCharacterConstrainedComponentshandles theCHR_INFO/CUSTOMCHARACTERCONSTRAINEDCOMPONENTS.BINfile- This defines the character parameters that character component types use
CATHODE.CustomCharacterInfohandles theCHR_INFO/CUSTOMCHARACTERINFO.BINfile- This defines base character presets, including skeletons and accessories
CATHODE.EnvironmentAnimationshandles levelWORLD/ENVIRONMENT_ANIMATION.DATfiles- This defines environmental animation data (WIP)
CATHODE.EnvironmentMapshandles levelWORLD/ENVIRONMENTMAP.BINfiles- This maps instanced entities with environment map textures
CATHODE.Lightshandles levelWORLD/LIGHTS.BINfiles- This defines various lighting data for instanced entities (although, modifying it appears to have no visual impact)
CATHODE.MaterialMappingshandles levelWORLD/MATERIAL_MAPPINGS.PAKfiles- This defines material remappings, used for modifying materials on instanced entities (WIP)
CATHODE.Materialshandles levelRENDERABLE/LEVEL_MODELS.MTL&LEVEL_MODELS.CSTfiles- This defines material data, including texture pointers and constant buffers (WIP)
CATHODE.EXPERIMENTAL.MissionSavehandles*.AISfiles- This handles save file data (WIP)
CATHODE.Modelshandles levelRENDERABLE/LEVEL_MODELS.PAK&MODELS_LEVEL.BINfiles- This contains model mesh data in a CS2 format
CATHODE.MorphTargetshandles levelWORLD/MORPH_TARGET_DB.BINfiles- This defines morph data for faces (WIP)
CATHODE.Movershandles levelWORLD/MODELS.MVRfiles- This defines instance specific info for entities, including constant buffers and renderables (WIP)
CATHODE.EXPERIMENTAL.NavigationMeshhandles levelWORLD/STATE_*/NAV_MESHfiles- This contains the navmesh for the level state, with associated properties (WIP)
CATHODE.PAK2handlesUI.PAKandANIMATIONS.PAKfiles- This allows parsing of the PAK2 archive format, containing embedded files
CATHODE.PathBarrierResourceshandles levelWORLD/PATH_BARRIER_RESOURCESfiles- This defines the navmesh barrier resources (WIP)
CATHODE.PhysicsMapshandles levelWORLD/PHYSICS.MAPfiles- This defines DYNAMIC_PHYSICS_SYSTEM resource data for composite instances with physics systems
CATHODE.EXPERIMENTAL.ProgressionSavehandlesPROGRESSION.AISfiles- This handles progression save file data (WIP)
CATHODE.RadiosityInstanceMaphandles levelRENDERABLE/RADIOSITY_INSTANCE_MAP.TXTfiles- This contains mappings between lightmap transforms in RADIOSITY_RUNTIME to resource indexes
CATHODE.RenderableElementshandles levelWORLD/REDS.BINfiles- This defines all renderable elements in a level - a model index with associated material index and count
CATHODE.Resourceshandles levelWORLD/RESOURCES.BINfiles- This defines all available resources within the level
CATHODE.Shadershandles levelRENDERABLE/LEVEL_SHADERS_DX11.PAK&LEVEL_SHADERS_DX11_BIN.PAK&LEVEL_SHADERS_DX11_IDX_REMAP.PAKfiles- This defines all shaders within the level and additional metadata (WIP)
CATHODE.SkeleDBhandles theANIM_SYS/SKELE/DB.BINfile withinANIMATION.PAK- This defines all available skeletons and mappings
CATHODE.SoundBankDatahandles levelWORLD/SOUNDBANKDATA.DATfiles- This defines all soundbanks available to be utilised within the game
CATHODE.SoundDialogueLookupshandles levelWORLD/SOUNDDIALOGUELOOKUPS.DATfiles- This defines a lookup table for animation/sound hashes within soundbanks
CATHODE.SoundEnvironmentDatahandles levelWORLD/SOUNDENVIRONMENTDATA.DATfiles- This defines all reverb types that are used within the level
CATHODE.SoundEventDatahandles levelWORLD/SOUNDEVENTDATA.DATfiles- This defines all sound events available to be utilised within the game
CATHODE.SoundFlashModelshandles levelWORLD/SOUNDFLASHMODELS.DATfiles- This maps flash texture resource IDs with the model IDs that use them within the level
CATHODE.SoundLoadZoneshandles levelWORLD/SOUNDLOADZONES.DATfiles- This specifies all soundbanks that are used within the level
CATHODE.SoundNodeNetworkhandles levelWORLD/SOUNDNODENETWORK.DATfiles- This defines the layout of the sound node network within the level, used for sound propagation
CATHODE.TextDBhandles*.TXTfiles withinTEXTdirectories- This defines a database of subtitles, which are saved per language
CATHODE.Textureshandles levelWORLD/LEVEL_TEXTURES.ALL.PAK&LEVEL_TEXTURE_HEADERS.ALL.BINfiles- This contains all textures used within the level with additional metadata
CATHODE.EXPERIMENTAL.Traversalshandles levelWORLD/STATE_*/TRAVERSALfiles- 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!
CathodeLib is in no way related to (or endorsed by) Creative Assembly or SEGA.
