THE BASICS:
How to use FFX in your mod
Freedom Force X was intended as an aid to mod-makers as well as an expansion pack for player of Freedom Force.
Here's a few tips on how to set up your mod to work with Freedom Force X. This is based on recent
experiences helping modders work with FFX 3 in FFvTTR.
Script Files
Unlike previous versions of FFX, FFX3 is self-contained in each mod. This means that ALL of
the files in missions/scripts need to be contained in your mod folder.* The good news is that
this makes setting up a mod to work with FFX3 much easier. Just copy the scripts folder from
the base version of FFX 3, and drop it right into your mod's mission folder. You'll need to
include a couple of lines at the top of every mission to make sure these scripts are initialized.
Just copy the top few lines from one of the default campaign's missions to every one of your
missions and save.
*Addendum for FFX 3.2: This now also applies to files in the mod for which there is also a version in
the original "Data" folder, such as cshelper.py. (This feature requires the startup plugin "Python Path
Priority Patch", which is installed by default.)
PowerIDs
FFX3 relies on a power ID system in order to get state swaps to work with campaigns. Make sure
you transfer over the skirmish folder into your mod and run the Power ID Generator as a Rumble
Room Mission. (you may wish until you've merged strings as described below, as that will make
this easier to find) The Power ID generator will take care of everything for you, and you can add
swaps as needed after this. You will need to re-run the generator every time you add a new built-in.
Running Control Centre with mods
See that DropList control that says "Data" when you start up FFXEdit?
The Control Centre will automatically detect mods in your FF directory and allow you to select them from this list. Changing the mod selected in here causes the Control Centre to seamlessly re-scan the newly selected data/mod directory for characters, powers, FX etc. - so use the control centre as you do for the main Freedom Force X-Squared and customise your characters in here - builtins if you're a modder or customs if you're playing a custom-friendly mod campaign.
The Control Centre can now be used to add special attacks to builtin characters, customise their attributes and choose which optional rules apply in your campaign, just like it does for the main campaign.
FFX Extras
Voice IDs are generally the same across mods. The lists in ffxextras.py describe which voice ID's are female, robotic, animal or alien, basically for use with the PHEREMONES power. You may wish to make some modifications in some cases.
Example The ME voice pack (Mentor) is classified as 'alien' in the default installation. In a DC mod this may still work, as the voice would probably be assigned to Jonn Jonnz, but if it were also to be used for Dr Fate, then it may be desirable to remove it and treat it as the default male gender, and allow Jonn to be seduced by the likes of, say, Circe like any other guy.
In a Marvel mod, if the ME voice is to be used primarily by Dr. Strange, then its definitely male.
In the Strangers, the main user of the Mentor voicepack is Adam Zorn, so its classified in the Robots list. The MB voice pack is also there (used by ManBot in the main campaign) since this has actually been replaced in Strangers to sound like Microwave but with clunky footsteps for the heavier robots (eg Hunks and Eightballs).
Any custom voice packs that go with a mod should be added to the appropriate list if they're not used by male characters.
The 'builtinHeroes' list should contain a list of all builtin heroes that can be present right at the start of a mission. (Doesn't count temporary forms and mimic forms.)
builtinMimics should contain all builtin characters that possess the mimic attribute.
If you want to go to the trouble of duplicating Devil Doll's special MIMIC ability place the special mimic first in the list and modify the mimicPrefix variable to something appropriate. That way, the system will look for a valid template called + to morph into before just copying the target.
Example Setting mimicPrefix to 'rogue_' and builtinMimics to 'rogue' and 'themimic' like so:
builtinMimics=['rogue','themimic']
mimicPrefix='rogue_'
Means that when 'themimic' uses his MIMIC attribute he just becomes a copy of the target. When rogue does, the system first checks for a special case, eg. on mimicking a target with template 'colossus' it would look for the existence of a 'rogue_colossus' template first, and only if that doesn't exist will it do the default morph into a straight copy of 'colossus'. It is up to the modder to put together a suitable 'rogue_colossus' with both characters powers and metal skin etc. for the full effect.
DAT Files
The attributes and states in FFX typically require special FX, powers and objects or characters to work correctly, so you'll need to merge your DAT files with those from FFEdit.
The following files need to be merged:
- objects.dat
- characters.dat
- fx.dat
- res.dat
- sounds.dat
- powers.dat
- attributes.dat
For each one, click the "Merge DAT" button on the front pane of FFEdit. Then, select the file in your mod directory, and then the one from the main Data directory. After a few seconds you'll get a message saying that the merge was successful. Repeat for each file listed above.
After doing this and running the mod you may notice a couple of oddities. First off, running a new campaign will play MinuteMan's origin - you'll need to reset his cutscene path tot he blank one in FFEdit after merging with the FFX data files.
Secondly, characters with attributes that alter their strength such as ABSORBER or NOCTURNAL will have little stars and bugle noises around them - delete the FX 'minuteman_patriotcharge' to get rid of this side effect.
StringTables
You could merge these, but best to tackle it at the source.
Open up Data/Lang/English/strings.txt. All the new entries are listed at the top of the file in ordered sections (unlike Irrational's entires :) ), followed by the missing string entries that got added
in Patch V1.2, ending with
SKIRMISH_GAMETYPE_RT_THUG_01, (beat the clock) clock the crooks!
Copy all these into your own string table somewhere.
At the foot of the FFX string table is the changes required to make all offensive state change powers read "OVERCOME!" and all beneficial powewrs read "BOOSTED!". Copy this section too if you like.
Recompile your language files with FFEdit and you're done.
Attributes
The new attributes can be assigned to any character, hero, villain or whatever. The good news for heroes is that Freedom Force X
correctly determines which attributes have been bought, so if you design a built-in hero who can buy TELEKINESIS through training,
they don't get the TK powers in game until they've spent the points.
Of course, some powers won't really do much for villains since their AI won't activate them (such as TELEKINESIS), but you can work out which ones for yourself.
Passive abilities such as DISPERSED STRUCTURE, OVERHEATED or PHEREMONES will work just fine though.
And at some point, I intend to write a set of pluggable AI routines for Freedom Force X to enable villains to use all the attributes.
Mission Code Requirements
To activate the Freedom Force X code, all you need to do is make sure you call setMission() in your OnPostInit() function for each mission.
Additionally, use the cshelper.sun() command at all times instead of the Mission_SetSunlight() command- this is necessary for NOCTURNAL, SOLAR POWERED and WEATHER CONTROL to work correctly.
And remember to put the -log flag in your shortcut, as described on the install page. Follow these steps, and
Freedom Force X-Squared should live in harmony with your mod.
Checklist
- Copy the 'mod' folder scripts into your mod's folder
- Merge Dat files
- Update and recompile your string table
- Run FFX Control Centre on your mod folder and Save to create the remaining files
- Check all missions reference cshelper instead of cshelperS if you previously had the mod going with FFX
- Check all mission code for setMission() and change all Mission_SetSunlight()'s to sun()'s. (The argumnents are the same).
- Tidy up voiceID's, puppets and other extras if you need to.