Last updated: 12/29/98 22:41
Much of the following information came originally from the TAORF (Total Annihilation Orbital Research Facility) web site tutorial. As with everything else on the web, plagiarism is the most sincere form of flattery. I merely reformatted the information Doug had on his web site tutorial, added a few missing pieces, and cleaned it up to my liking.
All information about a unit is stored in an FBI file. The FBI file is a simple text file with the following format:
[UNITINFO] { Variable = Value; Variable2 = Value2; ... } |
Within a given FBI file, you must include a MINIMUM of the following amount of data. The more data variables you include, however, the more accurate your unit will be described, and the better it will probably work in the long run. The following sample FBI file comes from the Core Hellfire, from TADD:
[UNITINFO] { UnitName=hellfire; Version=1; Side=CORE; Objectname=hellfire; Designation=ARM-MML5; Name=Hellfire; Description=Heavy Laser Hellfire Battle Tank; FootprintX=7; FootprintZ=7; BuildCostEnergy=7812; BuildCostMetal=1586; MaxDamage=2801; MaxWaterDepth=20; MaxSlope=15; EnergyUse=1.0; BuildTime=23513; WorkerTime=0; BMcode=1; Builder=0; ThreeD=1; ZBuffer=1; NoAutoFire=0; SightDistance=240; RadarDistance=0; SoundCategory=CORE_TANK; EnergyStorage=0; MetalStorage=0; ExplodeAs=BIG_UNITEX; SelfDestructAs=BIG_UNIT; Category=CORE TANK LEVEL2 WEAPON NOTAIR NOTSUB ; TEDClass=TANK; Copyright=Copyright 1997 Humongous Entertainment. All rights reserved.; Corpse=hellfire_dead; GermanName=Verbrecher; GermanDescription=Überschwerer Gefechtspanzer; FrenchName=hellfire; Frenchdescription=Char d'assaut très lourd; SpanishName=hellfire Thug; SpanishDescription=Very Heavy Assault Tank; ItalianName=hellfire Thug; ItalianDescription=Very Heavy Assault Tank; UnitNumber=800; firestandorders=1; StandingFireOrder=2; mobilestandorders=1; StandingMoveOrder=1; canmove=1; canpatrol=1; canstop=1; canguard=1; MaxVelocity=0.4; BrakeRate=0.04; Acceleration=0.02; TurnRate=256; SteeringMode=1; ShootMe=1; EnergyMake=1.0; DefaultMissionType=Standby; maneuverleashlength=640; MovementClass=TANKBH3; Weapon1=Hellfire_LASER; Weapon2=Hellfire_LASER; wpri_badTargetCategory=NOTAIR; BadTargetCategory=NOTAIR; Upright=0; canattack=1; cantbetransported=1; downloadable=1; } |
A somewhat-complete (that is, these are the ones we know of) list of variables that can be found in the FBI files follows. A 3rd party utility called FRED can be downloaded to assist you in the editing of your FBI files. It can be downloaded from TAMMO's download area. Pay attention to the descriptions of the variables listed below, as some of them are quite important to defining the look, feel, and behavior of the unit.
Variable | Description | Examples | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Acceleration | How fast the unit acceleration | Acceleration=0.5; | ||||||||||||||||||
ActivateWhenBuilt | Is the default state of this unit ACTIVATED (or ON) when built. | ActivateWhenBuilt=1; | ||||||||||||||||||
ai_limit | Limit of number the AI will build of this unit. | ai_limit=limit CORVOYR 2; | ||||||||||||||||||
ai_weight | The weighting (ie. what % of these to to build. I don't know what the units are) | ai_weight=weight CORFLAK 6; | ||||||||||||||||||
altfromsealevel | Altitude from sea. For flying units. Don't quite understand this one myself. | altfromsealevel=1; | ||||||||||||||||||
amphibious | Is the unit amphibious (can go under water, & on land. | amphibious=1; | ||||||||||||||||||
antiweapons | Does this unit shoot at the weapons of other units eg. Missile defence systems | antiweapons=1; | ||||||||||||||||||
attackrunlength | For planes. The distance they must travel before being able to drop their bombs/shoot their missiles. HoverAttack is like attackrunlength=0, I think | attackrunlength=290; | ||||||||||||||||||
BMcode | A BMcode. Every unit has a value of 1, except for contstruction plants (eg. Air Craft Plant, Vehical Plants). So do likewise. | BMcode=1; | ||||||||||||||||||
BadTargetCategory | The type of target that is not good for that low accuracy at this type of unit. In general. The value specified identifies all units that have that value specified in their own "Category" settings. | BadTargetCategory=VTOL; | ||||||||||||||||||
BankScale | The Scale (see Scale) of the unit when banking (ie. turning if its an aircraft) | BankScale=1; | ||||||||||||||||||
BrakeRate | The rate at which the unit can slow down | BrakeRate=9; | ||||||||||||||||||
BuildAngle | No idea. Here's a possibility: Random angle to build unit on, example is the solar panel some times facing 180 degrees from the solar panel next to it. | BuildAngle=32768; | ||||||||||||||||||
BuildCostEnergy | The cost in energy of building this unit. The amount of energy that will be consumed during the building of this unit. I think value < 0 generate errors, but I've never tried. | BuildCostEnergy=985; | ||||||||||||||||||
BuildCostMetal | The cost in metal of building this unit. The amount of metal that will be consumed during the building of this unit. Again, I think values < 0 produce errors. | BuildCostMetal=0; | ||||||||||||||||||
BuildTime | The time is takes to build this unit. On average, 10000 is medium time, things like fusion plants are more like 100000, and krogoth like 300000 | BuildTime=9894; | ||||||||||||||||||
Builddistance | The distance at which a unit can build if it is a builder. | Builddistance=80; | ||||||||||||||||||
Builder | Can this unit build other units. | Builder=1; | ||||||||||||||||||
canattack | Can the unit attack. | canattack=1; | ||||||||||||||||||
CanCapture | Can this unit capture other units. | CanCapture=1; | ||||||||||||||||||
CanDgun | Can the unit DGUN (ie. has a gun like the commander) | candgun=1; | ||||||||||||||||||
Canfly | Can this unit fly. | Canfly=1; | ||||||||||||||||||
canguard | Can this unit guard. | canguard=1; | ||||||||||||||||||
canhover | Can this unit hover | canhover=1; | ||||||||||||||||||
canload | Can this unit load other units. | canload=1; | ||||||||||||||||||
canmove | Can this unit move. | canmove=1; | ||||||||||||||||||
canpatrol | Can this unit patrol. | canpatrol=1; | ||||||||||||||||||
CanReclamate | Can this unit reclaim things. | CanReclamate=1; | ||||||||||||||||||
canstop | Can this unit stop. | canstop=1; | ||||||||||||||||||
cantbetransported | Is this a unit that transports cannot load eg. Ships, krogoth | cantbetransported=1; | ||||||||||||||||||
Category | A category class. Look at some of the FBI files in totala1.hpi for examples. Essentially, this places the unit in several named catagories that can be named in other variables such as "wpri_badTargetCategory" described below, and in the AI Text files as well. | Category=ARM TANK LEVEL2 CONSTR NOWEAPON NOTAIR NOTSUB CTRL_B; | ||||||||||||||||||
CloakCost | The energy cost of this unit remaining cloaked when standing still. | CloakCost=7; | ||||||||||||||||||
CloakCostMoving | The energy cost of this unit remaining cloaking while moving. | CloakCostMoving=800; | ||||||||||||||||||
Commander | Is this unit the (a?) commander. | Commander=1; | ||||||||||||||||||
Copyright | The copyright of this unit. Must be as shown to the right, or won't work. (Most people copy this line as a comment, and put their own copyright infomation in the commented-out version. | Copyright=Copyright 1997 Humongous Entertainment. All rights reserved.; | ||||||||||||||||||
Corpse | The name of the corpse of this unit (Defined in the TDF file in the corpses directory) (12/29/98) From Draconious: The name of the feature the unit turns into when the unit dies. If the unit is a feature (Dragons Teeth) the unit instantly turns into this feature, when it is finished being built. (this is not the 3do file of the feature, the feature entry tells the 3do file to use in the feautres OBJECT variable). | Corpse=fortification_core; | ||||||||||||||||||
cruisealt | The altitude at which the unit flys | cruisealt=90; | ||||||||||||||||||
DamageModifier | The rate at which this unit heals itself. | DamageModifier=0.7; | ||||||||||||||||||
DefaultMissionType | The default orders of this unit for missions. | DefaultMissionType=VTOL_standby; | ||||||||||||||||||
Description | The description of the unit seen at the bottom of the screen when you hold the cursor over it in the game. | Description=Very Heavy Assault Tank; | ||||||||||||||||||
Designation | The designation. This is unimportant and can have virtually any value (there may be a limit to the number of character it will except) | Designation=WB-S; | ||||||||||||||||||
digger | Does this unit have pieces which extend under ground. I think thats what it means. Things like the pop-up heavy cannon have this = 1. | digger=1; | ||||||||||||||||||
Downloadable | Is this a unit which has been downloaded off the
internet. If you want to be able to use
the unit, put 1. (12/28/98) Note from The Raptor: Not true. I've never included this variable in all of my units, and they work just fine. It's just one that we started seeing in the Cavedog weekly units, so assumed that's what it meant. It really seems to do nothing. |
Downloadable=1; | ||||||||||||||||||
EnergyMake | The energy this unit produces when ACTIVE. | EnergyMake=9; | ||||||||||||||||||
EnergyStorage | The amount added to the maximum amount of energy you can store while the unit is alive. | EnergyStorage=80; | ||||||||||||||||||
EnergyUse | The amount of energy the unit uses while it is ACTIVE. | EnergyUse=9; | ||||||||||||||||||
ExplodeAs | The explosion ID of the explosion that will happen if the unit explodes. See totala1.hpi for other examples. | ExplodeAs=LARGE_BUILDINGEX; | ||||||||||||||||||
ExtractsMetal | The rate at which the unit extracts metal. (Yes, the MOHOmine only extracts at like 0.01) | ExtractsMetal=0.003; | ||||||||||||||||||
firestandorders | Can this unit give firestandorders. You know as much as me. | firestandorders=1; | ||||||||||||||||||
Floater | Does this unit float on water. | Floater=1; | ||||||||||||||||||
FootprintX | The X axis footprint. Should correlate with the unit model's actual size. The footprint helps control how close units can get to one another. | FootprintX=9; | ||||||||||||||||||
FootprintZ | As with FootprintX, but the Z axis (ie. up and down on the screen while playing TA). Should correlate with the unit model's actual size. | FootprintZ=9; | ||||||||||||||||||
FrenchDescription | As description, but in French. | FrenchDescription=Serpent des mers; | ||||||||||||||||||
FrenchName | As Name, but in French | FrenchName=Zeus; | ||||||||||||||||||
GermanDescription | As description, but in German | GermanDescription=Überschwerer Gefechtspanzer; | ||||||||||||||||||
GermanName | As Name, but in german | GermanName=A.K.; | ||||||||||||||||||
HealTime | The time it take for this unit to heal itself. (Typically used by commanders) | HealTime=27; | ||||||||||||||||||
HideDamage | Whether or not to show the amount of damage done to this unit to the opponent(s). Commanders have this value set. | HideDamage=1; | ||||||||||||||||||
HoverAttack | Will this attack while remaining in the same spot, even though it is an aircraft. Like the brawler. | HoverAttack=1; | ||||||||||||||||||
ImmuneToParalyzer | Is this unit immune to being paralyzed. | ImmuneToParalyzer=1; | ||||||||||||||||||
init_cloaked | When built this unit is cloaked. | init_cloaked=1; | ||||||||||||||||||
IsAirBase | Is this unit an airbase. Only the air repair pad and aircraft carriers have this as 1 | IsAirBase=1; | ||||||||||||||||||
IsFeature | Is this unit a feature. eg. The dragons teeth. Features do not appear on radar. | IsFeature=1; | ||||||||||||||||||
istargetingupgrade | Does this unit upgrade the targeting so that units shoot at things on radar like at things seen by that unit. | istargetingupgrade=1; | ||||||||||||||||||
ItalianDescription | As description, but in Italian | ItalianDescription=Veicolo veloce da attacco; | ||||||||||||||||||
ItalianName | As Name, but in Italian | ItalianName=Zipper; | ||||||||||||||||||
JapanesDescription | As description, but in Japanese | JapaneseDescription=XXXX; | ||||||||||||||||||
JapaneseName | As Name, but in Japanese | JapaneseName=Jeffysan; | ||||||||||||||||||
kamikaze | Does this unit kill itself to attack its target eg. The roach/invader | kamikaze=1; | ||||||||||||||||||
kamikazedistance | How far from the target must the unit be to do a kamikaze attack | kamikazedistance=80; | ||||||||||||||||||
MakesMetal | Does this unit make metal. eg. Metal Maker NS | MakesMetal=1; | ||||||||||||||||||
maneuverleashlength | How far from the course that the unit is patrolling / moving on will it vary if it is attacked / distracted. | maneuverleashlength=640; | ||||||||||||||||||
MaxDamage | Amount of damage unit can take before dying (i.e "Hit Points"). Kbots have about 600, Tanks have about 2000, Planes have about 500, Commander has 3000 | MaxDamage=992; | ||||||||||||||||||
MaxSlope | What is the maximum slope this unit can go on. | MaxSlope=8; | ||||||||||||||||||
MaxVelocity | What is the maximum speed of this unit. Commander is 1.07, Core Storm is 1.25, Arm Hawk is 12 | MaxVelocity=9; | ||||||||||||||||||
MaxWaterDepth | What is maximum depth of water this unit can go in | MaxWaterDepth=35; | ||||||||||||||||||
MetalMake | The amount of metal generated by construction units | MetalMake=1; | ||||||||||||||||||
MetalStorage | The amound added to your maximum metal storage while this unit is alive | MetalStorage=900; | ||||||||||||||||||
mincloakdistance | The distance the unit must have on every side to remain cloaked. If another unit moves into this area, the unit uncloaks. | mincloakdistance=90; | ||||||||||||||||||
MinWaterDepth | The minimum depth of water this unit can be in | MinWaterDepth=8; | ||||||||||||||||||
MobileStandOrders | Basically, I think, can this unit hold position of all mobile units, only the transports (all of them) have this equal to 0. | MobileStandOrders=1; | ||||||||||||||||||
MoveRate1 | Planes seem to use this. For example, all planes except the air transports have values of 8, the transports have values of 1. | MoveRate1=1; | ||||||||||||||||||
MovementClass | How the unit moves. See totala1.hpi for examples. Movement classes are typically described in TDF files in the gamedata directory. (The moveinfo.tdf file is a good guess). It is used as a shortcut way of setting certain parameters (such as those listed here) by grouping them and giving them a name. | MovementClass=TANKSH3; | ||||||||||||||||||
Name | The name you see when you move the cursor over the unit in the game. This is the name that appears on the bottom of the screen when you select a unit. | Name=Zipper; | ||||||||||||||||||
NoAutoFire | Double negative. 1 means this unit will not automatically fire at other units. 0 means it will. | NoAutoFire=1; | ||||||||||||||||||
NoChaseCategory | Category the unit will not chase. The value specified identifies all units that have that value specified in their own "Category" settings. | NoChaseCategory=VTOL; | ||||||||||||||||||
norestrict | Is there no resistriction on this unit (presumably for the AI. (12/29/98) From Draconious: If the unit apears in the Unit Restrictions menu, the way the commander does not apear in the list. | norestrict=1; | ||||||||||||||||||
NoShadow | Does this unit not have a shadow (most water units don't) | NoShadow=1; | ||||||||||||||||||
Objectname | Name of 3Dobject file for this unit. This is the name of your 3dO file. You'll do that later, for now leave it the same as Unitname (your unit's "short name"). | Objectname=CORWIN; | ||||||||||||||||||
onoffable | Can this unit be turned on and off. On is ACTIVE, OFF is INACTIVE | onoffable=1; | ||||||||||||||||||
Ovradjust | No idea. Some units just have this | Ovradjust=1; | ||||||||||||||||||
PigLatinDescription | As description but in Pig Latin. | PigLatinDescription=Astfay attackay Outingscay Ehiclevay; | ||||||||||||||||||
PigLatinName | As Name but in Pig Latin. | PigLatinName=Effyjay; | ||||||||||||||||||
PitchScale | PitchScale=1; | |||||||||||||||||||
RadarDistance | Distance that shown to you on radar by your unit | RadarDistance=700; | ||||||||||||||||||
RadarDistanceJam | Distance that is jammed by unit. | RadarDistanceJam=730; | ||||||||||||||||||
Scale | The size modifier from 3DO file into the game. I think. I don't actually know. | Scale=1; | ||||||||||||||||||
SelfDestructAs | The explosion that happens when a unit self desctructs. See totala1.hpi for examples. | SelfDestructAs=SMALL_UNIT; | ||||||||||||||||||
selfdestructcountdown | The number the self-destruct count down starts at. | selfdestructcountdown=2; | ||||||||||||||||||
ShootMe | Does this unit broadcast itself as a target? (eg. Dragons's Teeth has this as 0, all other units as 1) If this is 0, then enemy units will not choose to attack this unit regardless of their orders. | ShootMe=1; | ||||||||||||||||||
ShowPlayerName | Show the players name as a description (like the commander) | ShowPlayerName=1; | ||||||||||||||||||
Side | Which side does the unit belong to ARM, or CORE. The side your unit will be for. | Side=CORE; | ||||||||||||||||||
SightDistance | The distance from the unit that everything is shown in. ie. Distance it gets rid of Fog of War. Unfortunately, this value seems to have a limit of around 400. | SightDistance=90; | ||||||||||||||||||
SonarDistance | The distance given to you as sonar, on the mini map. | SonarDistance=650; | ||||||||||||||||||
SonarDistanceJam | This is how far the unit jams sonar on the mini map. | SonarDistanceJam=650; | ||||||||||||||||||
sortbias | sortbias=0; | |||||||||||||||||||
SoundCategory | The "sound category" the unit uses. Sound categories are typically described in TDF files in the gamedata directory. (The sounds.tdf file is a good place to start). It is used to describe a group of sounds to associate with a unit, such as what sounds does it make when it starts, stops, arrives at a destination, is activated, is deactivated, etc. | SoundCategory=VIPE; | ||||||||||||||||||
SpanishDescription | As description, in Spanish. | SpanishDescription=Vehículo todoterreno de ataque; | ||||||||||||||||||
SpanishName | As Name, but in Spanish | SpanishName=Zipper; | ||||||||||||||||||
StandingFireOrder | This is the initial fire order the unit starts with. 0 = Hold Fire; 1 = Return Fire; 2 = Fire at Will. | StandingFireOrder=0; | ||||||||||||||||||
StandingMoveOrder | this is the initial movement order the unit starts with. 0 = Hold Position; 1 = Move; 2 = Roam | StandingMoveOrder=1; | ||||||||||||||||||
Stealth | Is this unit inivisible on sonar and radar. | Stealth=1; | ||||||||||||||||||
SteeringMode | The way in which the unit turns. See totala1.hpi for options. | SteeringMode=2; | ||||||||||||||||||
TEDClass | Important...I think. Define what type of unit it is. | TEDClass=WATER; | ||||||||||||||||||
teleporter | Is this unit a teleporter. The two galatic gates have this = 1. | teleporter=1; | ||||||||||||||||||
ThreeD | Is the unit 3D. | ThreeD=1; | ||||||||||||||||||
TidalGenerator | Is the unit a Tidal generator? | TidalGenerator=1; | ||||||||||||||||||
TransMaxUnits | Maximum number of units that can be transported. | TransMaxUnits=1; | ||||||||||||||||||
transportcapacity | Like TransMaxUnits I guess. The number of units that can be transported. | transportcapacity=5; | ||||||||||||||||||
transportsize | How big the transport is. I don't quite understand. | transportsize=3; | ||||||||||||||||||
TurnRate | How quickly the unit turns. | TurnRate=999; | ||||||||||||||||||
UnitName | The name of the files used for the unit? This is a unit ID. This is the name of your unit, (what I refer to as the "short name" and the name your files you decided on. e.g.. your file in this case would be called coralpha.fbi. | UnitName=CORWIN; | ||||||||||||||||||
UnitNumber | The ID# for the unit. If this is the same as some other unit, your unit may not work. Unique unit ID. VERY IMPORTANT. All IDs from 0-about 400 have been used. Use other ones > 10000 is the best. The more digits, the more unlikely you'll have a ID conflict with someone else. | UnitNumber=9; | ||||||||||||||||||
Upright | Is the unit upright? For kbots - this keeps the unit upgright when climbing hills. In my case for a flying unit, my unit "layed down" on the ground whenever it landed (air unit). By setting upright=1, it solved my problem. | Upright=1; | ||||||||||||||||||
Version | The version of ta the unit will work under. Do not be fooled. This is very important. It is version of TA under which the unit will run (beta 2 or whatever) | Version=1; | ||||||||||||||||||
WaterLine | How high up the 3d model to put the water line. For ships. | WaterLine=43; | ||||||||||||||||||
Weapon1 | The unit's primary weapon. The name specified is the name of a weapon described in any of the number of TDF files found in the weapon subdirectories. | Weapon1=crblmssl; | ||||||||||||||||||
Weapon2 | The unit's secondary weapon. The name specified is the name of a weapon described in any of the number of TDF files found in the weapon subdirectories. | Weapon2=coramph_weapon2; | ||||||||||||||||||
Weapon3 | The unit's third weapon. The name specified is the name of a weapon described in any of the number of TDF files found in the weapon subdirectories. | Weapon3=CORSEAP_WEAPON3; | ||||||||||||||||||
WindGenerator | The amount of energy generated by the wind by the unit. | WindGenerator=30; | ||||||||||||||||||
WorkerTime | How quickly the unit nanolathes. | WorkerTime=80; | ||||||||||||||||||
wpri_badTargetCategory | A bad target (lower chance of hitting) for the primary weapon. The value specified identifies all units that have that value specified in their own "Category" settings. | wpri_badTargetCategory=VTOL; | ||||||||||||||||||
wsec_badTargetCategory | A bad target for the secondry weapon. | wsec_badTargetCategory=VTOL; | ||||||||||||||||||
YardMap | Defines in more detail the "footprint"
of a construction yard (or any stationary building). As an example, the ARM Adv. Air
Plant data at the right has 6 groups of 7 values defining an X-Z coordinate
"footprint" for the construction yard. The following values are available:
If the unit doesn't use "OpenYard"/"CloseYard" you can simply state
"YardMap=o" no matter the size of the footprint. You could also do the
opposite by stating "YardMap=c", and the whole footprint will appear and
disappear no matter the footprint size. |
// For ARM Adv. Air Plant // FootprintX=7; // FootprintZ=6; YardMap=ooooooo ooooooo occccco occccco occccco occccco; // Thus, the "South" end // of the plant is open // while the other sides // are blocked. |
||||||||||||||||||
ZBuffer | Does the unit have a z buffer. (All units have this = 1) | ZBuffer=1; |