I finally finished the Grapple Mod and decided that, since it's been nearly 10 months since the release of anything FFX-related, I'd bundle it together with all the other things members of the FFX team have done since then.
I made a video showing the Grapple Mod in action:
http://www.youtube.com/watch?v=gm7hWXt48I0 (http://www.youtube.com/watch?v=gm7hWXt48I0)
I updated the online manual at ffx.freedomforceforever.com (http://ffx.freedomforceforever.com)
You can download the update here:
FFX 3.2.2.zip (http://ffx.freedomforceforever.com/downloads/FFX%203.2.2.zip)
Please read the ReadMe before installing. I tried to minimize overwriting custom data so you'll need to merge the .dat files and copy and paste the strings.txt text to your strings.txt and then Generate Language Files in FFEdit.
Here's a list of the Fixes, Updates, and New Features:
Fixes:
- Corrected COST_FREEZE= to COST_FROZEN= in ffx.py. Most of the state swaps were looking for COST_FROZEN and would give an error if the Frozen State was used for the swap. Changed Breach State Swap to use COST_FROZEN.
- Corrected entries for Megablast and Angelic Ally FFX_FEATSPERSONAL list in ffxdefault.py
- Fixed Metabolic Speed so a character who also has Energy Tanks, Energy Redirection or Volatile Storage doesn't get a bonus at the start of the mission without absorbing any Energy above the normal 100.
- Fixed Polymorph tactic
- Changed entry in m25custompowers.specialtypestring={} from 'energize' to 'energise' so AI can use Energized Power Swaps correctly
Updates:
- Added Stasis to Crystallise State Swap
- Added Stasis to Sleep State Swap
- Added Limeylure to Sleep Swap
- Added Speed Increase to Gravity Increase State Swap
- Added Speed Increase to Mental Damage State Swap
- Updated Body Snatch State Swap so the possessed target will have the proper reactions to other teams
- Updated scripted Grim Resolve to be removable
- Updated scripted Shake It Off to be removable
- Added 'darkforce' subtype to Power Absorber Attribute, so Power Absorbers can duplicate (or steal) darkforce powers.
- Updated Transmute Swap so targets that are flying fall to the ground after being transmuted to objects.
- Updated Sleep Swap so targets that are flying fall to the ground when they fall asleep.
- Updated Throw State Swap to work better with large meshes.
- Updated Strong Leaper Combo Attribute to include Heavy Footed.
- Updated Amplifier Attribute which now works against Mental and Mystical targets. Amplifier can now be resisted by comparing Energy Stats of Target and Amplifier. If Amplifier fails, then damage is inflicted upon him/her equal to the Energy Stat of the Target.
- Updated Driver/Vehicle Attribute
- Updated Rally to Heal Swap to heal more damage to targets and to remove the rally FX and added Buoyancy to Heal, Speed Increase to Heal, Energize to Heal and Energy Surge to Heal Swaps
- Updated HasActiveDefenceActive() to use hero file power name for the Active Defense rather than the one created in powers.dat
- Decreased AI_DEFAULTTIMER = 1, AI_AUTOTIMER = 0.5, BRAWL_TIMER = 0.5 to improve AI reaction time, ecspecially after getting up from KB and after landing
- Added Subtypes: 'asleep', 'tangled', 'grappled', 'grappler', and updated 'staticked' and 'stasis' to include the 'tangled' and 'grappled' subtypes
- Remarked out line if js.Object_GetPrimaryState(object) == js.PCSTATE_ENRAGED: reaction=TARGET_ANY so Enraged AI characters attack closest target rather than stand around
- Updated Target_CheckForAlteredReaction() to check for Hypnosis State Swap before swapping reactions
- Updated default minimum range for the RangedExplosive tactic from Melee to Short Range
New Features:
- Added Battle Computer Attribute
- Added Body Armor Attribute
- Added Power Reserve Attribute
- Added Genetic Symbiote Attribute
- Added Free Spirit Attribute
- Added FF Active Defense Attribute
- Added Wrestler Attribute
- Added Life Drain with Mind Control Swap
- Added Possession with Powers Swap
- Added Hypnosis Swap
- Added Throw2 State Swap which works like the Throw Command but works on characters
- Added Grapple State Swap for Wrestling Holds
- Added Ranged Grapple State Swap for ranged ensnarement attacks that locks both grappler and target and can deal damage over time
- Added Tangle State Swap which drops fliers, plays an FX loop on the target, and allows the target chances to break free every few seconds
- Added Explosive Tangle State Swap which triggers a custom explosion after holding the target a few seconds
- Added isAlly function
- Added increaseStrengthAndInvulnerability function
- Added AI Tactic for Free Spirit
- Added AI Tactic for FF Active Defense
- Added AI Tactic for Power Reserver
Weeeeeeeeeeeeeeeeee!
That's a lot of new stuff there!
If I knew you were working on this, though, I could have contributed the new Energy Cannisters I have working now, but those probably won't be used much anyway.
Great work.
Nice!
I'm getting a new computer, so this a perfect time to start from scratch.
Great update Taskmaster, A ton of useful stuff here.
(so many hero files to go over now....so so many...)
I am having problems with that link though, is anybody else?
The ftp link isn't working for me, but the main one to the site is, and you can find it there.
The link is invalid; pasting it manually malkes it valid, but you'd need the FTP login and password. Instead, change the link to an http one:
http://ffx.freedomforceforever.com/downloads/FFX%203.2.2.zip
These are great news!!!
Once again, congratulations to all of you who make possible FFX. :thumbup:
Whoops! Sorry about that. I was in a bit of a hurry in trying to finish that post. Thanks for providing the correct link, Ep. I fixed the first link as well.
Thanks for the updated link.
Quote from: catwhowalksbyhimself on April 07, 2008, 08:25:31 PM
The ftp link isn't working for me, but the main one to the site is, and you can find it there.
I searched around and didnt come across it anywhere there. The downloads section had FFX 3.2 as the latest.
I may have been wrong there.
That needs to be fixed. I'll probably look into it if no one else does.
I can add opponents to my battle computer and I get a little bonus sign over the guy but I don't get any custom commands for the FFEdit-designed powers I made.
### Battle Computer
FFX_BATTLECOMPUTER_CUSTOM=[
["default","","","","",300,"","","",""],
["types","UDatabase Entry1","UDatabase Entry2","UDatabase Entry3","UDatabase Entry4","iRadius","CCommand1","sPower1","CCommand2","sPower2"],
["iron_man","","","","",300,"UNIBEAM","iron_man unibeam1","REPULSORS","iron_man repulsors1"],
]
Thanks YL,
It looks like BC might need to be updated. I think the FFX team has some other neat stuff to add, so we may be re-releasing this as FFX 3.3. Stay tuned!
EDIT:
I was able to do a quick fix for BC. Replace the entire Battle Computer code with this and it should work. There shouldn't be any rally or Plus sign FX effect anymore and you should get you commands:
[spoiler]############################## BATTLE COMPUTER ########################################
# Allows the character to have a database of up to 4 characters. When the character
# is within range of one of these characters, they get +2 agility and two new commands
# that appear only on the target and can be used to simulate the character's existing powers
# but with higher accuracy, speed, magnitude, stun, etc.
# The character can also add one target to the database during a mission for a total of
# 5 database entries.
# -TaskmasterX
#######################################################################################
def initbattlecomputer(char,update):
RegTimer('enemyCheck',1,0,char)
FFX_ObjectSetAttr(char,'computer_on',0)
FFX_ObjectSetAttr(char,'battleComputer',1)
objects = Mission_GetObjects()
for obj in objects:
if ((Object_GetClass(obj)&FFX_CHARACTER)!=0) & (obj!=char):
Mission_CustomAction('ADD_TARGET_TO_DATABASE',char,obj,'studyTarget',30,0)
def studyTarget(obj,char):
dbEntry1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,1)
dbEntry2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,2)
dbEntry3=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,3)
dbEntry4=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,4)
target=getTargetname(obj)
if (dbEntry1==target) | (dbEntry2==target) | (dbEntry3==target) | (dbEntry4==target):
Mission_StatusText('target is already in Battle Computer!')
return
if FFX_ObjectGetAttr(obj,'addedToDB')!=0:
FFX_ADD_TARGET_TO_DB = target
dbEntry5=FFX_ADD_TARGET_TO_DB
if dbEntry5==target:
Mission_StatusText('target is already in Battle Computer!')
return
Mission_StatusText('adding target to Battle Computer...')
FFX_ObjectSetAttr(obj,'addingToDB',1)
RegTimer('checkRangeBC',1,0,char,obj)
RegTimer('addTargettoDB',10,0,char,obj)
RegTimer('checkEnergyUseBC',1,0,char,obj)
RegCharState(char,PCSTATE_BLANK,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_EXILE,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_STATIC,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_ENRAGED,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_HYPNOTISED,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_PANICKED,'battleComputerFail',0,0,obj)
RegCharState(char,PCSTATE_STUNNED,'battleComputerFail',0,0,obj)
def battleComputerFail(event):
char=event.object
obj=event.string
Mission_StatusText('Battle Computer failed! try again')
FFX_ObjectSetAttr(obj,'addingToDB',0)
FFX_ObjectSetAttr(obj,'addingToDBFailed',1)
def checkEnergyUseBC(event):
char=event.object
obj=event.string
if FFX_ObjectGetAttr(obj,'addingToDBFailed')==1:
return
if FFX_ObjectGetAttr(obj,'addedToDB')==1:
return
if FFX_ObjectGetAttr(char,'battleComputer')==1:
FFX_ObjectSetAttr(char,'ivlasteng',Object_GetAttr(char,'energyPoints'))
FFX_ObjectSetAttr(char,'battleComputer',0)
energy=Object_GetAttr(char,'energyPoints')
lastenergy = FFX_ObjectGetAttr(char,'ivlasteng')
if energy<lastenergy:
if FFX_ObjectGetAttr(obj,'addingToDB')!=0:
Mission_StatusText('you used energy the Battle Computer needs! try again!')
FFX_ObjectSetAttr(obj,'addingToDB',0)
FFX_ObjectSetAttr(obj,'addingToDBFailed',1)
else:
RegTimer('checkEnergyUseBC',0.1,0,char,obj)
FFX_ObjectSetAttr(char,'ivlasteng',Object_GetAttr(char,'energyPoints'))
def checkRangeBC(event):
char=event.object
obj=event.string
if FFX_ObjectGetAttr(obj,'addingToDBFailed')==1:
return
pos1 = Get_ObjectPos(char)
pos2 = Get_ObjectPos(obj)
dist = cshelper.distance2D(pos1, pos2)
radius=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,5)
if FFX_ObjectGetAttr(obj,'addedToDB')==1:
return
if dist > radius:
if FFX_ObjectGetAttr(obj,'addingToDB')!=0:
Mission_StatusText('target is out of range and can not be added to Battle Computer! try again!')
FFX_ObjectSetAttr(obj,'addingToDB',0)
FFX_ObjectSetAttr(obj,'addingToDBFailed',1)
if dist < radius:
RegTimer('checkRangeBC',1,0,char,obj)
def addTargettoDB(event):
char=event.object
obj=event.string
if FFX_ObjectGetAttr(obj,'addingToDBFailed')==1:
FFX_ObjectSetAttr(obj,'addingToDBFailed',0)
return
else:
if FFX_ObjectGetAttr(obj,'addingToDB')!=0:
FFX_ObjectSetAttr(obj,'addedToDB',1)
FFX_ADD_TARGET_TO_DB = obj
Mission_StatusText('successfully added target to Battle Computer!')
else:
Mission_StatusText('target failed to be entered into Battle Computer! try again!')
FFX_ObjectSetAttr(obj,'addingToDB',0)
def enemyCheck(event):
char=event.object
if Object_IsAlive(char)==0:
return
radius=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,5)
radius2=radius*radius
RegTimer('enemyCheck',3,0,char)
if FFX_ObjectGetAttr(char,'computer_on')!=0:
return
else:
for obj in Mission_GetDynamicObjects():
if ((Object_GetClass(obj)&FFX_CHARACTER!=0)) & (obj!=char) & ((Object_GetClass(obj)&js.OC_TERRAIN)==0) & ((Object_GetClass(obj)&js.OC_VEHICLE)==0) & ((Object_GetClass(obj)&js.OC_BUILDING)==0) & ((Object_GetClass(obj)&js.OC_GENERIC)==0):
d=distanceSq(obj,char)
if d<radius2:
target=getTargetname(obj)
lookupTargetinBattleComputer(char,target,obj)
def lookupTargetinBattleComputer(char,target,obj):
dbEntry1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,1)
dbEntry2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,2)
dbEntry3=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,3)
dbEntry4=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,4)
cmd1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,6)
cmd2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,8)
team=m25ai.GetTeam(obj)
myTeam=m25ai.GetTeam(char)
if FFX_ObjectGetAttr(obj,'addedToDB')!=0:
FFX_ADD_TARGET_TO_DB = target
dbEntry5=FFX_ADD_TARGET_TO_DB
if dbEntry5==target:
if myTeam!=team:
Mission_CustomAction(cmd1,char,obj,'bcPower1',30,0)
Mission_CustomAction(cmd2,char,obj,'bcPower2',30,0)
FFX_ObjectSetAttr(char,'computer_on',1)
agility=Object_GetAttr(char,'templateAgility')
newAgility=Object_GetAttr(char,'templateAgility')+2
Object_SetAttr(char,'agility',newAgility)
agl=Object_GetAttr(char,'agility')
Mission_StatusText('battle computer detected known enemy in range')
RegTimer('trackTarget',1,0,char,obj)
return
if (dbEntry1==target) | (dbEntry2==target) | (dbEntry3==target) | (dbEntry4==target):
if myTeam!=team:
Mission_CustomAction(cmd1,char,obj,'bcPower1',30,0)
Mission_CustomAction(cmd2,char,obj,'bcPower2',30,0)
FFX_ObjectSetAttr(char,'computer_on',1)
agility=Object_GetAttr(char,'templateAgility')
newAgility=Object_GetAttr(char,'templateAgility')+2
Object_SetAttr(char,'agility',newAgility)
agl=Object_GetAttr(char,'agility')
Mission_StatusText('battle computer detected known enemy in range!')
RegTimer('trackTarget',1,0,char,obj)
def bcPower1(target,char):
pwr1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,7)
Trigger_Power(char,target,pwr1,'')
def bcPower2(target,char):
pwr2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,9)
Trigger_Power(char,target,pwr2,'')
def trackTarget(event):
char=event.object
obj=event.string
if Object_IsAlive(obj)==0:
return
if Object_IsAlive(char)==0:
return
dbEntry1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,1)
dbEntry2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,2)
dbEntry3=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,3)
dbEntry4=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,4)
pos1 = Get_ObjectPos(char)
pos2 = Get_ObjectPos(obj)
dist = cshelper.distance2D(pos1, pos2)
radius=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,5)
if dist > radius:
Mission_StatusText('enemy out of range of battle computer!')
removeBCBonus(char,obj)
if dist < radius:
RegTimer('trackTarget',1,0,char,obj)
def removeBCBonus(char,obj):
cmd1=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,6)
cmd2=getByTemplate(char,FFX_BATTLECOMPUTER_CUSTOM,8)
Mission_RemoveCustomAction(cmd1,char,obj)
Mission_RemoveCustomAction(cmd2,char,obj)
FFX_ObjectSetAttr(char,'computer_on',0)
agility=Object_GetAttr(char,'templateAgility')
Object_SetAttr(char,'agility',agility)
def getTargetname(obj):
temp=FFX_GetTemplate(obj)
name=GetRootName(temp)
return name
[/spoiler]
It got rid of the rally/plus sign but I'm still not getting any custom commands. Would it make a difference that my character is a built-in? I suppose I could re-run the power ID utility and see if that helps.
I'm not sure. I'll run a test on my end. Does it work with one of your customs? Thanks for testing this, YL,
No, it doesn't work with a custom character either. :(
I made a copy of liberty_lad in FFEdit and renamed it battle_computer_lad and loaded him up in M25's Team Mode. I did get my commands on the first target I added to the database, but even though I got notifications that the other targets I added were added successfully, I never got the commands on them, they remained on the 1st target. So there's certainly a bug in there, but you should be getting commands on at least your 1st target. I noticed that you didn't add any targets in your customization for targets that are already in the database at the start of the mission. This is fine as it should work that way, too, but what if you add in some hero file or built-in names to your customization in ffxcustom2. Do you still not get any commands on them? Are you sure you have the name of the built-in spelled exaclty the same as you have it in the customization? Do you get any errors in the script.log?
Okay, I fixed Battle Computer (I think) and gave it a rehaul. Instead of getting 4 slots for existing targets and having the ability to add one during a mission, now you have a total of 5 slots that you can place targets in to have at the beginning of the mission (or you can have all or some of your slots empty at the beginning) and you can overwrite them with new ones during a mission. You can overwrite slots as many times as you want during a mission.
When using the Add Target to Database command on a target, you then rt.-click on the target again and get a list of slots 1-5. If you've added targets in your Battle Computer in ffxcustom2.py, then their name will appear in that slot (i.e. Slot 1: Captain America, Slot 2: Daredevil, Slot 3: , Slot 4: , Slot 5: )
Click the slot you want to add the target too. You can choose an empty slot or overwrite and existing target's slot. The newly added target's name will then replace the ones you overwrote or be added to the empty slot.
Once a target is overwritten, that target must be re-entered into the database to get the bonuses against that character, even if they are in the ffxcustom2.py customization list. Now, of course, if you restart the mission then the targets in the ffxcustom2.py list will again be the default targets in the database.
If, during the process of overwriting a target with a new target, you get stunned, or enraged, etc., the Battle Computer will corrupt the data of the original target and not be able to add the new data. You no longer get the bonus against the original target but the entry is still there in the slot. So basically it's an empty slot, but still shows the name of the original target. You can re-enter new data into that slot.
Basically everything else works the same.
You can download the fix here:
Battle Computer Update (http://ffx.freedomforceforever.com/downloads/BattleComputerUpdate.zip)
Make sure you update your existing customization for Battle Computer in the new ffxcustom2.py file to have 5 slots for targets instead of 4.
Um... I think I did something wrong.
The game locks up when it finishes precaching data. I mean, it stops dead. It didn't before I installed the update.
In the character creation section, all the new attributes say "ATTRIB_[attribute name]", and when you select one, the description box says "ATTRIB_[attribute name]_DESC".
I did save the original copies of the files, so going back isn't a problem, but I don't know what I did wrong, so I don't know how to fix it when I re-install the update.
Quote from: daglob on April 21, 2008, 11:33:59 AM
Um... I think I did something wrong.
The game locks up when it finishes precaching data. I mean, it stops dead. It didn't before I installed the update.
In the character creation section, all the new attributes say "ATTRIB_[attribute name]", and when you select one, the description box says "ATTRIB_[attribute name]_DESC".
I did save the original copies of the files, so going back isn't a problem, but I don't know what I did wrong, so I don't know how to fix it when I re-install the update.
Remember that you need to merge the new .dat files and strings.txt, not replace your existing ones with them. If this isn't the issue, then please post your script.log.
You also need to regenerate the Strings DAT file once you update the strings.txt file. Thats what would cause the "ATTRIB_[attribute name]" issue.
Quote from: GogglesPizanno on April 21, 2008, 01:11:25 PM
You also need to regenerate the Strings DAT file once you update the strings.txt file. Thats what would cause the "ATTRIB_[attribute name]" issue.
How does one do that?
I did merge and not replace.
Quote from: daglob on April 21, 2008, 03:03:09 PM
Quote from: GogglesPizanno on April 21, 2008, 01:11:25 PM
You also need to regenerate the Strings DAT file once you update the strings.txt file. Thats what would cause the "ATTRIB_[attribute name]" issue.
How does one do that?
I did merge and not replace.
After copying and pasting the text from strings.txt into your strings.txt, open FFEdit and click the Generate Language Files button. It could take awhile, so go walk your hamster, pack a trek-dak, or do whatever it is you do to waste time. ^_^
Now, I don't see not generating your language files as the issue of the game locking up, so you may still need to post your script.log and FF.log.
Ah! Okay, that is the problem: I click that button and nothing happens. The file dates are the same as they were before, no hourglass by the cursor, no nothing.
I have both the input and outpur directories set to the same one, the one with the stings.txt file in it, as are the strings, captins, and speech files.
...and how does one access the Arnim Zola attribute?
Quote from: daglob on April 22, 2008, 09:46:39 PM
Ah! Okay, that is the problem: I click that button and nothing happens. The file dates are the same as they were before, no hourglass by the cursor, no nothing.
I have both the input and outpur directories set to the same one, the one with the stings.txt file in it, as are the strings, captins, and speech files.
...and how does one access the Arnim Zola attribute?
Hmm. Nothing happens when clicking the Generate Language Files button? If, when you open FFEdit, you scroll down to the bottom of the FFEdit window, you should see a blank, grey, text field. You should be able to click the Generate Language Files button and then see text stating what language file is being generated. This is the only visual confirmation that anything might be happening while Generating Language Files. Also, when you checked the file dates, did you just check the strings.txt or did you look at the strings.dat?
To access the Arnim Zola Attribute, which is an FFX Combo Attribute, you'll need to add arnimzola to your Attributes tab in FFEdit and make sure it's added into your ffxmulti.py file.
Use M25's language generator - it is much faster.
Strings.txt, which I edited, has a recent date (4/13, I think), all the .dat files have a date from last year.
I moved the slider to the bottom of the page, and discovered that it is giving me an error message that is hidden with the usual view. It is saying that it has troulbe copying string.txt to the directory. I guess that means that I need the file in a separate directory to do this. Let me try that and see what happens.
Is there a tutorial for the M25 language generator or adding those attributes?
Bear with me, guys. When I went to college, computers where things that had their own building, and us commercial art majors never went in there 'cause, like, what could it possibly do for us?
Bill
QuoteBear with me, guys. When I went to college, computers where things that had their own building, and us commercial art majors never went in there 'cause, like, what could it possibly do for us?
Blink a lot and look pretty?
I haven't used the M25 generator but I hear it works well and is really quick.
As for using FFEdit, there is a quirk to it in that you need the destination to be somewhere else (there is a way to like leave the line blank or something but I don't remember) - anyway what i normally do is choose the path to the language files and then for the target I just choose some temp folder on my desktop. Then they generate (it will look like the app froze up) and then when its done I just copy them from the temp directory back to the lang directory.
See i could use M25's fancy sleek new machine, but as lazy people, "what could it possibly do for us?"
;)
Well, for one thing, it doesn't take 10 minutes to compile the DATs.
I typically leave the Input Directory blank and specify the Output Directory as the Lang\English folder of the current mod (where the strings.txt file is). That way, FFEdit takes its input as the strings.txt of the current mod (as determined by the Primary Data Path) and sends the output strings.dat to the folder specified without trying to copy strings.txt over itself.
Quote from: TaskMasterX on April 18, 2008, 03:29:30 PM
Okay, I fixed Battle Computer (I think) and gave it a rehaul. Instead of getting 4 slots for existing targets and having the ability to add one during a mission, now you have a total of 5 slots that you can place targets in to have at the beginning of the mission (or you can have all or some of your slots empty at the beginning) and you can overwrite them with new ones during a mission. You can overwrite slots as many times as you want during a mission.
When using the Add Target to Database command on a target, you then rt.-click on the target again and get a list of slots 1-5. If you've added targets in your Battle Computer in ffxcustom2.py, then their name will appear in that slot (i.e. Slot 1: Captain America, Slot 2: Daredevil, Slot 3: , Slot 4: , Slot 5: )
Click the slot you want to add the target too. You can choose an empty slot or overwrite and existing target's slot. The newly added target's name will then replace the ones you overwrote or be added to the empty slot.
Once a target is overwritten, that target must be re-entered into the database to get the bonuses against that character, even if they are in the ffxcustom2.py customization list. Now, of course, if you restart the mission then the targets in the ffxcustom2.py list will again be the default targets in the database.
If, during the process of overwriting a target with a new target, you get stunned, or enraged, etc., the Battle Computer will corrupt the data of the original target and not be able to add the new data. You no longer get the bonus against the original target but the entry is still there in the slot. So basically it's an empty slot, but still shows the name of the original target. You can re-enter new data into that slot.
Basically everything else works the same.
You can download the fix here:
Battle Computer Update (http://ffx.freedomforceforever.com/downloads/BattleComputerUpdate.zip)
Make sure you update your existing customization for Battle Computer in the new ffxcustom2.py file to have 5 slots for targets instead of 4.
Well, now I can't add anybody to the battlecomputer in Campaign or Rumble Room.
I copied and pasted the new code in to FFX.py and changed ffxcustom2.py but no dice.
[EDIT]
It has now started working in Rumble Room for no apparent reason.
[BUMP]
Still not working in Campaign Mode. Adding to the Database is not even an option.
Sorry for the delay, YL. I tried it out myself and I'm not sure what's preventing the commands to appear on enemies in Camp. Mode. I see that the attribute is initialized but no commands. Unfortunately, I don't play Camp. mode much at all so maybe there's something I'm missing? Do other FFX attributes that add commands appear to be working? Are there any known issues with FFX commands not appearing in Camp. Mode?
I double-checked and other custom commands come up fine.
Okay, thanks YL. I'll look into this more and hopefully have a solution for the next update.
Grapple, tangle wire , et cetera are not available as swaps in the Control Centre. How do I set them then?
Yes, because the grapple Mod is in it's own module - grapple.py, and not part of ffx.py, they won't appear in FFXCC. You'll need to edit ffxcustom.py manually. The manual has more details on this.
I would have put the grapple mod in ffx.py (actually it started out there) but we recently discovered a size limit for the ffx.py, so I had to put it in it's own module. Eventually, Epimethee the Great will find a way to update the FFXCC to include the ffxcustom2.py customs and get it to see other modules! ^_^
Sorry, I guess I didn't read closely enough.
I have the swaps set-up for Hulk and Spidey now.
The damage option on tangle wire doesn't seem to work though. Works fine for grapple.
Did anyone else notice that living laser does not use the custom fxs when you change it?
Living Laser is working for me. I just tried Nightcrawler's Teleport Strike and it works perfectly. Can you post your customization and any errors in your script.log?
Quote from: TaskMasterX on June 06, 2008, 04:01:41 AM
Living Laser is working for me. I just tried Nightcrawler's Teleport Strike and it works perfectly. Can you post your customization and any errors in your script.log?
So I tried it again and this was the only thing in my log:
on hero_2 of template custom_template_74 (thor (ultimate))
inittoughguy2: char=<hero_2>
inittoughguy2: initializing for hero_2
initAttribsForChar (thor (ultimate)): looking at attribute weathercontrol
execInitAttrib: init weathercontrol attribute
on hero_2 of template custom_template_74 (thor (ultimate))
initAttribsForChar (thor (ultimate)): looking at attribute livinglaser
execInitAttrib: init livinglaser attribute
on hero_2 of template custom_template_74 (thor (ultimate))
Will this work on the mac?
Using Bootcamp, yes. But the game (Freedom Force vs. The Third Reich) this mod is for was never released for Mac OS X.
Well I'm dumb not knowing that it was for FFvsT3R :doh:
Thanks for that man
The original FFX is also available for the first game at www.fundamentzero.com. However, it's using a PC executable installer. More importantly, file paths for the game resources (meshes, FXes, etc.) would require editing, and the FFEdit game resources editor was never released for the MAc AFAIK.
I just downloaded 3.2, 3.2.1, and 3.2.2 (new computer) and I was going to install them but then began to wonder if 3.3 is just around the corner or not? If it is, I'll just wait for it. If not, I'll install the 3.2 series. Thanks, guys.
Yes, FFX 3.3 is currently being worked on, and may be released later this month (crosses fingers). But, I think FFX 3.3 may require the previous updates to work correctly, so you may want to go ahead and install them. I'll have to research this to be sure though.
I'm trying to set up the energy redirector attribute for use with Captain Atom but it doesn't seem to be working. I created the powers in FFEdit and followed the directions in the FFX manula for setting it up. Captain Atom absorbs the attacks and the twinkle effects play and he gains the custom commands to use the absorbed powers but when I try to use the powrs nothing happens. This is how I have it set up:
["captain atom","effect_ffx_energysparks","erExplode","energy blast","ca energy blast","nuclear blast","ca nuclear blast","electric redirection","ca electric blast","","",""],
It looks like you don't have the customizations in the correct spots. The spot after "erExplode" should have the name of the actual explosion power, not "energy blast".
It should look like this:
["captain atom","effect_ffx_energysparks","erExplode","EXPLOSION POWER","energy blast","ca energy blast","nuclear blast","ca nuclear blast","electric redirection","ca electric blast","",""],
Just change EXPLOSION POWER to the name of the Area Power in FFEdit you want to trigger when he absorbs to much energy.
Quote from: TaskMasterX on July 07, 2008, 04:33:37 AM
It looks like you don't have the customizations in the correct spots. The spot after "erExplode" should have the name of the actual explosion power, not "energy blast".
It should look like this:
["captain atom","effect_ffx_energysparks","erExplode","EXPLOSION POWER","energy blast","ca energy blast","nuclear blast","ca nuclear blast","electric redirection","ca electric blast","",""],
Just change EXPLOSION POWER to the name of the Area Power in FFEdit you want to trigger when he absorbs to much energy.
Thanks, I figured it was something simple. The manual doesn't mention the "EXPLOSION POWER". It says after the side effect, you put the command for the first power.
Thanks for the heads up. I'll update the manual for the next FFX version.
Would it be possible to provide the new version as an upgrade and a full program with all versions? Thanks.
This may not be the right spot for this, but I have a suggestion for a new FFX attribute. What about a "King" or "Controller" attribute, one which would give you a custom command that would allow you to take charge of the ambient characters in a level. For example, you are playing a certain sea king on a level populated with fish and other aquatic beings set up as police, let's say. He uses his custom command, and the various sealife comes running to him, and respond to basic commands like private army. Would this be possible or viable?
I finally have everthing loaded! :)
I think there is a problem with Defense Mechanism. I'm not sure adrenalin surge is working right. It seems to be adding to health and not energy. Also, the manual and control center have some differences. I hope I posted this in the right thread. Also, what exactly is the parameter entry for?
Thanks, Xenolith. I'll double-check Adrenaline Surge.
Can you be more specific about the inconsistencies with the manual and the CC and where you're seeing the parameter entry.
Sure, IIRC, adrenalin surge is not in the manual. Energy through pain is, which I assume was adrenalin surge? I don't know. I can look at it again tonight because I'm just going off the top of my head right now.