This fourth installment of my series on game mechanics is about NPC hate/aggro.
There has already been a lot of research done on this topic. The old forum posts can be useful as means to verify if things have changed over the years or not, and as a sort of verification of my research. Here are some interesting threads:
Credit to Elroz of TAKP for compiling this list.
Some of that information is either outright incorrect or just out of date however, but much still applies. Generally speaking though, the game's mechanics have changed little.
In one of the more recent expansions, Sony introduced a hate meter UI feature. This tells you the percent of hate you have relative to the NPC's target. This combined with certain spell lines that always do precise hate values (the SK terror series of spells in particular) allows one to measure the hate for all spells quite easily and with absolute precision in some situations. The authors of the above threads did not have this UI feature available to them, so their data was prone to a higher margin of error.
I spent many hours determining the hate values for many spells and hate under certain conditions. From the data I came to conclusions as to how the game functions.
My notes/data can be read here: http://pastebin.com/k7NtERvN
Spell hate from most non-damaging detrimental effects do the same amount of hate relative to each other.
'Non-damaging detrimental effects' means snares, fears, slows, blinds, mezes, stuns, and ac debuffs. These spells all apply the same amount of hate on the same NPC. When I use the term 'Non-damaging detrimental spell' in this and other posts, keep in mind I mean these spell effects.
Most stat debuffs (resists, strength, dex, etc) apply a flat 10 hate per effect. Atk debuffs are also a flat 10 hate. The SK atk stealing spells will do either 10 hate or 19 hate depending on if the buff portion is witnessed. (see below about witness hate)
Spell hate from non-damaging detrimental effects scales with the target's base maximum hitpoints.
I measured EQLive spell hate on many NPCs and plotted the data points. There was a trend of increasing spell hate with NPC level, but NPCs of the same level often did not hate spells the same amount. (graph: http://imgur.com/zdK4tmw
) It was after rereading this patch note from February 21, 2001:
— We’ve capped the amount of hate that can be awarded to most
casters, specifically for debuff-type spells like the Malo and Tash
series. The hate calculation for these spells takes into account the
number of hitpoints of the NPC and did not “play nice” with the
increased HP limit of Velious. It explains why Enchanters, for
instance, would complain that casting a Tash spell would lead to near-
that it occurred to me that hate might scale with NPC hitpoints instead of level, and sure enough it did:
Standard spell hate per cast = maxHP / 15 capped at 1200 with a minimum of 25.
The patch note mentions malo and tash-- those spells were later altered to not do hate scaled by NPC hitpoints. In 2005 tash got a 'hate override' value to always make it apply the same amount of hate, similar to the SK terror line of spells. Malo spells as of now do 40 hate. Snare and the rest of those spell types still follow the hate = hitpoints / 15 formula. It's worth mentioning that the tash spell hate values correlate very well with how much they would typically do on NPCs of the level the spells were obtained were they to do hate scaled by NPC hitpoints.
Hitpoint buffs on the NPC had no affect on the hate generated by spells.
The hate from each effect in a spell stacks. (with some exceptions)
Markar's Clash (the wizard stun) did as much hate as a typical spell + the damage component combined. Necro/SK snares do more hate because of the damage component. Cripple does a little more hate than usual because of the stat debuffs. (stat debuffs = resists, str, dex, etc) All malo spells do 40 hate.
The bard song Denon's Disruptive Discord just seemed to apply hate for the damage component. It's possible this does not apply to all spells. Largo's Assonant Binding did much more hate than typical on very low level NPCs however, indicating some sort of stacking.
AC being the only stat debuff having significant hate is noteworthy. Many spells have an AC debuff effect, which in some cases could have been given to them for the purpose of giving the spell significant hate generation. Perhaps the other stats give small amounts of hate because they are often stacked together in the same spell.
Very few spells in the game have two effects which have scaling hate, which may also be intentional. (except bards, but their hate is capped lower. see below) Some start to show up in the House of Thule expansion. Some evidence suggests that these effects stacking may not add up to the expected value. Largo's Assonant Binding has three effects that have scaling hate + a stat debuff, but the hate it does is less than standard hate x 3 + 10. (not much less however) Selo's consonant chain did a little less than 2 x standard hate. The level 88 enchanter slow also did ~2000 hate instead of ~2400 on a 18k+ NPC on the first cast.
Lower rank non-damaging detrimental spells do the same amount of hate as higher rank versions.
Forlorn deeds did the same hate as languid pace when I tested them on the same NPC.
Note that stat debuffs (resists, str, etc) are always a flat 10 hate per effect. All malo spells do 40 hate for example.
Hate from damage spells is the value of the base spell damage (i.e. ignores resists, crits, focii, AAs). Hate from melee is weapon dmg + dmg bonus per swing (even misses). Hate from rune buffs is 2 * absorb value.
Heal hate = 2/3rds the amount healed excluding crit, focus, and AA portions; capped at 800 on 1-50 targets, and 1500 on 51+ targets.
Relevant patch notes:
March 6, 2001
– Hate from heals is also now calculated at a lesser number than the
number of hitpoints healed. Previously, healing one hitpoint would
cause one point of hate. Now, healing 3 hitpoints will cause 2 points
February 21, 2001
two separate caps have been placed for targets level
50 or below, and 51 or above. Heal spells will generate significantly
less hate for targets below level 51 than those at or above that level.
Dev quote: (mentioned here http://www.eqclerics.org/forums/showthread.php?t=2452
A team member has asked that we clarify the changes to the way hate is awarded in healing. The important point that may not have been clear below is that there is a cap on the amount of hate that can be awarded for any particular heal spell. For a target below level 51, no heal spell can generate more than 800 hate, regardless of the number of hitpoints healed. For targets level 51 or above, the cap is higher, but does not approach the total hitpoints of a fully buffed warrior.
On EQLive it used to be 1 = 1 like damage, but changed to 2/3rds in 2001, and remains so today. The highest level character I tested heal aggro on was level 96.
Heal over time spells and roots are all 10 hate.
Many/most buffs are a flat 9 hate, even if they have a heal component.
Resist buffs, cleric hitpoint buffs, see invis were 9. Even when the cleric hitpoint buff resulted in healing, the hate value was still 9. Skin like wood was 25 for whatever reason. I didn't test very many buffs.
NPCs can fail a 'witness check' (Sony's term, mentioned in patch notes) in which case they will completely ignore a beneficial spell cast by a player which is in their hate list.
This means you can cast a heal on somebody tanking a NPC and have a chance to not get on the NPC's hate list at all. This is why healing is less effective than hitting NPCs for getting faction hits in groups/raids.
My data suggests that witness check rates are not affected by distance or angle to the target. Levels of the caster and target also seemingly make no difference, however I have not tested every possible combination of level disparity due to the difficulties involved. I did run some tests involving characters that were lower in level from the NPC, which produced the same success/fail rates, although the tank was still a higher level. (I had the casters usually casting on themselves however, not the tank)
The data does indicate that rates are not the same for every spell. Endure Fire for example was witnessed at a lower rate (about 40-45%) than most other spells I had tested-- those were around 50%. Minor Healing also resulted in the same lower witness rate as Endure Fire on a level 68 NPC casted by a level 65 character. I have not tested many spells due to the significant amount of time required to gather the data.
An old cleric thread from early 2004 has some clerics running tests, and they also came up with the 50% chance for heals to aggro, testing on low level NPCs: http://www.eqclerics.org/forums/show...t=17872&page=3
however their sample sizes are small.
See the pastebin link for my data.
Non-damaging detrimental bard song hate seems to be capped 40 on level 20+ NPCs.
Both my level 26 and level 90 bards were doing 40 hate for non-damaging detrimental spells on mid to high level NPCs.
On NPCs below level 20, Largo's Assonant Binding did more than 40 hate. On a level 1 NPC it was doing 55 hate; on a level 19 NPC it was doing 127 hate. (~711 hp) Likewise Selo's Consonant Chain also did more than 40 hate on targets below level 20. Requiem of Time did 47 hate on that same level 19 NPC. On level 20+ NPCs they all did a flat 40 hate.
Most bard buffs add 2 hate per party member hit, subject to witness checks.
Selos is a notable exception, adding quite a bit more. Shield of songs of course adds much more. (I have not measured it precisely yet)
Hate from procs is capped.
From the February 21, 2001 patch notes:
— We reduced the amount of hate that can be caused by a proc. Due to
the high proc rates at upper levels, the amount of hate generated from
procs, and the spells that were selected for those procs, made keeping
the attention of the creature much too easy a task for the tank.
Simply, it nearly eliminated the challenge of keeping a foes attention
at levels above 50.
You can also see this in some old hate research here: http://www.elitegamerslounge.com/hom...?f=307&t=90781
This affects not just stuns, but also slows and snares and presumably any of the effects with hate that scales with NPC hitpoints. The scaling spell hate portion of a proc is capped at 400-- any damage component will stack. I used a swarmcaller on a 3600 hp NPC and the proc did ~236 hate. The proc on a 11.5k hp NPC did 400 hate.
Disease and poison counters used to add hate, but don't any longer.
This is how SK disease cloud used to be a good aggro tool. Poison counter hate was removed in April 2005. Disease counter hate was apparently removed earlier, but I was unable to determine the date. For now I gave counters on TAKP hate until I can find evidence that the nerf was pre-december 2002.
Distance to the target does NOT affect hate of spells.
Spells cast at 0 distance do the same hate as spells cast at 200 distance.
Other than the melee range bonus that all players get when they enter melee range of the NPC, there does seem to be a very very small hate modifier that gets applied if you get nearer to the NPC, but this was so small I confused it with the margin of error. It almost seems as if Sony/VI wrote it in and then failed to scale it with level. Realistically, being 200 feet away will behave the same as being 50 feet away. (assuming 50 is also outside melee range)
If a spell landing on an NPC is the first thing to put you on its hate list, then it will ignore hate modifiers such as subtlety AAs and item focii.
One of many odd first-to-aggro spell rules. Incidentally high ranks of subtlety reduce hate by very large amounts. My level 90 shaman was doing 37% of the full hate value; although it's worth noting I only tested on level 75 and under NPCs.
The first-to-aggro spell casted on animal NPCs will do nearly zero hate.
If you cast a spell on an animal NPC that is not already aggro on you, then it will do pretty much no hate at all; even SK terror spells. Every cast after getting on the hate list will apply hate normally. Only one dispel (assuming it's first-to-aggro) on animals will add any hate.
I've also observed this behavior from Derakor the Vindicator, and from another rampaging trash mob in kael.
Dispels do 50 hate each on the first two casts on an NPC, then 0 for every additional cast, or 0 for any NPC that already hates you 100 or more.
Dispel hate seems a bit strange, but incidentally this is a good way to measure hate: pull the NPC with a dispel, then cast another one, and you'll be at 100 hate; then compare that known quantity with a spell casted by another player.
For TAKP I just made dispels 1 hate.
Getting on an NPC's hate list adds an additional 100 hate in most circumstances.
If you nuke an NPC that does not already have you on its hate list with a direct damage spell that does X damage, then your hate will be X + 100. Subsequent casts will just add X hate. (again, assuming no resists/crits/focii/AAs)
The exceptions I've found are:
* Any spell with a 'hate override' such as the SK terror spells and enchanter tash spells.
This seems strange to me, as it has no real affect on the outcome of who the NPC attacks, aside from reducing the effectiveness of hate override spells on the first cast.
The permanent hate bonus for aggroing most NPCs by proximity is 20 or 25, depending on the NPC.
If you run up to most NPCs and let them hit you first, you'll have either 120 or 125 hate.
An NPC will add everybody that it's aggressive to and are in aggro range of it to its hate list when its proximity aggro routine is executed.
This means that when an NPC spawns on top of multiple players, everybody within the NPC's aggro radius will get on the hate list simultaneously. Also, if you run multiple characters in range of the NPC between the periods the NPC checks for players, everybody in range gets on the hate list. After the NPC is aggro, it will stop checking its aggro radius.
Some NPCs continuously (endlessly) check for players in melee range (not full aggro range) to add to their hate lists even after aggroing on a player. (usually undead)
This used to be much more common in the classic world before Sony revamped all the zones. It's still common in Kunark, undead NPCs, fearplane, and other places. Players who first-aggro NPCs this way will still get the 20 or 25 hate applied when they aggro. The result of NPCs having this ability is that you can train them on to people who did not touch them by running over people if you have very little hate on the NPC. This is very much classic behavior. (see Fansy the bard)
Level disparity with the NPC does NOT affect the distance/radius it will proximity aggro on the player.
This is a commonly held myth. Level 1s will aggro at the same distance level 100s will.
Outdistancing a NPC may cause it to forget you. This distance varies with zone and/or NPC.
There is a maximum chase distance NPCs have that will generally cause them to forget the player they are chasing. This behavior has several quirks however:
* It takes a brief moment before the NPC will forget the player after the distance is reached, and it will not forget if the NPC re-enters range again before it forgets. (Sony's check seems to be on ~10 second timer)
* Sometimes the NPC will either stop chasing, or even run backwards in some strange direction for a short while after this distance is reached, before forgetting the player. (may vary depending on zone; happens in fearplane a lot)
* Sometimes the NPC will oddly blink in and out of combat with the player for a time. (observed by looking at the hate meter UI)
* If you run outside this distance and sit with sufficient sit aggro while it's attacking another player, the NPC will usually not chase you-- it will sit there and forget you when the distance check routine cycles. If the zone's forget distance is less than 600 it still might (not always) chase even after that distance.
* If you do something to make the NPC have to adjust their hate list (i.e. buff yourself) while outside this distance and while it's attacking somebody else, it will drop you from its hate list; otherwise you will remain on the list if the NPC hates another player more.
The adds that spawn during the Xegony event have extremely large aggro radii. So large that they will aggro on players on the other side of the island, then immediately forget them, should they be on opposite ends of the island. The aggro meter UI feature allows you to observe this.
This distance is:
600 guard in Commonlands
600 bandit in west karana
600 minotaur in Lower Guk
600 shiverback in Plane of Fear
600 tranasaur in Trakanon's Teeth
600 frost giant scout in Great Divide
600 common storm giant guard in Kael
600 a gale wolf, Rumbleroot in Plane of Growth
600 razorfiend in PoValor
600 diaku armsman in Drunder
450 tarmok in Fungus Grove
300 a drolvarg guardian in Karnor's Castle
300 froglok dar knight, sebilis juggernaut, sebilite protector in Sebilis
280 a Di`zok Recruit in Chardok
Protectors of growth aggroing from across the zone suggest that this may be set on an individual NPC type basis rather than a zone basis. Trakanon (the dragon) has a 500 or 600 aggro radius as most dragons do, so I aggroed him from well beyond 300. Sitting down with sufficient sit aggro on a protector of growth that is attacking another player will not result in the mob charging/summoning you if you are beyond 600 distance, but it will not forget you like most NPCs.
Note that on Al'Kabor/Old EQ, instead of dropping the player from the hate list, it would often merely just refuse to chase while still maintaining aggro/hate, then chase again if the player re-entered range. (patrollers may have remembered while statics might have forgotten after returning to spawn, but I'm far from certain) I can also confirm that Al'Kabor's dungeons had those same short chase distances, as I pulled those zones for AoE groups. (proof: https://www.youtube.com/watch?v=kxlwg_p1_Fc
This plus crazy pathfinding making NPCs run backwards at times are what made pulling trains for PBAoE groups difficult on EQLive. It's trivial on the emus.
NPCs will forget you if you do nothing for 10 minutes.
NPCs with a lot of hitpoints (starting at somewhere between 62k and 80k) seemingly hate non-damaging detrimental spells 5% less than typical.
Does not apply to damage spells, which do full hate. EQ's code is full of oddities it seems. I only tested five mobs above 62k however.
Pet hate appears to be about 1/2 max damage per swing.
I theorized that pet hate would be half the max hit per swing because giving pets a weapon will make them do weapon damage * 2 if their max hit is less than that value, and sure enough that seems to match my observations, or close to it anyway. The same appears to be true for charmed NPCs-- one half the max hit per swing. This makes sense because client misses produce hate, and so do pets misses. I have to mention that I only tested this on a couple of NPCs however, and that it's probably not precisely one half.
Temporary Hate Bonuses
The hate bonus for being in melee range is...
For NPCs with less than 4000 hitpoints, bonus = 100
For NPCs with 4000 to around 60k hitpoints, bonus = (maxHP - 4000) / 15 + 100
After roughly 60k hitpoints, bonus = 250 + hitpoins / 100
with a cap of 2250.
The highest HP NPC I checked had just over 1 million hitpoints. (Vex Thal boss) Unknown if this cap raises in more recent expacs. These likely are not the formulae Sony uses, but they fit my data very closely.
The hate bonus/aggro threshold for sitting is...
The sit bonus is different depending on if you are inside or outside of melee range.
The inside melee range bonus is thus:
Up to around 13k hp, the sit bonus is equal to a non-damaging detrimental spell (hitpoints / 15
) with a minimum of 15 instead of 25.
After ~13k hp, the NPC's sit bonus actually starts to decline down to 0 at 100,000 hitpoints with the function bonus = -hitpoints / 100 + 1000
The outside of melee range sit bonus is also equal to a non-damaging detrimental spell (hitpoints / 15
) but it caps at 1000 and stays there.
You'll notice that at some level ranges, a player can actually have the same amount of hate as the tank (-1) and sit down without being attacked.
The low-health-aggro hate bonus is equal to the NPC's max hitpoints (or very near it), with a minimum of 500 and a maximum of 10k.
This may be higher for more recent expacs (although I wouldn't bet on it), but I'm focused on PoP era content. The highest level I checked was a 68.
Note that the data points don't fit perfectly due to the melee range bonus, as I had them outside of melee range for obvious reasons.
The order which players get on the hate list can determine who the NPC attacks if hate difference is very small, due to a small hate bonus.
If the most hated player is in melee range, and there is a second player in melee range with the same hate value, then the NPC will attack the player who got on the list first.
The first person on the hate list that the NPC finds in melee range gets a 35 hate bonus. This stacks with other hate bonuses, such as the melee range bonus. This means if the puller is in melee range, then everybody else in melee range would have to do his hate + 35 to become the target; outside-of-melee range players would have to do 35 + the melee range bonus to become the target. If the puller left melee range, then the next guy who aggroed the mob after him would get this bonus if he/she is in melee range.
If every player on a NPC's hate list is outside of melee range, and they all have similar hate levels, the NPC will prefer to attack the closer player.
There is some sort of hate bonus applied that scales by distance to the target only if the NPC is not close enough to hit somebody. If you attempt to train an NPC over somebody who has the same amount of hate as you do, it will chase after them instead of you from a variable distance that is larger when the hate difference is smaller. The more hate you have over them, the closer you have to bring the NPC to them in order for it to attack them. Like other bonuses, this bonus isn't terribly large so it's rather trivial to overcome. This bonus seems to taper down to 0 roughly 100 distance away, or perhaps some factor of the NPC's size/melee range. This is of course very difficult to measure.
A successful taunt makes your hate = the top hated entity, not including bonuses.
Whether or not the NPC attacks you after a successful taunt depends on when you got on the hate list. The 35 first-in-range bonus applies. If you pulled the NPC and taunt it off somebody else, you will be the target. If you taunt the NPC off of somebody who pulled it, they will still be the target due to the 35 bonus.
If neither the taunter nor the person being taunted off of have the 35 bonus, then the NPC will attack whomever got on the hate list before the other. Taunt does not add any hate above the top entity, it only matches it.
Note that this means that it is possible to be tanking the NPC and still possibly gain hate from a successful taunt due to the melee range and 35 hate bonuses. If a ranged player has more hate than the tank, but not so much that the NPC will leave the tank for him/her, then a taunt from the tank will match the ranged player's hate.
NPC Assist/Call-For-Help Behavior
NPCs calling for help will cause them to social aggro on players even after they are already aggro on another player.
There is an issue on the emus where, for example, you can aggro an NPC, then drag it nearby another NPC on the same faction that is engaged with another player, and you will not get on the hate list of that second NPC. This is incorrect behavior. NPCs will share who they hate with each other even after entering combat.
Many (most?) NPCs who assist an attacked NPC will never call for help themselves until they themselves are attacked.
Note that aggroing via proximity also classifies as 'attacked' in this case.
You can witness this strange behavior by rooting a NPC next to another NPC, then invising yourself and training the 2nd NPC around which will never call for help. My limited research suggests that this is limited to the more common NPCs in the game, and not raid NPCs. The Umbral Plains mob I tried did call for help, while a PoValor spider and HoH armor did not.
However NPCs of the same type can either call or not call-- when I tested this on golems in Plane of Valor, pulling a specific golem resulted in calls for help while another golem did not. Incidentally the golem that did result in calls for help saw invis, but it could be entirely unrelated/coincidence. (the golem I rooted saw invis)
Of the assisting NPCs that do call for help, there is a delay before they begin to do so.
This prevents chain-reaction aggro. The delay may be one tick or so but I'm uncertain of the precise delay value. Assisting NPCs that were casting pets when aggroed were delayed long enough for them to start calling for help.
There is a supposed limit to how many NPCs can assist in a call for help.
An old Sony developer quote from 2006:
Aggressive grey con NPCs will proximity aggro starting at level 18.
Originally Posted by Rashere
When most NPCs call for help, they will only call for a small, set number of NPCs to respond to keep from swarming people with dozens of NPCs at once. There was a problem in the call for help routine that caused an NPC to not call for help again for a few seconds if it had already called for help and enough NPCs responded that they had met that maximum number the first time. This is what was enabling the so called "tick pulling" phenomenon whereby you could aggro an entire room, drop aggro, then immediate re-aggro a single NPC and it would come alone. This is now fixed and NPCs will now properly call for help every time they are aggro'd from a non-aggro state.
Only level 1-17 grey con NPCs will not aggro on the player. Some undead mobs below level 18 will always aggro.
Grey con NPCs will start to assist starting at level 50.
While grey cons will proximity aggro starting at level 18, they will not assist if pulled at a distance until level 50.
Misc errors in the emu code:
(all of these are unlike EQLive)
Demonstar may have fixed these already very recently or will soon, but I'll mention these for illustrative purposes.
The emu code is/was dividing up witness hate between every NPC that sees the cast. This is incorrect and trivializes healing aggro in multi-pulls.
The emu code is/was reducing first-to-aggro witness hate to 1/3rd the normal value. No idea why this is there.
Ripostes in the emu code were specifically made to not aggro. If the mob is hitting you, it's already aggro on you; there was no reason to do this. Using riposte discs to build a large amount of hate used to be something done on raid bosses. (hell, maybe it still is, I don't play Live)
Mezed and stunned NPCs are exempt from witness hate on the emu. It should be reduced, but non-zero.
March 6, 2001 patch note:
– NPCs that are mesmerized or stunned will now only add a very small
amount of hate when they see you cast beneficial spells on their
enemies. Prior to this, they would add full hate when they saw you do
this. This is why NPCs would always jump the cleric after breaking Mez.