Skip to content

Cathode scripting overview

Matt Filer edited this page Feb 10, 2024 · 9 revisions

The Cathode Scripting system in Alien: Isolation is super cool, so lets break it down...

  • The "COMMANDS.PAK" file holds all scripts for a level in the game, which in CathodeLib can load into (or be created via) a Commands class.
  • Scripts within Commands are objects called Composites. These contain Entity types which perform our logic.
  • If you're familiar with Blueprint in Unreal Engine, the structure of Composites should seem familiar.
  • There are four types of Entity which a Composite can hold:
    • FunctionEntity
      • This executes a function. The function can either be hardcoded (which you can pick via the FunctionType enum when creating), or another Composite within the Commands object (which you can reference).
    • VariableEntity
      • This acts as an instance of a variable, and can be accessed outside of the Composite as a parameter when its instanced as a FunctionEntity.
    • ProxyEntity
      • This acts as a proxy of an Entity in another Composite instance from the level root. It's useful if you're scripting based on events that occur in other Composite script instances within the wider context of the level.
    • AliasEntity
      • This acts as a reference to an Entity within a child of the current Composite. It can be used to override parameters within instanced composites, which can be useful to do things like change material properties or hide submeshes of reused models without creating a whole new Composite.
  • All Entity types can contain Parameters, which supply them data. You instance data within a Parameter by giving it a ParameterData object, which can be either:
    • cTransform (a position and euler rotation)
    • cInteger (an integer)
    • cString (a string)
    • cBool (a boolean)
    • cFloat (a float)
    • cEnum (an enum, with an index value)
    • cVector3 (a vector with X,Y,Z components - sometimes used for colour values)
    • cResource (a list of references to resources in the level)
    • cSpline (a spline, containing a list of cTransform objects for points along the spline)
  • Entity objects can be linked, either to pass data between eachother, or to trigger events. For example, all Entity objects have a trigger parameter, which can be linked to in order to trigger them.
  • Entity objects can also reference resources within the game's level (via a resource parameter which uses cResource type, or via a direct reference to the Entity itself), such as RENDERABLE_INSTANCE types, which reference an index in the level's RenderableElements (which can also be loaded using CathodeLib).

If you'd like to put all of this into action, check out "Creating your first Cathode script" to create an objective popup on level load from scratch!

You can also load existing COMMANDS.PAK files from the game & write handy scripts to change logic, or bulk edit things!

Clone this wiki locally