Peppe

Enhanced AI Mod v0.26.35 Release 2/16/2011

Enhanced AI Mod v0.26.35 Release 2/16/2011

Enhanced_AI_v0.26.35:

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.35.zip

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.35.exe

 

 

AI will work hard to get map control.

AI will actively work to keep portal counts even or in its favor. 

AI will save for critical upgrades like currency, so it can purchase it at or near warrank 3.

AI generals will consider what healer idols the rest of the team owns when making purchases.

AI generals will send one of their healing idols to an AI teammate on summoning (when 2 are summoned) and on teleport.

1,104,757 views 398 replies
Reply #251 Top

Playing with when to flee. AI is a little jumpy at the moment and will probably flee around 70% in most cases. I was thinking of setting some levels to flee around these situations:

if there are enemy heroes and enemy towers - keep this high like 70%. Too low and the AI will pursue into towers more and probably kill itself.

If there are enemy heroes and no towers - 50-60%?

If there are enemy heroes and ally towers - 40%?

updated my all mod install package.

I like that you have logic for this.  Let's toy with this for a minute (again, please comment out hammer slam rook while we are testing.  That will make this go MUCH faster).  If there are enemy heroes and no towers - 50-60%? - change to 50% flat. If there are enemy heroes and ally towers - 40%? - change to 35%.  Might be over the top, but we see. 

Reply #252 Top

v0.26.25:

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.25.zip

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.25.exe

 

Tried lower retreat settings but got a lot of deaths and bout half were kills.

If you want to play with settings edit these lines in herogoap.lua (mods\Enhanced_AI\hook\lua\sim\AI\ )

Code: asp.net
  1.   line 1064          #  [MOD] TE Retreat check first
  2.             elseif myHealthPercent <  .85 and enemyHeroes and enemyTowers > 0 and  self.Brain.Score.WarRank <= 7  then
  3.                 currentMaster = 'Flee'    
  4.             elseif myHealthPercent <  .75 and not enemyHeroes and enemyTowers > 0 and  self.Brain.Score.WarRank <= 7  then
  5.                 currentMaster = 'Flee'                
  6.             elseif myHealthPercent <  .65 and enemyHeroes and allyTowers == 0 and enemyTowers == 0  and  self.Brain.Score.WarRank <= 7 then
  7.                 currentMaster = 'Flee'
  8.             elseif myHealthPercent <  .50 and enemyHeroes and allyTowers > 0  and  self.Brain.Score.WarRank <= 7 then
  9.                 currentMaster = 'Flee'

 

Reply #253 Top

Enhanced AI 0.26.25/uberfix 1.03/FavorMod 2.1.2  

Settings:  cata/High Towers - all other settings on default
AI settings:  normal
rook(h)/rook/rook/rook v rook/rook/rook/rook

Observed results:

Initial thoughts - I love this.  The ai is not pussyfooting around.  It engages when it can. 

2nd thought - there's an instance where I have 1 ai on my team... 3 enemy dgs port in and he decides its ok to fight.  He dies. 

Ai was still weak when fighting enemy towers.  An AI and I were wailing on a high tower.  My ai had about 2300/3300 and decided to book it out.  Would have been better if he stayed long.  Primarily because I was there hitting the tower.

AI on my team just stood at a locked (our team had it locked) xp flag... stood there at least 30 sec.  He had 2400 gold at the time.

Noticed another ai just standing on my gold flag... has at full hp/mana.  Just stood there... 30 sec min.

saw another ai just standing between 2 of my towers... not at risk.. full hp/mana.  at least 30 sec.

make that at least 60 seconds of 2 of them. 

Edit - another thing directly related to rook towers.  The ai should press if there are only 2-3 there and only 1 dg or no dgs.  If there are like 4-5 towers, let the ai rook just setup some defensive towers and not push.  It certainly shouldn't push towers 100% of the time.  Just need to give it some logic where it attacks where appropriate.

Reply #254 Top

He had 2400 gold at the time.

Probably a typo for 2400 hp?

Reply #255 Top

Quick thought: we have certain DGs that are now much more human-like than before (Regulus, Sedna, Rook), since several community members tested their behavior specifically. What about the rest? Maybe at this pre-release stage the best course of action would be for the pro players willing to test the mod to review the DGs they play for behavior oddities and inconsistencies? For example, I know for a fact Erebus should not go into Mist like the AI Erebus does, but I am in no position to review Erebus behavior. Personally, I think Oak, QoT, Sedna, Regulus, DA, UB, and, with newest changes, Rook are decent. That leaves us with the mage-type nukers (TB and Oculus) and Erebus. DG-specific reviews/tests, anyone?

Reply #256 Top

He had 2400 gold at the time.

Probably a typo for 2400 hp?

nah - 2400 gold.. eg NO REASON TO BE WAITING AROUND AT THE ARTIFACT SHOP.  ;)

Reply #257 Top

Noticed another ai just standing on my gold flag... has at full hp/mana. Just stood there... 30 sec min.

saw another ai just standing between 2 of my towers... not at risk.. full hp/mana. at least 30 sec.

make that at least 60 seconds of 2 of them.

I've ran a few games since the .25 release and didn't see much standing around.   Hopefully it was just isolated.

 

That leaves us with the mage-type nukers (TB and Oculus) and Erebus. DG-specific reviews/tests, anyone?

More feedback always helps.  Almost all skills out of the box are fire whenever they are ready.  Some skills this works well, but for most a little logic can go a long way.

Reply #258 Top

I've ran a few games since the .25 release and didn't see much standing around. Hopefully it was just isolated.

hope so too... but it was somewhat rampant in my test... seeing it happen like 3 times... just documented 2 i think. 

Reply #259 Top

I can cover logic on any dg, but welcome any assistance.  My premise is that if there is more than 1 logical ability build, but the ai can only do 1 of them well... drop of other build.  I'd prefer to have 1 build working really well for each dg over 1 good and 1 crap.  And if we want the bare minimum - let's do 1 solid build for all. 

Reply #260 Top

More feedback always helps.  Almost all skills out of the box are fire whenever they are ready.  Some skills this works well, but for most a little logic can go a long way.

In particular, I think we should have clearer triggers (like those I've outlined for Sedna's Silence and Pounce) for TB's Frost Nova and Deep Freeze, as well as for Erebus' Mist and Bat Swarm and Occ's Blast Off!. Firing all those at will is inhuman, in a bad sense.

Reply #261 Top

I think we should also incorporate some interesting chat options for the AI, to make the experience more MP-like. For example, if you die, teammates will comment on this: "Noob! Idiot! Stop feeding them!", or: "OMG! We have a noob on our team!". If they die, they should blame the human player: "Where the hell were you?!", or: "Thank you very much for watching the mini-map!". We can have two AI sub-types: the wiseass sarcastic one, and the rude hysterical one... I can provide the text. In short, I think it could be a very unusual thing to incorporate in a mod, and some players might be tempted to try it only to witness AI trash-talking O:)

Reply #262 Top

v0.26.26:

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.26.zip

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.26.exe

 

Think i saw the stuck DG you mentioned.  Looked like the capture action was being selected, and then being stopped by the scan  for enemies within the action.  Tweaked scan range down, so it could break out and an attack action would be in range to take over.

Set the flee settings stay on all game (they were turned off at warrank 8 and above in previous versions). 

 

I think we should also incorporate some interesting chat options for the AI
  Chat shouldn't be too terrible if we can tie it to an event.

Reply #263 Top

Set the flee settings stay on all game (they were turned off at warrank 8 and above in previous versions).

just curious, but what does this mean.  Thanks

I'll have a little time to do some testing this afternoon. 

Reply #264 Top

just curious, but what does this mean. Thanks

I'll have a little time to do some testing this afternoon.

My goal had been to get warrank 8 and above to be more aggressive for portals, and fleeing tended to get in the way of that, so Flee was not checked often in warrank 8.   With that they were more suicidal than effective at warrank 8 and above.  We have lowered the flee settings a little bit, so I have let the flee setting be checked all game.  This change may keep them away from outright suicide and give a more consistent feel to their game.

Portals will still be a priority to capture they just should not continue the action to death at warrank 8 and above.

Reply #265 Top

Chat:  Do they currently have an action to teleport in for ganks / assisting an allied demigod at a flag or tower?  Or is it just a general respond to flag/tower event?  If the former, have them send a message when they begin to TP in.  If the latter, it would probably get too spammy since they do this fairly often.  Maybe just add an announcement for the normal TP-to-tower/flag actions when both enemies and (human) allies are present.

Also, with any kind of gank or demigod-attack actions where more than one enemy demigod is present, consider announcing which demigod it is focusing on (AND sharing this information with other AI to influence their target choice, if that's possible - this is where my knowledge of the AI structure runs a bit short).

 

Retreating: Demigod number balance is key.  As people are saying, the AI retreats quite well when the numbers are even and things aren't going its way, it's when it's badly outnumbered that it doesn't retreat soon enough or far enough.  If it's way outnumbered (2+ more enemies than allies in close proximity), jack the retreat weight way up, and consider setting retreat destination to the health stone instead of just a tower (one tower won't save it from number like that) if it's possible to do that from within the health sensor.

Ideally, it should take into account allies vs enemies in the immediate area, but with allies weighted lower (since 3 enemy demigods can still pound down one demigod pretty quickly in a 3v3, and knowing when you're that target and getting out early is important).  Using this information to create a modifier for health amounts would be a quick way to implement this, e.g. so the health sensor perceives its health as being a certain percent lower than it actually is when it's outnumbered or when there are 3+ enemy DGs nearby.

e.g. each enemy = -0.15 modifier to health, each ally = 0.08.  So three enemies and one ally in range would be 1 + (-0.15 * 2) + (0.08 * 1) = 0.78 modifier to apparent health, greatly increasing the speed at which it determines that it should retreat.  Make sense?  Those numbers are just examples to start with - it would roughly halve the AI's apparent health when outnumbered 3 to 1, causing it to retreat at full health, and probably still cause it to retreat too early with two other allies nearby.  Maybe that's excessive.

Reply #266 Top

Oh jeez, they didn't put any special categories on Rook's towers.  It's easy and harmless to add categories to units to make them more filterable - put this in a lua\system\Blueprints.lua:

Code: c++
  1. --Add a filter category to Rook's towers
  2. local TOLCat = 'ROOKTOWER'
  3. local MBP = ModBlueprints
  4. function ModBlueprints(all_bps)
  5.     for i=1, 4 do
  6.         local bp = all_bps.Unit['hrooktoweroflight0'..i]
  7.         if bp and bp.Categories then
  8.             if not table.find(bp.Categories, TOLCat) then
  9.                 table.insert(bp.Categories, TOLCat)
  10.             end
  11.         else
  12.             WARN("ModBlueprints: Can't find unit: hrooktoweroflight"..i)
  13.         end
  14.     end
  15. end

Then you can find 'real' TOLs by looking for categories.DEFENSE - categories.ROOKTOWER without having to jump through any hoops.  Saves effort and CPU time.

Reply #267 Top

Enhanced AI 0.26.26/uberfix 1.03/FavorMod 2.1.2  

Settings:  cata/High Towers - all other settings on default
AI settings:  normal
rook(h)/rook/rook/rook v rook/rook/rook/rook

Observed results:

I like what I see at the start - I noticed the ai being a bit more aggressive and even trying to push some high towers out of the gate.  I did notice that the ai on my team all massed at the health flag at start (which honestly, isn't really a bad thing).  Their ai seemed to have a better split on who goes where (1 at mid, 2 on mana, 2 on hp).  But frankly, as long as its somewhat random, its not that bad imo.

Another thought - i've seen the ai tp in several times here and there - but often, it will just tp in and retreat, etc, without doing anything (eg why bother tping in like that unless its to save a portal, i guess...).  I'd like it if the ai would do something if its going to port in... even if its just something generic like dropping a tower or casting silence or anything really. 

Generally speaking, the ai performed reasonably well setting up towers.  I didn't see any major pauses, etc. 

One thing, though - I really want to see the ai firing off boulder rolls even more.  If I'm near 3 rooks and not a single one of them even bothers to stun me, well... it makes it MUCH easier for me to get a farm up, kill a tower, whatever. 

I'm thinking that either we need to tweak hammer slam a little as well or change the ai build so that its using structural transfer.  I really like how its using and setting up tower farms for the most part. 

Anyway, perhaps I create a build called tower_structtransfer and we just end up commenting out tower_hammerslam along with the already commented hammerslam.  I think the ai might be much better off with struct transfer (as long as it does eat its own regular towers down to nothing). 

Reply #268 Top

One thing, though - I really want to see the ai firing off boulder rolls even more. If I'm near 3 rooks and not a single one of them even bothers to stun me, well... it makes it MUCH easier for me to get a farm up, kill a tower, whatever.

Current action is to use roll for interrupt or if the target is below 60%.  If you want it to use it more let me know another condition, or we can do safe to use down to 50% mana or something.

Hammer slam is fire at will.

AI structural transfer actions only targets enemy structures.  Adding it to a rook build may be good since the AI loves to go near enemy towers.  Probably an easier skill for the AI to use as well.

 

Flag selection is random selection from equally safe targets, so you will see different middle flag selections game to game.

 

 

On teleport i don't know if its the nearbyheroes sensor not updating to find a target when it TP's in or if the AI just teleports and selects an action base don its last location or something odd like that.   There were only two teleport actions in the base game, teleport to health stone and teleport to something near a squad if i recall.

Reply #269 Top

Current action is to use roll for interrupt or if the target is below 60%. If you want it to use it more let me know another condition, or we can do safe to use down to 50% mana or something.

I want it to fire more often.  Roll for interrupt is swell (didn't see that happen much at all, even with me using structural transfer near the enemy quite a bit).  I would have it literally fire at will in the meantime.  The main goal is to catch enemy dgs near or in a your tower farm so that they take additional damage without being able to do anything at it. 

Hammer slam is fire at will. 

Fire at will here seems to mean RARELY use.  I think I've seen 1-3 hammer slams per game... literally.

AI structural transfer actions only targets enemy structures. Adding it to a rook build may be good since the AI loves to go near enemy towers. Probably an easier skill for the AI to use as well.

Well, the number 1 target should be close enemy structures, but I'd also want the ai to use struct transfer on its own towers (eg towers that it sets up) if there is not a reasonably close option.  Also, structural transfer should be used frequently when attacking enemy towers (as in the first action when nearing a tower for an ai should generally be to cast struct transfer. 

Reply #270 Top

Uh, whoops, I forgot something in that ModBlueprints hook.  Let's try this again:

Code: c++
  1. --Add a filter category to Rook's towers
  2. local TOLCat = 'ROOKTOWER'
  3. local MBP = ModBlueprints
  4. function ModBlueprints(all_bps)
  5.     MBP(all_bps)
  6.     for i=1, 4 do
  7.         local bp = all_bps.Unit['hrooktoweroflight0'..i]
  8.         if bp and bp.Categories then
  9.             if not table.find(bp.Categories, TOLCat) then
  10.                 table.insert(bp.Categories, TOLCat)
  11.             end
  12.         else
  13.             WARN("ModBlueprints: Can't find unit: hrooktoweroflight"..i)
  14.         end
  15.     end
  16. end

Quoting OMG_pacov, reply 267
(as long as it does eat its own regular towers down to nothing). 

Yeah, that's what this is for - so abilities etc can distinguish between its own summoned towers and real friendly/enemy ToLs at a glance.

Reply #271 Top

Is it supposed to log the warnings in the lobby and just before launch?

Reply #272 Top

Yes, if it can't find them.

I see now that the level 1 TOL is just 'hrooktoweroflight'.  Way to go GPG.  So much for trying to automate things.  I assume it's only dropping a warning for the first one, right?  If so, try this:

Code: c++
  1. --Add a filter category to Rook's towers
  2. local TOLCat = 'ROOKTOWER'
  3. local rookTowers = {
  4.     'hrooktoweroflight',
  5.     'hrooktoweroflight02',
  6.     'hrooktoweroflight03',
  7.     'hrooktoweroflight04',
  8. }
  9. local MBP = ModBlueprints
  10. function ModBlueprints(all_bps)
  11.     MBP(all_bps)
  12.     for k, towerName in rookTowers do
  13.         local bp = all_bps.Unit[towerName]
  14.         if bp and bp.Categories then
  15.             if not table.find(bp.Categories, TOLCat) then
  16.                 table.insert(bp.Categories, TOLCat)
  17.             end
  18.         else
  19.             WARN("ModBlueprints: Can't find unit blueprint for '"..towerName.."'")
  20.         end
  21.     end
  22. end

Reply #273 Top

Enhanced_AI_v0.26.27:

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.27.exe

http://peppe-dg-mods.googlecode.com/files/Enhanced_AI_v0.26.27.exe

 

Added Rook Structural transfer build (copied tower slam build and swapped hammer slam for transfer)

Structural transfer action only considers enemy or rook towers as targets (using miriyaka blueprint function)

Upped weights on hammer slam action and removed a unit check condition.  Should use skill more.

Added a little ally vs enemy hero check to the flee decision.

Teleport actions switched to use 'update sensor distances' function at end instead of clear distances function (this is the only difference i found in the two vanilla teleport actions).  Seems to help make the tower and portal teleport re-scan their area.

Reply #274 Top

I see now that the level 1 TOL is just 'hrooktoweroflight'. Way to go GPG. So much for trying to automate things. I assume it's only dropping a warning for the first one, right? If so, try this:

Yeah it was just the first one.  Updated download above with your updated fix.

Reply #275 Top

Observed results:

Added Rook Structural transfer build (copied tower slam build and swapped hammer slam for transfer)

probably adequate.

Enhanced AI 0.26.27/uberfix 1.03/FavorMod 2.1.2  

Settings:  cata/High Towers - all other settings on default
AI settings:  normal
rook(h)/rook/rook/rook v rook/rook/rook/rook

Observed results:

noticed 1 rook on my team over did it a bit early working on the tower.  stayed way too long - didn't try to retreat either when at like 1k hp and died.

1 enemy rook decided to push past the tower on the cooldown flag side to use structural transfer on a tower a rook my team.  He died as a result.  AI SHOULD have either fled or used structural transfer on the closest tower. 

I don't agree with the logic to have the ai only feed on enemy towers or enemy rook towers.  It should do that as a primary, but it the ai has its own tower farm up and needs hp, it should steal hp from one of its own towers so it can stay in the lane longer.  Otherwise, the ai rook will always be taking extra damage, pushing up to get a heal off another tower when a safe heal was available. 

still not seeing many boulder rolls... actually, let me take that back.  The boulder roll behavior is MUCH better. 

the more I watch the ai use structural transfer, the more i kill it.  Really needs to change the way it thinks.  Honestly, I'd make it so its first target is one its own rook towers.  It just seems to be willing to walk into whatever with struct transfer, which gets it killed. 

Also, if its going to attack a normal tower, can we have the rook OPEN with struct transfer regardless of its current HP?

Plus, if the ai can only use enemy towers to use struct on, what happens when the ai is being chased away and desperately needs a heal?  I'd have to drop a tower for him to have a chance to cast that on.