EFX VFX - kagenocookie/ReachForGodot GitHub Wiki

RE Engine uses a proprietary EFX file format for VFX files that seems to get changed with every game release. The structure is fully reversed for all the addon's supported games, although the individual field names are unavailable and those that do exist are mostly guessed from data or inferred from runtime behavior. The file structures are also maintained as a 010 binary template here and cached in JSON files per game here. At this time, there is no EFX visualization available, but the data can be fully edited. The root node contains any file-specific settings like custom variables and parameters.

The overall structure consists of the root node, containing one or several EFX nodes, each having at most one of any of the available EFX attributes. These are expected to be stored in ascending order of their ID, the addon doesn't currently handle automatically reordering them. EFX files can also contain nested EFX objects or link to other EFX files through "actions", generally these get triggered through PtColliderAction nodes.

The most noteworthy additional features of the addon are proper clip and expression editors.

Clips

Clips are how RE ENGINE refers to any sort of animation / animation clip. In the context of EFX, this means that some fields in the targeted efx attribute can be animated based on keyframes. Each animatable attribute has a correspoding <attribute>Clip attribute that contains a list of animated fields and their clips. The curves generated in the Animation subwindow are meant as purely visualization and are not directly editable.

clip

Expressions

Similarly to clips, the engine also supports expressions to set values based on a formula using a simple expression syntax. Each field supported by the expression object also has an assignment type setting that determines the value assignment behavior.

Internally, expression variables are referred to using the hashes of their names. Some are also external, defined somewhere outside of the efx files, and therefore do not contain a name in the file directly. Some of them have been resolved through other EFX files or brute force methods, but some are still unknown and displayed with a ext:<hash> syntax.

expression

⚠️ **GitHub.com Fallback** ⚠️