Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 3.21 KB

README.md

File metadata and controls

44 lines (30 loc) · 3.21 KB

AlienIsolation.DevTools

⚠️ Jank code alert! This project is still in the proof of concept stages and contains unfinished code.

A project to allow you to control the CATHODE scripting system in Alien: Isolation's engine.

In its current state, the project can intercept requests from the game's code to CATHODE for script parameter values on entities.

It also features an ImGui-based in-game UI allowing you to control some visual demonstrations of what this project could allow you to do.

ℹ️ Things to be aware of

  • This tool will patch parts of the game's executable code (in memory) on injection to disable integrity checks Creative Assembly added into the game. Without doing this, any attempts to modify key data files such as MAIN.PKG, MODELS_LEVEL.BIN and other *.PKG files will trip the integrity check and the game will close.

How does this work (right now)?

The interaction between the game's code and CATHODE (as I understand it) is as follows:

  1. The game's code requests the value of a node's parameter on an entity via CATHODE's function find_parameter.
  2. CATHODE searches for the parameter on that entity, if it finds it, find_parameter returns true and stores the value of that parameter in the output_ptr parameter. (output_ptr is initialised with a default value by the game's code, which is used as a fallback in case CATHODE fails to find the value).
  3. The game's code updates the entity's state in-game with the new value of that parameter.

By hijacking this interaction between the game and CATHODE, we can effectively control (in theory) the state of almost any parameter on any entity in the game, as long as we have two key parameters:

  1. The pointer to the entity's object in memory (I currently have no automated solution for acquiring this).
  2. The parameter's ShortGuid (essentially a SHA1 hash of the SHA1 hash of the parameter's name).

It will eventually provide a facility for you to globally override the return value for any of these requests with your own desired value, as long as you know the ShortGuid of the parameter.

Generally, CATHODE will tolerate you doing things wrong in the scripting system, in fact, if you completely disable a node in the scripting system, the game will not crash, and instead that node's call seems to just be skipped in a flowgraph.

You can break things in interesting ways by doing that, (like making it okay for you to attack story critical NPCs).

Ripley, in the 3rd person, this was caused when I blocked all requests from the game to CATHODE for the value of almost any Enum parameters.

image

(This forces the game to use the default values which are hard-coded into the game's binary for all of the blocked Enums, which makes all NPCs your ally, and causes the camera to do the above, amongst others).

Todo

  • Rewrite (using templates) the repetitive janky mess that I wrote to hijack CATHODE's templated find_parameter function.
  • Intercept requests from the game's code to CATHODE's templated function create_entity, this might let us track which entities exist and display them in the UI.