Difference between revisions of "AI War:Cross Planet Attack"

From Arcen Wiki
Jump to navigation Jump to search
m (Pumpkin moved page AI War:Cross Planet Attacks to AI War:Cross Planet Attack: plural hunting)
 
(12 intermediate revisions by 7 users not shown)
Line 1: Line 1:
==How Do I Prepare For Cross-Planet Attacks?==
+
== What is a Cross Planet Attack?==
 +
A Cross Planet Attack (CPA) is a major undertaking by the AI.  Basically, it generates a ton of threat to attack you across all your borders.  You cannot control where these forces come from with gate raiding or anything of that nature.  It takes existing AI fleets that are set for defense and puts them on attack.  Once released, they follow standard threat rules, just as if you had attacked a planet, released their entire defensive fleet, and then fled or died.  After 30 minutes of acting as simple threat, these ships will join up with the threatfleet.
  
'''Q:''' I just got the message cross-planet attack in 15 minutes (180 or so ships)I don't recall this being covered in the tutorialIs there any way to know where the attack will happen?  How would one realistically prepare for it? Split my entire fleet between my planets?
+
These attacks are generated by an internal timerThe occurence of a CPA will depend heavily on the AI DifficultyThey will usually occur anywhere from every 3 to 5 hours.  
  
'''A:''' Cross-planet attacks will occur periodically, and basically what that means is that a certain number of ships on the enemy planets will become "freed" and will go into attack mode instead of defending their current planet. Or, to put it another way, in the example above the Threat is about to go up by 180 in 15 minutes, and those 180 ships may attack anywhere at any time after that point (using the normal attack and retreat logic of the AI, which is the same sort of thing that happens if you kill a planet's command station without first killing all its ships).
+
The rest of this information is current as of the 6.009 release.
  
In the example above, 180 ships is not really that dangerous, and just making sure that there are plenty of turrets and tractor beams on all the enemy-bordering wormholes will probably handle it.  If the number was much larger (which happens as the AI Progress gets higher in the game), you could be looking at 1,000+ or even 2,000+ ships in a cross-planet attack, depending on your difficulty level and just how high the AI Progress has gottenIn those cases, splitting your fleet between the most important planets to defend, while also investing heavily in fortifying wormholes with tractor beams and turrets is a great idea.
+
==How Do Cross-Planet Attacks Work?==
 +
Once the game timer determines a CPA is warranted, a warning will be displayed that one will occur in the next 10:00-15:00 minutes; warning time is dependent on AI Difficulty.  The strength will be determined by a comparison between the game time and the current AIP, and whichever will result in the larger strength will be used.  See below for more detailed discussions on the calculations involved.  Core CPA Guardposts on the Homeworld will always use AIP, and never game length.
 +
 
 +
The strength of a CPA is determined as a hard number.  Once that number is arrived at a series of events will occur to try to fill the CPA when the warning timer reaches 0.  The number of ships is not modified by cap-strength, so if your AIs are using Laser Gatlings or some other high cap ship, expect an easier time of it than if they were using Blade Spawners or some other low cap ship.  This is highly unlikely to change barring some drastic events being documented.
 +
 
 +
The first rule the CPA determines is the starting tech level for the CPA.  Under difficulty 7 it will use either your current AIP tech level, or 2 if it's lower (so if you've pushed the AIP to Tech Level III it'll act as though it was II when it starts looking for units)At difficulty 7+ it will always start at the AI's Tech Level.
 +
 
 +
Once the starting tech level is determined, it will now try to pull half of the CPA's population from the Strategic Reserve (the ships that flood you when you attack an AI homeworld).  It will fill either half of the CPA, or it will take what it can until the Reserve has 50% of its strength left.
 +
 
 +
After getting what it can from the reserve, the CPA will then begin a loop through all planets in the galaxy, searching for ships of the correct tech level.  The following process will be cycled through from the Current CPA Tech Level down through 1, and then it will keep searching if necessary from starting level +1 through to 5.  Planets will only be considered if they are not the AI Homeworld and if the humans are not in force on the planet (the humans have 1/3 or less than the AI on a particular planet in military ships).
 +
 
 +
Example of the Tech cycle:
 +
At Difficulty 7: AIP Tech Level is at MK III.  This means the CPA will start at 3, planet cycle, reduce to 2, planet cycle, reduce to 1, planet cycle, increment to 4 (+1 from starting tech), planet cycle, increment to 5, planet cycle, then stop.
 +
 
 +
===Planet Cycle===
 +
A planet cycle is a loop over all planets, searching for units to include in the CPA.  In all cases it is assumed that the AI is only releasing units for the current tech level of the loop.  Guardians, Starships, Carriers, and forces under immobile forcefields (Spire Shield Guardpost, Forcefield III, etc.) are not considered available.
 +
 
 +
At each planet the loop proceeds thus:
 +
 
 +
# Free available Barracks troops
 +
# Free Military Ships that are either:
 +
## Guarding something (Guardpost, Command Station, etc.)
 +
## Special Forces
 +
## Using PlanetaryRoamer behavior (rarely used)
 +
# Repeat on next planet
 +
 
 +
Should the CPA not fill out after the full cycle of tech levels, it will then pull the remaining units it needs (at the starting tech level) from the strategic reserve to attempt to fill out the CPA.  Should the Strategic Reserve 'bottom out' at 0%, then the CPA will attack/release shorthanded.
 +
 
 +
===Strategic Reserve Ship Placement===
 +
While you'd probably assume the Reserve ships included in the CPA would be issued from the AI HWs, this is not the case.  These ships will appear alongside non-reserve ships released to the CPA, without the need of either a warp gate nor a command station.  For each planet/location that ships were released from, their percentage of the non-reserve ships (example below) that were released gets a corresponding percentage of the reserve ships.
 +
 
 +
For example, the AI has pulled it's 50% of ships from the reserve, and then found 5 planets with ships it can release to fill the CPADoing so, these planets each contribute 100% of the non-reserve ships, but only 50% of the full CPA when including the reserve.  If we assume these planets contribute the following percentages of the non-reserve ships: 15%, 20%, 10%, 25%, 30%, then the reserve will insta-warp a corresponding portion of its ships to those planets in equal values.  Any rounding errors or 'leftovers' from the reserve are simply dumped on the last planet.
 +
 
 +
The reason neither a command station nor a warp gate is required is because it is possible to turn a planet neutral without blowing up the barracks, for example when destroying a command station to avoid deep striking.  Should that barracks be chosen for release, reserve troops will be issued to support the released barracks troops.
 +
 
 +
==Calculation discussion of CPAs==
 +
These calculations are valid as of the 6.009 release.
 +
 
 +
Let's discuss the easier calculation first: Core CPA Guardpost release.
  
Even the really huge cross-planet attacks are quite survivable because they often tend to be very diffuse, coming at you from every direction. So they generally don't pose much risk of just outright crushing your empire. However, they will find weaknesses and holes in your defenses, and slip in through all sorts of sides at once, which is a unique challenge that you don't face many other times during the game.  And if they can't find many weak spots, and you fail to kill them all as they come in, they'll escape back out into the galaxy to try again, as with any attacking ships.
+
===Core CPA Guardpost===
 +
The straight formula is:
 +
(Formula: 100 * Difficulty * Max( 1, AIP/50) * (0.67 + (0.33 * # of Human Homeworlds)) )
  
[[AI_War:Fleet_Command]]
+
What this means is it's 100 ships * Difficulty * an AIP calculation * a homeworld adjustment of an additional 1/3 ships per extra human homeworld.  The Max(1, AIP/50) means that if your AIP is below 50, it'll act as though it was 50.  So, at Diff 7 AIP 100 single homeworld, expect:  
  
 +
[#]s are midpoint calculations to ease reading
  
==How Do Cross-Planet Attacks Work?==
+
100 * 7 [700] * 2 [1400] * 1 [1400] = 1400 ships for a CPA attack triggered by the homeworld post.
 +
 
 +
===Standard CPA===
 +
The standard CPA calculation is a whole lot more convoluted.  As an example from the advanced logs, we'll use a sample from a late game 9/9 CPA.  These logs can be located in the LogicLog_AIMechanic_Waves_MainThread.txt file in the Runtime directory. Search for "Triggering CPA".
 +
----
 +
<code>
 +
11/27/2012 11:24:30 PM (6.009)
 +
 
 +
-----------------------------------
 +
 
 +
Triggering CPA (always from first AI); Game Time: 13:51:00
 +
 
 +
effectiveAIPForCPAPurposes = this.AIProgressionLevelEffective = 147
 +
 
 +
since diff > 7, numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 360 + ( (FInt)60 * ( (FInt)7 - this.AIDifficulty ) ).IntValue = 240
 +
 
 +
minimumAIPForCPAPurposes = Game.Instance.GameSecond / numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 207
 +
 
 +
effectiveAIPForCPAPurposes = Max(effectiveAIPForCPAPurposes,minimumAIPForCPAPurposes) = 207
 +
 
 +
difficultyFactor = ( this.AIDifficulty * this.GetHandicapMultiplier() ) / ( 13 - this.AIDifficulty ) : 2.25
 +
 
 +
simulateMaxTimeWaveFactor = Mat.One + ( ( this.AIDifficulty * 2 ) / ( ( 14 - this.AIDifficulty ) * 3 ) ) : 2.2
 +
 
 +
simulateDoubleWaveFactor = 2
 +
 
 +
simulateDifficultySpecificWaveSizeMultiplier = 2.5
 +
 
 +
humanHomeworldCountMultiplier = Mat.One + ( (FInt)( humanHomeworldCount - 1 ) * FInt.FromParts( 0, 330 ) ) + ( championCount * FInt.FromParts( 0, 066 ) ) = 1
 +
 
 +
numberOfShips (before applying cap-scale) = ( (FInt)effectiveAIPForCPAPurposes * difficultyFactor * simulateMaxTimeWaveFactor * simulateDoubleWaveFactor * simulateDifficultySpecificWaveSizeMultiplier * humanHomeworldCountMultiplier ).IntValue = 5123
 +
 
 +
</code>
 +
----
 +
 
 +
Alright, let's break this down.  In the first line you'll notice a date/time stamp of the occurence.  That's just from the computer's clock for human usability.
  
'''Q:''' I just got the message cross-planet attack in 15 minutes (180 or so ships).  I don't recall this being covered in the tutorialIs there any way to know where the attack will happen? How would one realistically prepare for it?  Split my entire fleet between my planets?
+
Next up you'll see Triggering CPA (always from the first AI).  This is importantThis means all your CPAs are controlled by the first of the two AIs. If you create a 1/10 game you'll have a very different CPA experience than if you created a 10/1 game.
  
'''A:''' Cross-planet attacks will occasionally be launched by the AI -- usually not more frequently than every 45 minutes or so, and often only once every few hoursA cross planet attack simply consists of a certain number of ships (which you will be told, and generally ranges from several hundred to several thousand ships) all becoming "free" all at once.
+
effectiveAIPforCPAPurposesThat's simply the current game AIP.
  
On most of the AI planets, most of the time, the ships are in guard mode, or are moving between special forces guard posts.  So most of the AI ships are not actively able to attack you, they will just defend when you attack them (the special forces of course sometimes will attack, but they are not very direct or frequent about it).  When a cross-planet attack occurs, then X number of the guarding ships become free, which makes them contribute to the Threat counter immediatelyThey will then be coming to attack your planets at any time, from any direction -- you don't know which AI planets these would be coming from.
+
Next we start dealing with the timer component of the game.  Based on difficulty and time, determine the divisor for the number of seconds into the game we've gone for effective CPA AIP.  This looks a bit ugly, but here's the breakout.  Take 360, and then add to it 60 * ( 7 - Difficulty)).  So, you'll notice my AI Diff 9 game actually has a 240.  This makes sense, it's 60 * ( 7-9) for -120, then add that to 360, getting to 240It's worth it to note that for games at difficulty under 7 the modifier 60 is changed to a 51.  Remember, this number is a divisor.  The lower the number, the worse you're going to end up with later.
  
Some players have concerns about making high-level AI planets get lots of ships by being on alert, for fear of cross-planet attacks.  While putting high-level AI planets on alert can be bad if you need to go through that planet or later want to capture it, there are no consequences relating to cross-planet attacksThe cross-planet attack is, rather, based on the tech level of the AI at the time the attack is declaredIf the tech level of the two AIs differ, then you can't be certain which level the attack will be.  For example, if the current tech level of the incoming enemy waves is II, then that is the tech level that the cross-planet ships will be.
+
Now, it needs to figure out the CPA's time based effectiveAIPSo, it simply takes the # of game seconds (3600 in an hour of game time) and divides it by the above determined divisorIn the case above, it comes out to be an effective AIP of 207.  OuchThat's 60 higher than my actual AIP.
  
[[AI_War:Fleet_Command]]
+
Next line simply determines which is higher, effective AIP or actual AIP.  In this case, it goes with effective.
  
==What Is The Underlying Calculation For Cross Planet Attack Size?==
+
Now it begins to determine actual strength (at high caps) for the CPA itself.  First, it adjusts for any handicapping you applied in the starter screen for the AI, then divides it by a static value.  Basically this is an exponential curve that makes the multiplier much worse the higher in AIDiff you go.
  
'''A:''' The general formula is thus:
+
Some examples:
 +
At Diff 7, you end up at ( 7*1) / ( 13-7 [6])) = 1.16
 +
At Diff 8, you end up at ( 8 / 5) = 1.6
 +
At Diff 9, you end up at ( 9 / 4) = 2.25
 +
At Diff 9.6, you end up at ( 9.6 / 3.4) = 2.82
  
    numberOfShips = AIProgressionLevelEffective * difficulty * humanPlayerNumberMultiplier
+
Next up is a simulation of the MaxtimeWaveFactor.  Basically, this is a place to adjust for the timing mechanism in most wave calcluations.  Here, it just makes life worse.  Find a nice additional multiplier and throw that into the mix later as well. Same for double-wave, since one AI is acting for two in generating the CPAs.
    AIProgressionLevelEffective = AIProgressionLevelTotal - NegativeAIProgressionOffset
 
    if(AIProgressionLevelEffective < AIProgressionLevelFloor)
 
        AIProgressionLevelEffective = AIProgressionLevelFloor
 
    difficulty = AIDifficulty * 0.8
 
    humanPlayerNumberMultiplier = 1 + ( humanPlayerCount - 1 ) * 0.33
 
  
(that's psuedocode, of course, as you can tell by the order of lines, but it's easier to understand in this format)
+
Next is the simulateDifficultySpecificWaveSizeMultiplier.  This is a behind the scenes lookup table that in this case uses a 2.5.
  
So if you have:
+
{| {{AlgTop}}
 +
! {{AlgCtr}} | Difficulty || Modifier
 +
|-
 +
| {{AlgCtr}} | 1-3 || {{AlgCtr}} | 1
 +
|-
 +
| {{AlgCtr}} | 4 || {{AlgCtr}} | 1.5
 +
|-
 +
| {{AlgCtr}} | 5 || {{AlgCtr}} | 1.75
 +
|-
 +
| {{AlgCtr}} | 6 || {{AlgCtr}} | 2
 +
|-
 +
| {{AlgCtr}} | 7 || {{AlgCtr}} | 2.25
 +
|-
 +
| {{AlgCtr}} | 7.3 - 9 || {{AlgCtr}} | 2.5
 +
|-
 +
| {{AlgCtr}} | 9.3 || {{AlgCtr}} | 2.75
 +
|-
 +
| {{AlgCtr}} | 9.6 || {{AlgCtr}} | 3
 +
|-
 +
| {{AlgCtr}} | 9.8 || {{AlgCtr}} | 3.8
 +
|-
 +
| {{AlgCtr}} | 10 || {{AlgCtr}} | 4.5
 +
|}
  
    140 Total AIP
+
Following this is the Homeworld Count Multiplier.  It takes both champions and homeworlds into account.  For each additional homeworld, add .33 to the multiplier, and for each champion add .066.  Since there was a single homeworld and no champions in this game, it stays as 1.
    40 Negative AIP
 
    (AIP floor is negligible in this case)
 
    7.0 difficulty
 
    2 human players
 
  
The formula gives =
+
Following that, it takes the # of ships determined earlier, applies all the multipliers in tandem, and you get your final # of ships.  Adjust this for the cap for the game (/2 for Normal, /4 for Low, /8 for Ultra-Low).
  
    (140 - 40) * (7.0 * 0.Cool * (1 + (2 - 1) * 0.33)
 
    =
 
    100 * 5.6 * 1.33
 
    =
 
    744.8 (rounds down to 744)
 
    Or, with only 1 human player it's 560.
 
  
[[AI_War:Fleet_Command]]
+
[[AI War:AI War]]

Latest revision as of 14:33, 24 April 2015

What is a Cross Planet Attack?

A Cross Planet Attack (CPA) is a major undertaking by the AI. Basically, it generates a ton of threat to attack you across all your borders. You cannot control where these forces come from with gate raiding or anything of that nature. It takes existing AI fleets that are set for defense and puts them on attack. Once released, they follow standard threat rules, just as if you had attacked a planet, released their entire defensive fleet, and then fled or died. After 30 minutes of acting as simple threat, these ships will join up with the threatfleet.

These attacks are generated by an internal timer. The occurence of a CPA will depend heavily on the AI Difficulty. They will usually occur anywhere from every 3 to 5 hours.

The rest of this information is current as of the 6.009 release.

How Do Cross-Planet Attacks Work?

Once the game timer determines a CPA is warranted, a warning will be displayed that one will occur in the next 10:00-15:00 minutes; warning time is dependent on AI Difficulty. The strength will be determined by a comparison between the game time and the current AIP, and whichever will result in the larger strength will be used. See below for more detailed discussions on the calculations involved. Core CPA Guardposts on the Homeworld will always use AIP, and never game length.

The strength of a CPA is determined as a hard number. Once that number is arrived at a series of events will occur to try to fill the CPA when the warning timer reaches 0. The number of ships is not modified by cap-strength, so if your AIs are using Laser Gatlings or some other high cap ship, expect an easier time of it than if they were using Blade Spawners or some other low cap ship. This is highly unlikely to change barring some drastic events being documented.

The first rule the CPA determines is the starting tech level for the CPA. Under difficulty 7 it will use either your current AIP tech level, or 2 if it's lower (so if you've pushed the AIP to Tech Level III it'll act as though it was II when it starts looking for units). At difficulty 7+ it will always start at the AI's Tech Level.

Once the starting tech level is determined, it will now try to pull half of the CPA's population from the Strategic Reserve (the ships that flood you when you attack an AI homeworld). It will fill either half of the CPA, or it will take what it can until the Reserve has 50% of its strength left.

After getting what it can from the reserve, the CPA will then begin a loop through all planets in the galaxy, searching for ships of the correct tech level. The following process will be cycled through from the Current CPA Tech Level down through 1, and then it will keep searching if necessary from starting level +1 through to 5. Planets will only be considered if they are not the AI Homeworld and if the humans are not in force on the planet (the humans have 1/3 or less than the AI on a particular planet in military ships).

Example of the Tech cycle: At Difficulty 7: AIP Tech Level is at MK III. This means the CPA will start at 3, planet cycle, reduce to 2, planet cycle, reduce to 1, planet cycle, increment to 4 (+1 from starting tech), planet cycle, increment to 5, planet cycle, then stop.

Planet Cycle

A planet cycle is a loop over all planets, searching for units to include in the CPA. In all cases it is assumed that the AI is only releasing units for the current tech level of the loop. Guardians, Starships, Carriers, and forces under immobile forcefields (Spire Shield Guardpost, Forcefield III, etc.) are not considered available.

At each planet the loop proceeds thus:

  1. Free available Barracks troops
  2. Free Military Ships that are either:
    1. Guarding something (Guardpost, Command Station, etc.)
    2. Special Forces
    3. Using PlanetaryRoamer behavior (rarely used)
  3. Repeat on next planet

Should the CPA not fill out after the full cycle of tech levels, it will then pull the remaining units it needs (at the starting tech level) from the strategic reserve to attempt to fill out the CPA. Should the Strategic Reserve 'bottom out' at 0%, then the CPA will attack/release shorthanded.

Strategic Reserve Ship Placement

While you'd probably assume the Reserve ships included in the CPA would be issued from the AI HWs, this is not the case. These ships will appear alongside non-reserve ships released to the CPA, without the need of either a warp gate nor a command station. For each planet/location that ships were released from, their percentage of the non-reserve ships (example below) that were released gets a corresponding percentage of the reserve ships.

For example, the AI has pulled it's 50% of ships from the reserve, and then found 5 planets with ships it can release to fill the CPA. Doing so, these planets each contribute 100% of the non-reserve ships, but only 50% of the full CPA when including the reserve. If we assume these planets contribute the following percentages of the non-reserve ships: 15%, 20%, 10%, 25%, 30%, then the reserve will insta-warp a corresponding portion of its ships to those planets in equal values. Any rounding errors or 'leftovers' from the reserve are simply dumped on the last planet.

The reason neither a command station nor a warp gate is required is because it is possible to turn a planet neutral without blowing up the barracks, for example when destroying a command station to avoid deep striking. Should that barracks be chosen for release, reserve troops will be issued to support the released barracks troops.

Calculation discussion of CPAs

These calculations are valid as of the 6.009 release.

Let's discuss the easier calculation first: Core CPA Guardpost release.

Core CPA Guardpost

The straight formula is: (Formula: 100 * Difficulty * Max( 1, AIP/50) * (0.67 + (0.33 * # of Human Homeworlds)) )

What this means is it's 100 ships * Difficulty * an AIP calculation * a homeworld adjustment of an additional 1/3 ships per extra human homeworld. The Max(1, AIP/50) means that if your AIP is below 50, it'll act as though it was 50. So, at Diff 7 AIP 100 single homeworld, expect:

[#]s are midpoint calculations to ease reading

100 * 7 [700] * 2 [1400] * 1 [1400] = 1400 ships for a CPA attack triggered by the homeworld post.

Standard CPA

The standard CPA calculation is a whole lot more convoluted. As an example from the advanced logs, we'll use a sample from a late game 9/9 CPA. These logs can be located in the LogicLog_AIMechanic_Waves_MainThread.txt file in the Runtime directory. Search for "Triggering CPA".


11/27/2012 11:24:30 PM (6.009)


Triggering CPA (always from first AI); Game Time: 13:51:00

effectiveAIPForCPAPurposes = this.AIProgressionLevelEffective = 147

since diff > 7, numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 360 + ( (FInt)60 * ( (FInt)7 - this.AIDifficulty ) ).IntValue = 240

minimumAIPForCPAPurposes = Game.Instance.GameSecond / numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 207

effectiveAIPForCPAPurposes = Max(effectiveAIPForCPAPurposes,minimumAIPForCPAPurposes) = 207

difficultyFactor = ( this.AIDifficulty * this.GetHandicapMultiplier() ) / ( 13 - this.AIDifficulty ) : 2.25

simulateMaxTimeWaveFactor = Mat.One + ( ( this.AIDifficulty * 2 ) / ( ( 14 - this.AIDifficulty ) * 3 ) ) : 2.2

simulateDoubleWaveFactor = 2

simulateDifficultySpecificWaveSizeMultiplier = 2.5

humanHomeworldCountMultiplier = Mat.One + ( (FInt)( humanHomeworldCount - 1 ) * FInt.FromParts( 0, 330 ) ) + ( championCount * FInt.FromParts( 0, 066 ) ) = 1

numberOfShips (before applying cap-scale) = ( (FInt)effectiveAIPForCPAPurposes * difficultyFactor * simulateMaxTimeWaveFactor * simulateDoubleWaveFactor * simulateDifficultySpecificWaveSizeMultiplier * humanHomeworldCountMultiplier ).IntValue = 5123


Alright, let's break this down. In the first line you'll notice a date/time stamp of the occurence. That's just from the computer's clock for human usability.

Next up you'll see Triggering CPA (always from the first AI). This is important. This means all your CPAs are controlled by the first of the two AIs. If you create a 1/10 game you'll have a very different CPA experience than if you created a 10/1 game.

effectiveAIPforCPAPurposes. That's simply the current game AIP.

Next we start dealing with the timer component of the game. Based on difficulty and time, determine the divisor for the number of seconds into the game we've gone for effective CPA AIP. This looks a bit ugly, but here's the breakout. Take 360, and then add to it 60 * ( 7 - Difficulty)). So, you'll notice my AI Diff 9 game actually has a 240. This makes sense, it's 60 * ( 7-9) for -120, then add that to 360, getting to 240. It's worth it to note that for games at difficulty under 7 the modifier 60 is changed to a 51. Remember, this number is a divisor. The lower the number, the worse you're going to end up with later.

Now, it needs to figure out the CPA's time based effectiveAIP. So, it simply takes the # of game seconds (3600 in an hour of game time) and divides it by the above determined divisor. In the case above, it comes out to be an effective AIP of 207. Ouch. That's 60 higher than my actual AIP.

Next line simply determines which is higher, effective AIP or actual AIP. In this case, it goes with effective.

Now it begins to determine actual strength (at high caps) for the CPA itself. First, it adjusts for any handicapping you applied in the starter screen for the AI, then divides it by a static value. Basically this is an exponential curve that makes the multiplier much worse the higher in AIDiff you go.

Some examples: At Diff 7, you end up at ( 7*1) / ( 13-7 [6])) = 1.16 At Diff 8, you end up at ( 8 / 5) = 1.6 At Diff 9, you end up at ( 9 / 4) = 2.25 At Diff 9.6, you end up at ( 9.6 / 3.4) = 2.82

Next up is a simulation of the MaxtimeWaveFactor. Basically, this is a place to adjust for the timing mechanism in most wave calcluations. Here, it just makes life worse. Find a nice additional multiplier and throw that into the mix later as well. Same for double-wave, since one AI is acting for two in generating the CPAs.

Next is the simulateDifficultySpecificWaveSizeMultiplier. This is a behind the scenes lookup table that in this case uses a 2.5.

Difficulty Modifier
1-3 1
4 1.5
5 1.75
6 2
7 2.25
7.3 - 9 2.5
9.3 2.75
9.6 3
9.8 3.8
10 4.5

Following this is the Homeworld Count Multiplier. It takes both champions and homeworlds into account. For each additional homeworld, add .33 to the multiplier, and for each champion add .066. Since there was a single homeworld and no champions in this game, it stays as 1.

Following that, it takes the # of ships determined earlier, applies all the multipliers in tandem, and you get your final # of ships. Adjust this for the cap for the game (/2 for Normal, /4 for Low, /8 for Ultra-Low).


AI War:AI War