Here's a few bits of text from the wave logs, although I dunno if this'll help with balancing things out or just be a pile of words and numbers.
10/19/2014 7:44:40 PM (8.019)
-----------------------------------
= CheckForWave proceeding with wave for player 9 because AccumulatedStrengthForNextWave is now >= normalWaveStrength at Game Time: 6:43:25
normalWaveStrength:12973.02
AccumulatedStrengthForNextWave:12976.03
= computation of normalWaveStrength:
FleetShipBudget = (base value, equivalent to a single mkI fighter on high caps) = 1
FleetShipBudget *= this.AITechLevel = 2
FleetShipBudget *= (FInt)Game.Instance.Options.TotalHumanPlayerPlusExtraHomeworldsCount = 8
FleetShipBudget *= this.AIProgressionLevelEffective = 4120
FleetShipBudget *= player.GetHandicapMultiplier() = 4120
preMinStep_DifficultyMultiplier = player.AIDifficulty / ( 13 - player.AIDifficulty ) = 1.17
FleetShipBudget *= preMinStep_DifficultyMultiplier = 4806
FleetShipBudget *= player.AITypeData.WaveSizeMultiplier = 7208.99
postMinStep_DifficultyMultiplier = player.GetDifficultySpecificWaveSizeMultiplier() = 2.25
FleetShipBudget *= postMinStep_DifficultyMultiplier = 16220.24
Because Diff >= 7 and entry_points = 7, entryPointMultiplier = 0.8
Because game time > 2 hours, using full entryPointMultiplier
normalWaveStrength *= entryPointMultiplier = 12973.02
normalWaveStrength *= this.WaitingBasedMultiplierForNextNormalWave = 12973.02
minimumStrength = 200
= AccumulatedStrengthForNextWave (after the first wave) is based on, every second, adding ( baseWaveStrength / normalWaveIntervalInSeconds )
computation of baseWaveStrength is the same as normalWaveStrength, but without the entry-point-multiplier and later stuff
= computation of normalWaveIntervalInSeconds:
interval = floor( ( 14 - this.AIDifficulty ) * 3 * 60 ) = 1260
so, if you're curious, amountToGainPerSecond is 12.87
since player.SurplusWaveStrengthDonatedFromReinforcements > 0 (from donated reinforcement budget that couldn't be used due to capping) :
waveStrength += this.SurplusWaveStrengthDonatedFromReinforcements = 57409.98
10/19/2014 7:44:40 PM (8.019)
-----------------------------------
Starting CreateWaveToPlanet at Game Time: 6:43:25 ; Player.AIType: NeinzulYoungster ; Player.AIDifficulty: 7 ; EffectiveAIP: 515 ; AITechLevel: 2 ; IsSchizo: True
WaveStrength = 28704.99
= FleetShipBudget for this wave's fleet ships = 28704.99
AIP is between the current tech level's AIP threshold and the next tech level's, so promotionRatio (percent of fleet ships to be bought from next tech level up) = 0.57
Normal wave, but AIType has GetsNeinzulYoungsterLogic flag, so spend 100% of the strength budget on types from the Neinzul group
* called PickUnitsForWave with: YounglingCommandoII, YounglingTigerII, YounglingVultureII, YounglingWeaselII, YounglingNanoswarmII, YounglingFireflyII
** Picked
394 YounglingWeaselII @ 5.33 each = 2101.3
368 YounglingVultureII @ 5.33 each = 1962.64
388 YounglingFireflyII @ 5.33 each = 2069.3
389 YounglingNanoswarmII @ 5.33 each = 2074.64
377 YounglingTigerII @ 5.33 each = 2010.64
400 YounglingCommandoII @ 5.33 each = 2133.3
320 YounglingFireflyIII @ 8 each = 2560
356 YounglingTigerIII @ 8 each = 2848
343 YounglingVultureIII @ 8 each = 2744
357 YounglingNanoswarmIII @ 8 each = 2856
352 YounglingCommandoIII @ 8 each = 2816
317 YounglingWeaselIII @ 8 each = 2536
= After picking fleet ships, FleetShipBudget is now 0
player.AITypeData.StarshipBudgetMultiplier: 0.08
= StarshipBudget = originalFleetShipBudget * player.AITypeData.StarshipBudgetMultiplier = 2410.77
* called PickUnitsForWave with: Flagship, AIRaidStarship, DreadnoughtII, LeechStarshipII, BomberStarship, ZenithStarshipI, SpireStarshipI
** Picked
3 LeechStarshipII @ 192 each = 576
3 DreadnoughtII @ 192 each = 576
2 AIRaidStarship @ 64 each = 128
2 BomberStarship @ 96 each = 192
3 ZenithStarshipI @ 192 each = 576
1 Flagship @ 192 each = 192
1 SpireStarshipI @ 192 each = 192
= After picking starships, StarshipBudget is now -21.23
== Wave total ships: 4376
TypesForDirectAdd count by type:
YounglingWeaselII : 394
YounglingVultureII : 106
TypesForCarrierAdd count by type:
YounglingVultureII : 262
YounglingFireflyII : 388
YounglingNanoswarmII : 389
YounglingTigerII : 377
YounglingCommandoII : 400
YounglingFireflyIII : 320
YounglingTigerIII : 356
YounglingVultureIII : 343
YounglingNanoswarmIII : 357
YounglingCommandoIII : 352
YounglingWeaselIII : 317
LeechStarshipII : 3
DreadnoughtII : 3
AIRaidStarship : 2
BomberStarship : 2
ZenithStarshipI : 3
Flagship : 1
SpireStarshipI : 1
== For a grand-total Strength value of 45500
10/19/2014 7:47:59 PM (8.019)
-----------------------------------
= CheckForWave proceeding with wave for player 8 because AccumulatedStrengthForNextWave is now >= normalWaveStrength at Game Time: 6:45:48
normalWaveStrength:13593.8
AccumulatedStrengthForNextWave:13593.94
= computation of normalWaveStrength:
FleetShipBudget = (base value, equivalent to a single mkI fighter on high caps) = 1
FleetShipBudget *= this.AITechLevel = 2
FleetShipBudget *= (FInt)Game.Instance.Options.TotalHumanPlayerPlusExtraHomeworldsCount = 8
FleetShipBudget *= this.AIProgressionLevelEffective = 4120
FleetShipBudget *= player.GetHandicapMultiplier() = 4120
preMinStep_DifficultyMultiplier = player.AIDifficulty / ( 13 - player.AIDifficulty ) = 1.17
FleetShipBudget *= preMinStep_DifficultyMultiplier = 4806
FleetShipBudget *= player.AITypeData.WaveSizeMultiplier = 7208.99
postMinStep_DifficultyMultiplier = player.GetDifficultySpecificWaveSizeMultiplier() = 2.25
FleetShipBudget *= postMinStep_DifficultyMultiplier = 16220.24
Because Diff >= 7 and entry_points = 7, entryPointMultiplier = 0.8
Because game time > 2 hours, using full entryPointMultiplier
normalWaveStrength *= entryPointMultiplier = 12973.02
normalWaveStrength *= this.WaitingBasedMultiplierForNextNormalWave = 13593.8
minimumStrength = 200
= AccumulatedStrengthForNextWave (after the first wave) is based on, every second, adding ( baseWaveStrength / normalWaveIntervalInSeconds )
computation of baseWaveStrength is the same as normalWaveStrength, but without the entry-point-multiplier and later stuff
= computation of normalWaveIntervalInSeconds:
interval = floor( ( 14 - this.AIDifficulty ) * 3 * 60 ) = 1260
so, if you're curious, amountToGainPerSecond is 12.87
since player.SurplusWaveStrengthDonatedFromReinforcements > 0 (from donated reinforcement budget that couldn't be used due to capping) :
waveStrength += this.SurplusWaveStrengthDonatedFromReinforcements = 52888.95
10/19/2014 7:47:59 PM (8.019)
-----------------------------------
Starting CreateWaveToPlanet at Game Time: 6:45:48 ; Player.AIType: Chivalric ; Player.AIDifficulty: 7 ; EffectiveAIP: 515 ; AITechLevel: 2 ; IsSchizo: False
WaveStrength = 26444.48
= FleetShipBudget for this wave's fleet ships = 26444.48
percentChanceParasiteWave (from AI type) = 0.06
percentChanceBomberWave (from AI type) = 0.14
percentChanceStealthWave (from AI type) = 0.06
= actually chosen WaveType: Normal
AIP is between the current tech level's AIP threshold and the next tech level's, so promotionRatio (percent of fleet ships to be bought from next tech level up) = 0.57
Some strength budget remaining from previous pick phases (if any), so spend what remains on types from the Normal group
* called PickUnitsForWave with: FighterII, BomberII, MissileShipII, RaiderII, AntiArmorShipII, BulletproofFighterII, ZenithParalyzerII, ZenithChameleonII, YounglingTigerII, TackleDroneLauncherII
** Picked 1707 FighterII @ 6.67 each = 11380.14
** Picked 1507 FighterIII @ 10 each = 15070.37
= After picking fleet ships, FleetShipBudget is now -6.03
player.AITypeData.StarshipBudgetMultiplier: 0.08
= StarshipBudget = originalFleetShipBudget * player.AITypeData.StarshipBudgetMultiplier = 2220.92
* called PickUnitsForWave with: Flagship, AIRaidStarship, DreadnoughtII, LeechStarshipII, BomberStarship, ZenithStarshipI, SpireStarshipI
** Picked
3 SpireStarshipI @ 192 each = 576
2 Flagship @ 192 each = 384
3 AIRaidStarship @ 64 each = 192
4 LeechStarshipII @ 192 each = 768
3 BomberStarship @ 96 each = 288
1 DreadnoughtII @ 192 each = 192
= After picking starships, StarshipBudget is now -179.08
== Wave total ships: 3230
TypesForDirectAdd count by type:
FighterII : 500
TypesForCarrierAdd count by type:
FighterII : 1207
FighterIII : 1507
SpireStarshipI : 3
Flagship : 2
AIRaidStarship : 3
LeechStarshipII : 4
BomberStarship : 3
DreadnoughtII : 1
== For a grand-total Strength value of 34140
10/19/2014 7:24:38 PM (8.019)
-----------------------------------
Triggering CPA (always from first AI); Game Time: 6:30:00
effectiveAIPForCPAPurposes = this.AIProgressionLevelEffective = 515
since diff == 7, numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 360
minimumAIPForCPAPurposes = Game.Instance.GameSecond / numberOfSecondsPerPointOfMinimumAIPForCPAPurposes = 65
effectiveAIPForCPAPurposes = Max(effectiveAIPForCPAPurposes,minimumAIPForCPAPurposes) = 515
difficultyFactor = ( this.AIDifficulty * this.GetHandicapMultiplier() ) / ( 13 - this.AIDifficulty ) : 1.17
aiTypeFactor = 1.5
simulateMaxTimeWaveFactor = Mat.One + ( ( this.AIDifficulty * 2 ) / ( ( 14 - this.AIDifficulty ) * 3 ) ) : 1.67
simulateDoubleWaveFactor = 2
simulateDifficultySpecificWaveSizeMultiplier = 2.25
humanHomeworldCountMultiplier = Mat.One + (FInt)( humanHomeworldCount - 1 ) = 4
numberOfShips (before applying cap-scale) = ( (FInt)effectiveAIPForCPAPurposes * difficultyFactor * aiTypeFactor * simulateMaxTimeWaveFactor * simulateDoubleWaveFactor * simulateDifficultySpecificWaveSizeMultiplier * humanHomeworldCountMultiplier ).IntValue = 27031
numberOfShips (after applying cap-scale) = 6757
since player.SurplusCPAStrengthDonatedFromReinforcements > 0 (from donated reinforcement budget that couldn't be used due to capping) :
waveStrength += this.SurplusCPAStrengthDonatedFromReinforcements / 5 = 12508
9/21/2014 7:45:25 PM (8.014)
-----------------------------------
= CheckForNemesisExo; Game Time: 2:01:22
intensity: 5
AccumulatedEventWaveCounter : 25998
NextRawEventWaveSize : 26000
since GameSecond % 22 == 0, AccumulatedEventWaveCounter += eventAttackCounterIncrement 334
adjustedExoBudget = Max( NextRawEventWaveSize, AccumulatedEventWaveCounter ) = 26332
AccumulatedEventWaveCounter -= adjustedExoBudget = 0
multiplier = 1
multiplier *= Mat.One + ( ( championCount - 1 ) * FInt.FromParts( 0, 142 ) ) = 1.43
multiplier *= Game.Instance.Options.TotalSpecialDifficultyModifier = 5.7
multiplier *= this.GetStrengthMultiplierForPlotIntensity( intensity ) = 6.27
adjustedExoBudget *= this.GetTotalResponseMultiplier( intensity ) = 165140.73
strengthPerChampion = (human shadow frigate).GetCostForAIWave() = 300
strengthPerReferenceUnit = (mkI hunter killer).GetCostForAIWave() = 3960
exoCostPerRefernceUnit = (mkI hunter killer).GetReferenceCostForTier() = 32768
theoreticalExoCostPerChampion = exoCostPerRefernceUnit * ( strengthPerChampion / strengthPerReferenceUnit ) = 2480
championsPerExo = ( ( adjustedExoBudget / theoreticalExoCostPerChampion ) / 2 ).IntValue = 33
[Some text later, after lowering to intensity 2]
10/19/2014 6:32:10 PM (8.019)
-----------------------------------
= CheckForNemesisExo; Game Time: 6:00:22
intensity: 2
AccumulatedEventWaveCounter : 40360
NextRawEventWaveSize : 40625
since GameSecond % 22 == 0, AccumulatedEventWaveCounter += eventAttackCounterIncrement 515
adjustedExoBudget = Max( NextRawEventWaveSize, AccumulatedEventWaveCounter ) = 40875
AccumulatedEventWaveCounter -= adjustedExoBudget = 0
multiplier = 1
multiplier *= Mat.One + ( ( championCount - 1 ) * FInt.FromParts( 0, 142 ) ) = 1.43
multiplier *= Game.Instance.Options.TotalSpecialDifficultyModifier = 5.7
multiplier *= this.GetStrengthMultiplierForPlotIntensity( intensity ) = 2.28
adjustedExoBudget *= this.GetTotalResponseMultiplier( intensity ) = 93206.18
strengthPerChampion = (human shadow frigate).GetCostForAIWave() = 300
strengthPerReferenceUnit = (mkI hunter killer).GetCostForAIWave() = 3960
exoCostPerRefernceUnit = (mkI hunter killer).GetReferenceCostForTier() = 32768
theoreticalExoCostPerChampion = exoCostPerRefernceUnit * ( strengthPerChampion / strengthPerReferenceUnit ) = 2480
championsPerExo = ( ( adjustedExoBudget / theoreticalExoCostPerChampion ) / 2 ).IntValue = 18