Please fix Minion/Companion AI

I know there has been at least one pass on this, but IMHO, they are still “dumb”. The biggest issue is that they proactively agro monsters, even ones off screen, and get you into “trouble” as a result.

Here is how the AI should be coded, generally speaking:

Every second, perform these checks, in order, and stop processing further checks if one comes up “Yes”:

  1. Has the player pressed “A” while targetting a monster?
  • No: No change to current minion’s action
  • Yes: engage the monster
  1. Has the character dealt any damage to any monster this second?
  • No: No change to current minion’s action
  • Yes: engage one of the targets the character dealt damage to, or remain on the target you’re on if it qualifies
  1. Has any monster dealt damage to the character?
  • No: No change to current minion’s action
  • Yes: engage one of those monsters
  1. Has any monster dealt damage to the minion?
  • No: No change to current minion’s action
  • Yes: engage one of those monsters
  1. Become Neutral

Result:

  • They will always remain neutral (not engaging) while you are not in combat (not dealing or receiving damage) and while they are not under attack.
  • They will always take “A” on priority
  • They will stick to a target you’re attacking over engaging other targets which either hit you or them
  • They will prioritize targets which hit you vs ones that hit them
  • Lastly, they will defend themselves if hit

Sounds logical to me…

I’d add another along the lines of a mob aggro’ing either the player character or a minion - i.e. havent actually done damage yet but about to… Mainly so that the minion can intercept the mob before it nails the player…

As good as this all sounds I have zero idea on its viability from a performance perspective tho… Lets face it 100 skeletons all doing this every tick could be a nightmare… Maybe its doable… I honestly dont know…

You don’t really do it “per minion”. You do it once/second for the player.

To reduce processing computations for minions, you set up a “trigger” when a minion is hit/takes damage that sets a flag as “at least 1 minion is under attack” and you add the monster “source” to a “target List”. This lets you run a lot less logic every second.

It would mean that if 1 monster hits 1 minion (and nothing else is happening) all 200 of your minions will turn and attack that poor monster… :slight_smile: lol

It also means that if multiple monsters hit multiple (different) minions, that all minions will pick one of those SOBs off the “Target List” and nuke it all together.

You’d then clear out that flag every second at the end of each cycle.

In this scenario, and as you’ve stated, minions are never aggressive on their own. I personally don’t want minions who won’t ever engage an enemy unless I’ve either told them to or one of us has taken damage. I could see this being a ‘stance’ option where we could set it to that, but as a default it would make for pretty frustrating minion gameplay, where they just don’t seem smart enough to ever figure out that a nearby enemy should be attacked before it potentially kills me or the minion. It would also slow down leveling, since your minions are going to kill far fewer enemies, or you’re going to have to manually tell them to attack pretty much every pack.

3 Likes

Not true. Rule #2 kicks in the second you start to deal damage or take damage, so they will always engage in combat even if you never hit “A”.

I would be ok with a toggle in “Settings” to enable/disable one additional rule which would sit at the 4.5 position (right before “do nothing”) which would read:

4.5. Are there monsters within range of the character?

  • No: No change to current minion’s action
  • Yes: engage the monster

That would make you happy when enabled, and me happy when disabled. They can call it “Minion Aggressive Behavior [ ]”

My only objection for minions is they fight for the same spot causing a lot of collisions amongst themselves before they sort it out, which leads to inefficient engagements or disengagement depending on what is going on.
I prefer the spread-out method where each minion type did their role but knew that they all could not attack the same spot. Think of it this way… Driving a car, if two or more cars end up at the same place at the same time in the same lane you have an accident, then throw in speed, damage, and all the other things that could end up being fatal. Apply that same logic to the minions and they usually are dead. I think of them as meat shields with a damage boost that AIDS does not DO the damage for you. Anytime that the minions supersede the character in damage there is a problem.

Many necro minion builds don’t have any direct player damage.

2 Likes

Surely this could be fixed by “just” having aggressive/neutral/defensive minion stances and being able to switch them on the fly (no cooldown)?

1 Like

And if you run around never dealing or taking damage - which happens all the time on minion builds - it never kicks in.

I don’t consider that an issue. In fact, it’s exactly what I want.

Then I think we agree on a toggle idea for behavior: Aggressive (current behavior), or “Reactive” (I’d avoid the word “passive”) which uses my proposed rules.

I’m with bronco on this one, i want the dumb things to go out and do the work for me, thats what I envision the entire point of having a minion build. To me they are still not aggressive enough as they come back to me after every single kill, passing all the other enemies along the way. Sometimes I might be getting smacked by what is equivalent to an ant that I want them to ignore in order to stay on the target they are smacking. I dont want them to all stop what they are doing because a bug farted on me waste the time to disengaging from combat, move across the screen, start the fight as now they have not only all gathered but pulled all the stuff they were fighting back to me.

How about this for the toggle idea:

Aggressive AI Priority:

  1. ‘A’ key
  2. Remain on current target, if already fighting
  3. Reaction: Player attacks, engage player’s target
  4. Reaction: Player attacked, engage attacker
  5. Reaction: Minion attacked, engage attacker
  6. Monster in range: engage and attack automatically
  7. Remain neutral, follow Player

Reactive AI Priority:

  1. ‘A’ key
  2. Remain on current target, if already fighting
  3. Reaction: Player attacks, engage player’s target
  4. Reaction: Player attacked, engage attacker
  5. Reaction: Minion attacked, engage attacker
  6. Remain neutral, follow Player

In both modes, the minions stay on a target until it dies. In reactive mode, it won’t engage a new target unless rules 1-5 apply. In aggressive mode, it also has rule 6 (current behavior), but I’ve moved that rule down in priority so that, per Vyanie’s post, they don’t peel off the player’s preferred target once they are on it.

If its like that then on the aggressive one then move the #4 to # 5, as I said I personally do not want it comming back unless told to. If you have ever played old school diablo 2 or PoE with the aggressive gem “feeding frenzy” thats how I want them to act

2 Likes

+1 That is how I think minions should be

Yeah, I think that some player based method of choosing minion behavior as aggressive vs defensive is the only way to balance my obviously correct desires for my murder minions with your weird ones (:P).

There are a number of examples in other games to follow and it could honestly be any of them. The only ones I wouldn’t like is if you had to get a specific, very rare Unique item (COUGH) or blow a specialization point in each skill you wanted to change behavior for.

hrmm the specialization might work, put them in the necro tree, and attach something else to it as well, like in aggressive form they do more damage or leach hp or something then defensive they get more hp and taunt more , that might actually work

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.