No, it's all in a code file, and we edit it by hand. Here's the initial part of the function that handles it:
private void InitializeType()
{
int tempTechLevel;
switch ( this.Type )
{
#region Fighters
case ForegroundObjectType.Fighter:
case ForegroundObjectType.BulletproofFighter:
this.ShipType = ShipType.Fighter;
this.ShipLevel = 1;
this.MoveSpeed = 28;
this.LoneUnitRadius = 20;
this.MetalCost = 100;
this.CrystalCost = 100;
this.AttackPower = 300;
this.AttackRecharge = 80;
this.AttackRange = 200;
this.MaxHealth = 11600;
this.ShieldRating = 100;
this.EnergyUse = 50;
this.EngineHealth = 200;
this.MinHitPercent = 30;
this.PenetrateHighShields = true;
this.LoadedDescriptionType = ForegroundObjectType.Fighter;
this.SetAttackBonus( ShipType.ZenithViralShredder, 40 );
this.SetAttackBonus( ShipType.Bomber, 16 );
this.SetAttackBonus( ShipType.Marauder, 12 );
this.SetAttackBonus( ShipType.Cutlass, 12 );
this.SetAttackBonus( ShipType.Raider, 12 );
this.SetAttackBonus( ShipType.Parasite, 12 );
this.SetAttackBonus( ShipType.GrenadeLauncher, 12 );
this.SetAttackBonus( ShipType.ImpulseReactionEmitter, 12 );
this.SetAttackBonus( ShipType.ZenithParalyzer, 12 );
this.SetAttackBonus( ShipType.Starship_All, 5 );
this.SetAttackBonus( ShipType.Plane, 2 );
this.SetAttackBonus( ShipType.Lazer_Gatling, 2 );
this.SetAttackBonus( ShipType.Autocannon, 2 );
this.ShotType = ForegroundObjectType.ShotBasic;
if ( this.Type == ForegroundObjectType.BulletproofFighter )
{
this.ShipType = ShipType.Bulletproof;
this.Bulletproof = true;
this.ImmuneToBeingInstaKilled = true;
this.LoadedDescriptionType = ForegroundObjectType.BulletproofFighter;
this.MetalCost *= 2;
this.CrystalCost = ( (FInt)this.CrystalCost * FInt.FromParts( 0, 500 ) ).ToInt();
this.AttackRecharge = ( (FInt)this.AttackRecharge * FInt.FromParts( 1, 50 ) ).ToInt();
this.AttackRange = ( (FInt)this.AttackRange * FInt.FromParts( 1, 50 ) ).ToInt();
this.MaxHealth = ( (FInt)this.MaxHealth * FInt.FromParts( 1, 100 ) ).ToInt();
this.ShieldRating = ( (FInt)this.ShieldRating * FInt.FromParts( 0, 800 ) ).ToInt();
this.EngineHealth = ( (FInt)this.EngineHealth * FInt.FromParts( 1, 500 ) ).ToInt();
this.MinHitPercent = ( (FInt)this.MinHitPercent * FInt.FromParts( 1, 200 ) ).ToInt();
this.ShipCapMultiplier = FInt.FromParts( 0, 900 );
}
break;
There's then a separate case statement for each ForegroundObjectType (including FighterII, Bomber, BomberII, etc... quite a few of them in total).
There are also a large variety of rules applied after this function call, like multiplying the MaxHealth of most definitions by 5, and making all Starships immune to reclamation, etc.