_desc_01 for the description of the attribute.
Taking hollowbones as an example:
ATTRIB_HOLLOWBONES_01, hollow bones
ATTRIB_HOLLOWBONES_DESC_01, you are far lighter than you appear. this makes you susceptible to knockback
Recompile the strings database - currently this has to be done using the original FFEdit created for Freedom Force 1, until this bug gets fixed in the mod tools for FFvTTR.
Finally, add a script function of the form:
to ffx3/Missions/Scripts/ffx.py. In this function, you can do whatever is required using the script interface to Freedom Force vs The Third Reich to make your attribute do what it is supposed to.
Taking Hollow Bones as an example again:
This attribute has a one-off initialisation that reduces the characters mass and minForce variables, making them more susceptible to knockback.
I'm always around at the Scripting forum at www.freedomreborn.net to answer any questions along these lines, as to how you'd implement a specific attribute.
Renaming an attribute
Say you want to have a character who can freeze other characters, and draws energy points off their frozen targets. This functionality can be set up using URBAN DWELLER, HATEMONGER, SYNERGY or METAL EATER, but none of these names and descriptions feel quite right. You'd really like an attribute called THERMAL SIPHON.
Create this attribute as above, adding the string description and attribute entry in FFEdit, and then create a multi-attribute consisting of the single new attribute, in ffxmulti.py.
The attribute will then behave exactly as the original both in-game and in the Control Centre. Check out the currentsapper attribute I gave to Sea Urchin - this is exactly what I've done.
This is also handy for modders making campaign character who level up in that the cost of a customised attribute can be changed this way to reflect the altered effectiveness of the attribute due to the customisations.
Adding Customisations (Advanced)
FFX Control Centre can now be fitted to add customisation slots to any attribute you care to make. The steps are as follows:
Add an entry to ffxattribs.py, e.g.
consisting of the attribute name, the array name used to look up entries, and the display name for the attribute that will appear in the Control Centre.
Then in ffxdefault.py add your array, with default values and a 'types' list.
Each entry in the types list is a string consisting of a special code followed by the display name of the parameter, e.g.
The codes are listed in ffxattribs.py, in the case of overheated, the O means an Optional Resource Tab effect (ie can be empty for no FX), and the a means an explosion power (Area or Explosive projectile).
These entries are used to get the display name for each variable in the Control Centre, and determine the type of list or control to be displayed.
In your attribute code you can then get the value using the getByTemplate function to read template-specific overrides as set up by the user.
Note that running the Control Centre merges the contents of ffxdefault.py into the arrays in ffxcustom.py, which is the Python file used by the game, so always run and save Control centre before testing in game.