View Issue Details

IDProjectCategoryLast Update
0015556AI War 1 / ClassicSuggestion - Balance TweaksJul 16, 2014 1:54 pm
Reportermalkiel Assigned Tokeith.lamothe  
Status resolvedResolutionfixed 
Product Version7.045 
Fixed in Version7.046 
Summary0015556: reprisal strength determination..
DescriptionI'd like to propose AI reprisal strength be based off of something other than cost of units lost, possibly that invisible strength score, because losing a pile of mercenaries on a world with an AI post can be completely devastating- so much so, in my opinion, that it makes them completely unusable offensively.

It also makes armored warheads very dangerous to use, because the AI still gets scrap off that 1 million (or more) you spent if it's used on anything but their final gaurdpost, but you never get scrap from using them according to the text (not verified)

It also means that a youngling based offense yields pretty much no significant counterstrikes from the AI, although with the lifespan factor I don't personally see that as a problem.

This post is partially inspired by the fact that against mime I keep getting 3 times what I sent in coming back at me.. Kinda wish I had golems on just to go scrap one on an AI world and watch the counterattack.

I'd welcome some community feedback on this.
TagsNo tags attached.
Internal WeightNew

Activities

TechSY730

Jul 10, 2014 5:00 pm

reporter   ~0038664

Wait, 3 times the amount?
Got logs of that? Sounds like something screwy is going on there. The reprisal rate for the AI is supposed to be <=1 in all cases (usually, much less than 1, or even 50%).

Mercs, yea, I can see the point there. Maybe they should get a reprisal modifier similar to that of golems have? (Not .1x, as IMO they should give more salvage than their Mk. IV equivalent, but maybe not 10x as much)

TechSY730

Jul 10, 2014 5:00 pm

reporter   ~0038665

Oh, and this is a sufficiently complicated issue that it is worth bringing up on the forums too.

TechSY730

Jul 10, 2014 5:02 pm

reporter   ~0038667

Armored warheads do not give salvage to anyone, or at least they shouldn't be.

malkiel

Jul 10, 2014 5:06 pm

reporter   ~0038669

Last edited: Jul 10, 2014 5:12 pm

tech, see my attached save for issue 0015555
then watch those 27 warheads hit!

also, replicated it with advanced logging on... now to ask where to find the logs.

malkiel

Jul 10, 2014 5:16 pm

reporter  

LogicLog_AIMechanic_Waves_MainThread.txt (2,369 bytes)   
7/10/2014 4:08:57 PM (7.045)
-----------------------------------
Salvage-Reprisal Wave Check; Current Game Time: 4:38:31
= Salvage is non-zero, so checking if player 8's AISalvage is high enough for a salvage-reprisal wave
AISalvage: 1440059
effectiveMetalForSalvageWave = floor(AISalvage) = 1440059
referenceMetalCost = (metal cost of a mkI bomber in this game) = 1600
referenceStrength = (strength of a mkI bomber in this game) = 2
metalToStrengthRatio = referenceStrength / referenceMetalCost = 0.00122
= potentialSalvageStrength = effectiveMetalForSalvageWave * metalToStrengthRatio = 1757.88
computing strength budget of a normal wave for threshold check

FleetShipBudget = (base value, equivalent to a single mkI fighter on high caps) = 1
FleetShipBudget *= this.AITechLevel = 1
FleetShipBudget *= (FInt)Game.Instance.Options.TotalHumanPlayerPlusExtraHomeworldsCount = 1
FleetShipBudget *= this.AIProgressionLevelEffective = 108
FleetShipBudget *= player.GetHandicapMultiplier() = 108
preMinStep_DifficultyMultiplier = player.AIDifficulty / ( 13 - player.AIDifficulty ) = 1.17
FleetShipBudget *= preMinStep_DifficultyMultiplier = 125.98
FleetShipBudget *= player.AITypeData.WaveSizeMultiplier = 125.98
postMinStep_DifficultyMultiplier = player.GetDifficultySpecificWaveSizeMultiplier() = 2.25
FleetShipBudget *= postMinStep_DifficultyMultiplier = 283.46
= Enough salvage strength to launch a salvage-reprisal, so calling TriggerNormalWave with OverrideStrength = 1757.88


7/10/2014 4:08:57 PM (7.045)
-----------------------------------
Starting CreateWaveToPlanet at Game Time: 4:38:31 ; Player.AIType: Mime ; Player.AIDifficulty: 7 ; EffectiveAIP: 108 ; AITechLevel: 1 ; IsSchizo: True
WaveStrength = 1757.88

= FleetShipBudget for this wave's fleet ships = 1757.88

player.AITypeData.StarshipBudgetMultiplier: 0.08
= StarshipBudget = originalFleetShipBudget * player.AITypeData.StarshipBudgetMultiplier = 147.63
* called PickUnitsForWave with: LightStarship, Dreadnought, LeechStarship
** Picked 
1 LightStarship @ 96 each = 96
1 Dreadnought @ 96 each = 96
= After picking starships, StarshipBudget is now -44.37


== Wave total ships: 29
TypesForDirectAdd count by type: 
ArmoredMissileI : 27
LightStarship : 1
Dreadnought : 1
TypesForCarrierAdd count by type: 
== For a grand-total Strength value of 1920


TechSY730

Jul 10, 2014 5:44 pm

reporter   ~0038670

Logs are in RuntimeData (can't remember if it has a space or not)

Anyways, if you have a case of armored warheads giving salvage, that is worth a bug report all on its own, maybe even with major severity, as that is a very nasty, destabilizing balance wart if so.

Also, this might just be restricted to Mimic AI, as it does weird and wonderful things with salvage, which very well could mean salvage bugs unique to it.

keith.lamothe

Jul 14, 2014 12:43 pm

administrator   ~0038682

For 7.046:

* Units whose explosion-kills do not yield salvage (i.e. warheads) now also do not generate salvage by their own deaths. In other words dropping an armored warhead on an AI planet will no longer cause a massive reprisal.

* Mercenary ships now generate 1/10th the salvage they normally would. Since they cost 10x what the normal equivalent MkIV ship would cost, this means they have basically the same salvage value of the normal ship.

Thanks :)

On the younglings and such, it's quite intentional that their low metal cost generates a low reprisal response. Same with basically all "disposable" units. I don't want drone-spam or youngling-spam to not generate any reprisals (though that has been requested), but I also don't want it to generate so much that the dock-cannon is never used.

On getting it sending back 3x what you lost, it's hard to determine the actual metal ratios you were seeing for a number of factors:
- The AI may only salvage at most what's sent (on Diff 10, the multiplier is 1) but it also adds strength to the reprisal so even on Diff 7 (whose multiplier is 0.350) the overall result is about 1.4.
- That's partly because the reprisal strength is spent "inefficiently" : the metal is converted to strength at the Bomber's ratio, and the bomber is one of the most expensive fleet ships metal-wise.
- And if the reprisal wave chooses low-strength (high-cap) units, then the sheer unit count of it may be significantly higher than the count of units you lost, particularly if those were high-strength.

Overall the goal isn't a particular numeric relationship, but that the reprisals hit back hard enough that you have to do something about it, but only potentially-game-ending at alert level 3 or higher. The idea being that this needs to be pretty big to balance out the very significant bonus the player receives from the salvage mechanic.

More feedback is welcome, of course.

malkiel

Jul 16, 2014 1:54 pm

reporter   ~0038704

I did a bit more testing, but the log is clogged as hell so I'll just state relevant numbers
salvage before my 3 raid starships charged at player 8: 54770
salvage after: 260684
that means he got approx 83% of the minerals when I scrapped the ships.
in the wave, he sent some starship I cannot recall, along with a half dozen (thankfully AI) raid starships.

I lost 3 raid starships, he responds with 6.

this is the type of behavior that I noted against mime thus causing my "3 times as many" claim. this was done 70 minutes into a new 7/7 game against two mime(secondary support corps) opponents, with no systems taken, at ai progress 10.

if the human raid starship has a lower strength cost than the ai version (improbable) that would explain the discrepency right there.

either way, the corrections look great on paper, can't wait to see that in 7.46

Issue History

Date Modified Username Field Change
Jul 10, 2014 4:54 pm malkiel New Issue
Jul 10, 2014 5:00 pm TechSY730 Note Added: 0038664
Jul 10, 2014 5:00 pm TechSY730 Note Added: 0038665
Jul 10, 2014 5:02 pm TechSY730 Note Added: 0038667
Jul 10, 2014 5:06 pm malkiel Note Added: 0038669
Jul 10, 2014 5:06 pm malkiel Note Edited: 0038669
Jul 10, 2014 5:12 pm malkiel Note Edited: 0038669
Jul 10, 2014 5:16 pm malkiel File Added: LogicLog_AIMechanic_Waves_MainThread.txt
Jul 10, 2014 5:44 pm TechSY730 Note Added: 0038670
Jul 14, 2014 12:43 pm keith.lamothe Internal Weight => New
Jul 14, 2014 12:43 pm keith.lamothe Note Added: 0038682
Jul 14, 2014 12:43 pm keith.lamothe Status new => resolved
Jul 14, 2014 12:43 pm keith.lamothe Fixed in Version => 7.046
Jul 14, 2014 12:43 pm keith.lamothe Resolution open => fixed
Jul 14, 2014 12:43 pm keith.lamothe Assigned To => keith.lamothe
Jul 16, 2014 1:54 pm malkiel Note Added: 0038704