Thanks to my previous inqueries, I know that linking against the main AIWar dll is fine by the devs. As such, I wrote this fun little thing. (class, imports, and other junk omitted)
static int Main(string[] args)static int Main(string[] args)
{
Player aiPlayerRaw = new Player(9); //"Real" AIs start at player slot 9, so lets do that here
AIPlayer aiPlayer = new AIPlayer(aiPlayerRaw); //Initialize the AI specific information associated with a player
AIPlanet aiPlanet = new AIPlanet(0); //"Blank" AI specific state for the "planet" to work against
//Pass in a real StringBuilder if you want to see what would of been written to the log file
System.Text.StringBuilder builder = null; //new System.Text.StringBuilder();
//Is there a better way to iterate through all enumeration values? I'm not that familiar with C#
for(int i = 0; i < (int)AIType.Length; ++i)
{
aiPlayer.AIType = (AIType)i;
Console.Out.Write(((AIType)i).ToString() + ": ");
Console.Out.Write("Attack: " + Math.Round(AIRouting.AdjustNumberShipsFromAIType(aiPlayer, aiPlanet, FInt.FromParts(100, 0), false, builder).ToFloatNonSim())+ "% ");
Console.Out.WriteLine("Defense: " + Math.Round(AIRouting.AdjustNumberShipsFromAIType(aiPlayer, aiPlanet, FInt.FromParts(100, 0), true, builder).ToFloatNonSim()) + "%");
}
if(builder != null)
Console.Out.WriteLine(builder.ToString());
return 0;
}
And here is what I get
None: Attack: 100% Defense: 100%
Entrenched_Homeworlder: Attack: 100% Defense: 100%
Vicious_Raider: Attack: 150% Defense: 30%
Fortress_Baron: Attack: 100% Defense: 100%
Sledge_Hammer: Attack: 100% Defense: 100%
Assassin: Attack: 125% Defense: 100%
Bully: Attack: 125% Defense: 100%
Turtle: Attack: 100% Defense: 100%
Technologist_Homeworlder: Attack: 100% Defense: 100%
Technologist_Raider: Attack: 150% Defense: 30%
Mad_Bomber: Attack: 200% Defense: 1%
Feeding_Parasite: Attack: 125% Defense: 100%
Stealth_Master: Attack: 100% Defense: 100%
Special_Forces_Captain: Attack: 100% Defense: 100%
Train_Master: Attack: 100% Defense: 100%
Teleporter_Turtle: Attack: 100% Defense: 100%
Counter_Spy: Attack: 100% Defense: 100%
Scorched_Earth: Attack: 100% Defense: 100%
Shadow_Master: Attack: 100% Defense: 100%
Attritioner: Attack: 125% Defense: 40%
Backdoor_Hacker: Attack: 100% Defense: 100%
Random_Easier: Attack: 100% Defense: 100%
Random_Moderate: Attack: 100% Defense: 100%
Random_Harder: Attack: 100% Defense: 100%
Random_All: Attack: 100% Defense: 100%
Mine_Enthusiast: Attack: 100% Defense: 100%
The_Tank: Attack: 100% Defense: 30%
Random_Moderate_And_Easier: Attack: 100% Defense: 100%
Technologist_Parasite: Attack: 125% Defense: 100%
Technologist_Turtle: Attack: 100% Defense: 100%
Technologist_Sledge_Hammer: Attack: 100% Defense: 100%
The_Core: Attack: 50% Defense: 30%
Raid_Engine: Attack: 100% Defense: 100%
Alarmist: Attack: 100% Defense: 100%
Random_Harder_Non_Technologist: Attack: 100% Defense: 100%
Random_All_Non_Technologist: Attack: 100% Defense: 100%
Camouflager: Attack: 100% Defense: 100%
Experimentalist: Attack: 125% Defense: 40%
StarfleetCommander: Attack: 125% Defense: 40%
ZenithDescendant: Attack: 125% Defense: 40%
Golemite: Attack: 100% Defense: 100%
SpeedRacer: Attack: 125% Defense: 100%
Peacemaker: Attack: 100% Defense: 100%
RadarJammer: Attack: 100% Defense: 100%
OneWayDoormaster: Attack: 100% Defense: 100%
TagTeamer: Attack: 100% Defense: 100%
ShieldNinny: Attack: 100% Defense: 100%
GravDriller: Attack: 125% Defense: 40%
NeinzulClusterBomber: Attack: 100% Defense: 100%
NeinzulViralEnthusiast: Attack: 100% Defense: 100%
NeinzulNester: Attack: 100% Defense: 100%
NeinzulYoungster: Attack: 150% Defense: 25%
SupportCorps: Attack: 100% Defense: 100%
WarpJumper: Attack: 100% Defense: 100%
Vanilla: Attack: 100% Defense: 100%
Everything: Attack: 100% Defense: 100%
Retaliatory: Attack: 100% Defense: 100%
Spireling: Attack: 125% Defense: 40%
CraftySpire: Attack: 100% Defense: 100%
Thief: Attack: 125% Defense: 100%
ExtremeRaider: Attack: 150% Defense: 30%
SpireHammer: Attack: 100% Defense: 100%
Notice that there are some not "actual" AI types in there, like the Random types, and the most fearsome AI type of all time, None!
Anyways, as of 5.033, these should be the right multipliers, straight from the game engine.
If you want, I can try to construct similar "queries" for other stuff (not just AI data, but ship data and the like)