Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 04-10-2016, 10:40 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default EverQuest Melee Combat Routines Analyzed and Modeled

Hi again. For those that do not know, I am a developer at The Al'Kabor Project. TAKP is an emu that aims to replicate EverQuest's early Planes of Power era.

This document is everything that I've discovered about EverQuest's melee combat mitigation and avoidance rolls. This was the last major piece the emus were missing to really feel like Live, and I've made significant progress in replicating it. I have this already mostly implemented on TAKP, but we've closed the source recently due to a dispute and our public branch only has this half implemented. EQEmu devs know how to contact TAKP devs if they want to look at my implementation.

This work focuses on classic to PoP era NPCs because that's the era for our server. Everything here applies to Live, however NPCs in later expacs are likely to have higher stats than are plotted here.

A significant potion of this work was done by Demonstar55 and hopefully I've noted every instance of his involvement. Much of my work built off of his and could not have been done without his help, so he deserves his due credit.

Note that I use 'Sony' in this document to refer to what could also be called Verant Interactive or Daybreak Games. Daybreak is what they are now, and (Sony owned) VI is what they were when they designed these mechanics, but Sony owned EQ until recently.

I will at times refer to a somewhat large spreadsheet that I made which has the parsed results of my logs and most of the calculations discussed in this document. I produced hundreds (over 2.6 gigs worth) of logs over the last year and parsed them with a custom lua script that I also wrote which output the data in a way that I could easily paste into the spreadsheet. Many of these logs were overnight or even longer. A log generally needs to be several hours long to be useful; obviously the longer it is, the more accurate the estimates that can be derived from it. Note that, for the sake of brevity, some of the formulae I present in this document will not include much in the way of how I came to them. Check the spreadsheet for some of the illustrative math.

The spreadsheet is located here: https://docs.google.com/spreadsheets...cUHju6ii1SezjM

My logs can be found here: https://drive.google.com/open?id=0B9...WVnakdNS3AzRE0

My lua scripts can be found here: https://drive.google.com/open?id=0B9...mxHMW9EQmsyMGs

The scripts that pertain to this document are 'meleedmg.lua' and 'disim.lua'. These scripts must be executed with a command line Lua interpreter. Note that you can redirect the output to a text file by using the '>' operator at the command line.


AC and ATK Component Stats; End Goals

It's long been known that AC and ATK are a combination of two values: avoidance and mitigation for AC, and to-hit and offense for ATK. The first steps in figuring out how EverQuest calculates melee damage and avoidance were to split these stats into their separate component stats.

The emulators were given a great gift in the form of Dzarn's AC breakdown post in April 2014. This really made much of this possible.

ATK doesn't have a developer post about it, so Demonstar55 decompiled a client and managed to figure out how the stat was calculated precisely. Precision is important because player character component stats are the foundation for everything else in this document. They are the known variables.

Specifically, my end goals were to:
  • Develop a high precision model of EQ's mitigation and avoidance routines.
  • Accurately estimate an NPC's avoidance, mitigation, to-hit, and offense when only knowing the PC's stats plus log parsed miss rates and DI distribution.
  • Develop a high precision model of the player character damage multiplier.


Calculating Player Avoidance AC and Mitigation AC

This was straightforward, thanks to Dzarn. Read his post for details. I was able to calculate AC with absolute precision which allows me to calculate sheet AC, worn AC, agility, or defense skill even if I were missing one of the four.

The values we want in particular are the mitigation AC ('ACSum' in Dzarn's post) and avoidance AC ('ComputedDefense').

Ignoring some important things, like buffs, AAs, and heroic stats, the simplified formulae are these:

MitigationAC = INT(DefenseSkill / 3) + INT(WornAC * 4 / 3) + INT(if Agility > 70 then Agility / 20 else 0)
AvoidanceAC = INT(DefenseSkill * 400 / 225) + INT(8000 * (Agility - 40) / 36000) + AvoidanceStat
SheetAC = INT(1000 * (MitigationAC + AvoidanceAC) / 847)

Note that these are accurate for Live servers. The avoidance bonus calculated from agility is different in TAKP's client, so it's clear that agility's affect on avoidance AC has changed since Planes of Power; otherwise the equations match our client.


Calculating Player Offense, To-Hit and ATK

A player character's offense value (not to be confused with the offense skill, which actually just increases to-hit) is calculated using this algorithm: (again, full credit to Demonstar55 for both of these)

Code:
if WeaponSkill > 0 then
	Offense += WeaponSkill
	
if SkillUsed == ARCHERY or SkillUsed == THROWING then
	StatBonus = Dexterity
else
	StatBonus = Strength
	
if StatBonus >= 75 then
	Offense += (2 * StatBonus - 150) / 3
	
if IsSpellAffectingPC(2434) then	// ST avatar proc
	SpellAtk -= 100
	ItemAtk += 100
end

Offense += SpellAtk
if ItemAtkCap < ItemAtk then
	ItemAtk = ItemAtkCap
	
Offense += ItemAtk
Offense += GetLeadershipBonus()

if Class == RANGER and Level > 54 then
	Offense += Level * 4 - 216;

if Offense > 0
	return Offense
else
	return 1

Player character to-hit is calculated thusly:

Code:
ToHit = OffenseSkill + 7
ToHit += WeaponSkill

if Class == WARRIOR and IsBerserk() then
	toHit += 2 * GetLevel() / 5;

Drunk = Intoxication / 2
if Drunk > 20 then
	Redux = 110 - Drunk
	if Redux > 1
		Redux = 1
	ToHit *= Redux
end

if ToHit > 0 then
	return ToHit
else
	return 1
Types and rounding/truncating left out for simplicity.

The client's sheet ATK is: INT((ToHit + Offense) * 1000 / 744)

AC displayed in the client also has a similar multiplier applied at the end. Server calculations do not appear to do that extra step. Dzarn called it 'obfuscation', so Sony might have done it to hide some of their logic.

You may also notice that the Accuracy stat is not factored into the sheet ATK value. I don't know why that is.

These functions are accurate for Live and also TAKP's Planes of Power era client as far as I can tell.


Player vs. Player Avoidance

The obvious next step at this point is to produce logs of PvP combat with known statistics for the attacker and defender. I generated many multi-hour logs against a target with incremental avoidance AC values at four different to-hit values, using level 1, level 25, level 50, and level 65 warriors. Here are the results plotted on a graph:


http://imgur.com/wmNjeIV


There are three important conclusions we can make from the data:
  • Avoidance AC == To-Hit != 50% hit rate as one might expect. The 50% mark is at To-Hit * 1.2 == Avoidance AC, or To-Hit == Avoidance AC / 1.2.
  • The function is linear before 50% and curved after.
  • The curve when avoidance > to-hit resembles y = 1 / X.

At this point I was left wondering if this 1.2 multiplier applied only to PvP or not. Not having even one example of an NPC with known statistics makes verification difficult. I do however think it likely that it also applies to PvE because:
  • It's clear from parsing pets that pets vs NPCs use the same calculation as PCs vs NPCs.
  • NPC to-hit estimates end up extremely close to the to-hit levels of a player character using the old skill formulas. (level * 5 + 5)
  • SoD mage pets had some of their stats pasted by a dev years ago. These stats don't include what they get from base skills, but they include the extra AC and ATK on top of it. When I parsed the Air pet vs the Fire pet and calculated estimates for their to-hits, the gap between the two was as expected when I accounted for the 1.2 multiplier but not when I excluded it. When I parsed them on an NPC, the gap was as expected when the NPC's avoidance was estimated using the multiplier.

The next step was to develop a model that would produce values that matched all of the parsed log data and accurately predict values at any given to-hit and avoidance rate inputs.

After some trial and error I settled on splitting my model into two functions: one for < 50% hit rate and one for > 50%. Maybe somebody better at math could consolidate them into one function, but this worked well enough that I moved on. Obviously I have no idea if Sony's algorithm is split in half or not.

Here is my model:

Code:
AvoidanceMod = round( (AvoidanceAC - ToHit) / (max(floor(ToHit / 10, 1)) + 1) )
AvoidanceAC -= AvoidanceMod

if (ToHit * 1.2 > AvoidanceAC) then
	
	MissRate = (AvoidanceAC - AvoidanceMod) / (ToHit * 1.2 * 2)
	AvoidanceAC = ToHit * 1.2 * MissRate * 2 + AvoidanceMod
	ToHit = (AvoidanceAC - AvoidanceMod) / MissRate / 2 / 1.2
else
	
	MissRate = 1 - ToHit * 1.2 / ((AvoidanceAC - AvoidanceMod) * 2)
	AvoidanceAC = ToHit * 1.2 / (1 - MissRate) / 2 + AvoidanceMod
	ToHit = (AvoidanceAC - AvoidanceMod) * (1 - MissRate) * 2 / 1.2
end
Not to boast, but this works so well that I don't think it would be possible to tell the difference between this and Sony's code when parsing without making obscenely long logs. The above graph shows the results of this model vs. actual parsed logs.

The 'AvoidanceMod' was something I came up with after noticing that the results did not fit perfectly even after multiplying to-hit by 1.2. This was particularly noticeable at very low levels. It seems Sony's code has a modifier that reduces the impact of a large disparity between to-hit and avoidance.

Note that hit/miss rates must exclude avoidance from combat skills. You can calculate the 'actual' hit and miss rates by doing the following:

Actual hit rate = (DodgeRate + ParryRate + MissRate) * (HitsLanded / (HitsMissed + HitsLanded)) + HitsLanded
Actual miss rate = (DodgeRate + ParryRate + MissRate) * (HitsMissed / (HitsMissed + HitsLanded)) + HitsMissed


Estimating Avoidance from To-Hit and Miss Rate

Once you have a function that can calculate Z from X and Y, it's a matter of simple algebra to come up with functions that can calculate X from Z and Y and Y from Z and X. Since player to-hit is knowable and miss rates are parsable, we have two of the three required to estimate attacking NPC to-hit. (and also NPC avoidance)

Code:
if HitRate > 0.5 then
	AvoidanceMod = (0.5 - HitRate) * 20
else
	AvoidanceMod = 1 / (HitRate / 6.56) - 10
end

if HitRate > 0.5 then
	EstAvoidance = MissRate * ToHit * 1.2 * 2 + AvoidanceMod
else
	EstAvoidance = ToHit / HitRate * 1.2 / 2 + AvoidanceMod
end
AvoidanceMod had to be estimated using an original function from hit/miss rate, since AvoidanceMod in my model requires knowing both avoidance and to-Hit. This produces an imprecise but reasonably close estimate of AvoidanceMod.

Using this simple algorithm, I went around and parsed random NPCs in the game and calculated their avoidance AC estimates. I accomplished that by charming them and casting a high level regen spell on them so I could produce multi-hour logs. I also parsed the Azia dummy in the neighborhood guild hall, which is supposed to have stats similar to classic NPCs.


http://imgur.com/D0FFh1l


PoP NPCs and Arena Dummies typically have higher combat statistics than classic NPCs which is why I split them, ("classic" meaning NPCs up through Luclin) but in the case of avoidance AC, they appear the same except for the late 40s NPCs. Avoidance AC increases linearly up to about level 43 when it stays flat to level 50, then jumps after 50. This pattern is also seen in other stats like to-hit. Azia dummies clearly do not follow the same trend as regular NPCs for avoidance.

It's important to note that even if I'm wrong about the 1.2 multiplier applying in PvE, the resulting avoidance AC and to-hit estimates parsed from NPCs using these algorithms would also end up such that combat in the emu would still mimic Live accurately because the NPC avoidance estimates would be lower.

I also ran some parses with agility debuffs on NPCs to try and see how they would alter the avoidance result. Negative agility does in fact reduce NPC avoidance, and seemingly by the amount it would on a PC, or nearly as much. (-AGI * 0.22222) There did not appear to be a cap on this reduction, either: on very low level NPCs, the reduction was not mitigated even with large agility debuffs. The level 5 Azia dummy went from an estimated 40-44 avoidance to an estimated 2 avoidance with a -187 debuff, and a level 4 kobold went from ~43 to ~15 with a -100 debuff. For PCs with zero agility, the avoidance penalty is capped at either -8 or -9. (depending on how Sony rounds) This would suggest that a great deal of NPC avoidance comes from agility and that NPCs have a lot of agility, or that NPC stats can go negative, or that NPCs use a different calculation. This also unfortunately makes attempting to figure out how much defense skill the NPC has impossible, if they get a defense skill.


Estimating To-Hit from Avoidance and Miss Rate

Code:
if HitRate > 0.5 then
	AvoidanceMod = (0.5 - HitRate) * 20
else
	AvoidanceMod = 1 / (HitRate / 6.56) - 10
end

if HitRate > 0.5 then
	ToHit = (AvoidanceAC - AvoidanceMod) / 1.2 / MissRate / 2
else
	ToHit = (AvoidanceAC - AvoidanceMod) * MissRate / 1.2 * 2
end

http://imgur.com/EPVvcnf


For NPC to-hit, you can also see where the slope becomes almost flat around level 43 to 50 before jumping up at 51 and remaining relatively flat. You can also see a clear difference between classic and PoP+Dummy NPCs.

The two Velious outliers were An Icepaw champion and An icy watcher in Velketor's Labrynth. I surmise that Sony granted some NPCs extra accuracy, like pets also have extra atk. Interestingly Kelorek`Dar in cobalt scar had an unremarkable to-hit. The PoP outlier was a NPC in Solusek's Tower. Check the spreadsheet for the NPC names associated with the data.

The old skillup formula for melee weapon skills (and how it is for TAKP) was level * 5 + 5. Offense skill was the same for warriors, but hybrids did not get the + 5. Current Live sub-51 NPC to-hits actually match almost precisely with old ranger to-hits: rangers (with maxed skills) had a to-hit of level * 10 + 5 + 7 up to level 42, when their offense skill capped. It's clear that live server NPCs are mimicking the old skill caps instead of the current player character skill caps.

The plateaus at 43-50 and 51+ also match very closely to what an old melee class's to-hit would be. An old warrior or ranger capped out at 210 offense skill and 200 weapon skill in classic, which would result in 417 to-hit. The second plateau matches a 60 warrior's to-hit, which was 252+250+7=509. 51+ player characters had their caps raised a few points per level however, not all at level 51.
Reply With Quote
  #2  
Old 04-10-2016, 10:42 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default

Player vs. Player Mitigation

Before I get into the mitigation data, I need to explain some things.

In EverQuest, melee damage rolls are one of twenty possible values. (I assume this is loosely modeled after Dungeons and Dragons somehow) Player characters also get an additional random multiplier on top of the d20 roll most of the time, but both NPCs and PCs will roll a d20 on melee hits. NPC hits that are not mitigated by vie buffs, rune buffs, disciplines, the innate warrior mitigation, or shielding equipment will always roll one of the same twenty possible values.

Melee damage hits can also be described using two values: the "damage bonus" and the "damage interval". These are two terms long ago made up by the EverQuest community. (see old Steel Warrior threads) The damage bonus, or DB, is what you expect it to be-- simply a flat value added to the damage. The damage interval or DI is the value multiplied with the d20 roll. (note: DI * d20 is rounded) For example, Cazic Thule (in fearplane) has a min hit of 220 and a max hit of 600. His DB is 200 and his DI is 20. 1 * 20 + 200 = 220 and 20 * 20 + 200 = 600. This also applies to player character damage before the PC damage multiplier is applied. More on that later.

For the rest of this document, I will refer to the maximum hit as DI20 and the minimum hit as DI1.

The probability distribution of rolling one of these twenty values follows a shallow bell curve such that DI10 and DI11 will appear more frequently than other values except for DI1 or DI20 when offense == mitigation. DI1 and DI20 appear the most frequently because the ends of the bell curve are compressed into those intervals. When offense == mitigation, DI1 and DI20 will both parse slightly higher than 15%. I call this the "double 15 point".

When offense == mitigation, the curve looks like this: (note this is likely unequal a smidge; it's hard to be certain)

Code:
Lvl61War 224wAC 1061AC 273def 126agi backface Lvl60NPCTestSixty.txt
1] 102: 6694 (15.2%)
2] 119: 1171 (2.6%)
3] 135: 1387 (3.1%)
4] 152: 1483 (3.3%)
5] 168: 1558 (3.5%)
6] 184: 1735 (3.9%)
7] 201: 1772 (4%)
8] 218: 1898 (4.3%)
9] 235: 2068 (4.7%)
10] 251: 2125 (4.8%)
11] 267: 2206 (5%)
12] 284: 2048 (4.6%)
13] 300: 1888 (4.2%)
14] 317: 1808 (4.1%)
15] 333: 1635 (3.7%)
16] 350: 1593 (3.6%)
17] 367: 1456 (3.3%)
18] 383: 1370 (3.1%)
19] 400: 1307 (2.9%)
20] 416: 6778 (15.4%)

Knowing this much, we can estimate NPC offense values by simply parsing logs at varying mitigation AC values until we find the mitigation value that strikes the double 15 point. I did this for arena dummies since those proced heals making log production easy, however the goal is to be able to parse raid bosses and a wide variety of NPCs. For that to be practical, I needed to come up with a model that predicts the DI probability distribution from a single log. To accomplish that, I made many PvP logs with known mitigation and offense values, like I did for avoidance.

There is one quirk with PC damage that made this possible: when PC offense is less than 115, the damage multiplier is not applied; this means that players with less than 115 offense will only roll one of twenty possible damages just like NPCs.

Here are the results at 100 offense:


http://imgur.com/1bNBICI


You can immediately see that the double 15 point is not at 100 mitigation. There appears to be a 1.25 offense multiplier or a 1.25 mitigation divisor in PvP. Unlike avoidance, I think it highly likely that this is in PvP only. Here is why:
  • The pet Elementaling Earth's double 15 point on my player character was at ~77 mitigation AC. It also just happened to of parsed double 15s on the arena target dummy 'Test Twenty', which was ~77 mit ac when I parsed that NPC using a player character.
  • Dzarn once posted the following: "Ignoring a lot of factors, at the most basic level if you have a 1:1 of mitigation v offense then a reverse bell curve of rolls is created."
  • The gap between my Aspect of Air and Aspect of Fire offense estimates resulted in the expected value (~104) when the multiplier was removed.
  • Azia dummies list their AC values. I assume this value to be their 'NPCBaseAC' as Dzarn mentioned. The double 15 point for level 50 0 AC Azia was 74 offense. Estimating that same dummy without the multiplier also results in 74, and estimating the dummy with 110 AC resulted in a mitigation estimate of 184.

I came up with some simple functions that mimicked part of the DI1 and DI20 curves for use in estimating NPC offense and mitigation. The output of which compared to actual parsed logs is in the above graph. It will only return reasonably accurate estimates when the probabilities are within 5% to 35% or so. Note that this is intended to calculate NPC offense and mitigation estimates only and not for use in emu combat calculations. A more accurate model for the latter will be outlined later in this document.

Here are the functions I devised to predict values when offense is 100. This applies to PvP only:

Code:
DI1Probabiliy = Mitigation / Offense / 4.71 - 0.11
Offense = Mitigation / (DI1Probability + 0.11) / 4.71
Mitigation = 4.71 * (DI1Probability + 0.11) * Offense

DI20Probabiliy = Offense / Mitigation / 3.05 - 0.11
Offense = (DI20Probability + 0.11) * Mitigation * 3.05
Mitigation = Offense / (D20 + 0.11) / 3.05
This works well even at higher offenses, but at very low levels it starts fitting worse. 100 offense is about what a level 15 PC or NPC might have, so it works well for just about everything. Again, the big problem with this model is that these only work when the DI1/DI20 probabilities are between 5-35% or so.

That's kind of useless however because to estimate NPC values, we need to remove the 1.25 multiplier. In the following sections I will explain how I estimate NPC mitigation and offense using versions of these functions without the 1.25 multiplier.


Estimating NPC Mitigation from PC Offense and DI Probability

Code:
Mitigation = 4.71 * (DI1Probability + 0.11) * Offense * 1.25
Mitigation = Offense / 1.25 / (D20Probability + 0.11) / 3.05
The above functions will provide reasonable estimates for NPC mitigation if DI1 or DI20 are within ~5-35% and offense is somewhere around 100 but below 115.

This is the most problematic of the four to estimate, because of the PC damage multiplier at 115 offense and because production of these logs requires heals on the NPC to keep it alive. Parsing very high AC NPCs is not possible with this method because 114 offense only parses accurately up to roughly 200 mitigation.

For common NPCs, I use charm and cast a high level regeneration spell on it; for raid bosses I simply deaggro and allow it to regenerate naturally. I leveled up a shadowknight to level 90 but kept weapon skills at or below 100 so I could parse NPCs up to level 66 without my weapon skills going up.

I also parsed Azia dummies (mostly) using the more tedious method of targeting the double 15 point by adjusting my offense until a produced a double 15 log. While more tedious, the results are a bit more accurate.


http://imgur.com/pMlsMJg


The classic NPCs and the Azia dummy had a slight exponential curve. Interestingly and coincidentally all the common NPCs I parsed seemed to cap out at around 200 mitigation. 200 mitigation is actually slightly outside the 5-35% I warned about at 114 offense, so those estimates are a bit less accurate. Some of these NPCs could have potentially had defiant gear as well, which I usually did not check for. (not all NPCs wear their inventories however) The noticeable outlier for classic NPCs was a sebilite golem, which had no defiant armor. That NPC either has extra AC, I erred somehow, or the RNG was particularly streaky for that log. I am unwilling to devote the time to investigate that result.

The Azia dummy mitigations at 0 AC may indicate a value resulting from defense skill + agility mitigation, but that is lower than what a PC's mitigation would be from defense skill alone and has a different slope.

The results when parsing NPCs with agility debuffs on them were inconclusive. I only did three NPCs because of how tedious they are to produce. The results indicated either no change to mitigation or a very small one. The margins of error are simply too high. A 60 agil buff would be more easily noticed on very low level NPCs however, so I parsed a fire beetle. From that parse it does seem that agility modifies mitigation, but I can't say by how much other than 'very little'.

It's worth mentioning that Dzarn has said that "most of the creatures in game don't exceed 600 AC". The problem I have is that the avoidance + mitigation ceilings I estimate combine to result in ~660 AC and that's before applying the 'obfuscation' multiplier that clients do. This may indicate an error in my conclusions somewhere.


Estimating NPC Offense from PC Mitigation and DI Probability

Code:
Offense = Mitigation / (DI1Probability + 0.11) / 4.71 * 1.25
Offense = (DI20Probability + 0.11) * Mitigation * 3.05 * 1.25
The best way to estimate NPC offense is to tank the NPC having mitigation AC somewhat close to what you believe its offense to be, which allows both DI1 and DI20 estimates to be usable. Keeping your tank's AC below the softcap is preferable, otherwise more math is involved. (see next section)

Here are the results of NPCs that I've parsed:


http://imgur.com/c5ipFez


Some conclusions we can make from this:

It's clear that NPCs at the same level may have differing offense values, but this is uncommon below level 40 or 50. A froglok krup knight actually parsed higher in offense than a froglok ilis knight and a froglok reet knight. (see spreadsheet for data)

Offense is linear up to level 29 before becoming less predictable. Levels 1-5 had a slightly different slope than 9-29.

The level ~43 to 50 plateau for classic NPCs is visible before increasing again. There is no absolute ceiling like mitigation and avoidance seem to have, which is expected.

Not shown on this graph, but atk debuffs lowered the offense by the amount expected: -1 offense per -1 atk. Atk debuffs work better than players might expect since internal calculations do not do the client 'obfuscation' multiplier.

I also parsed some NPCs with strength buffs and debuffs on them. Strength spells indisputably modify NPC offense significantly, and by the same amount as it does for PCs. (offense == 2/3rds the amount of strength above 75) A fire beetle with a 68 strength buff went from 10-11 offense to ~57 for example. Unlike agility and avoidance, low strength does not impose an offense penalty; this makes attempting to calculate NPC strength values from debuffed NPC parses possible.

There is a floor as to how much strength debuffs reduce offense-- this may indicate how much offense comes from skill(s), or otherwise how much offense comes from level alone. This floor seems to be something close to level * 5.5 - 5. Even the PoP NPC I parsed had this floor. The level 55 and level 60 NPCs plotted on that graph which have a lower than usual offense are a froglok reet knight and a shik`nar warrior-- strength debuffs reduced their offense much less than other NPCs I parsed, suggesting that they have lower than typical strength. I surmise that the floor is when the NPC hits 75 strength, at which point no extra offense is granted. (which is how it is for PCs) If this theory is correct, then it allows us to estimate NPC strength values, assuming the NPC has no +atk.

When a strength and atk debuff is applied simultaneously, the strength is debuffed first and the offense reduction is capped to the floor, then the atk debuff is applied, so they do stack. Atk debuffs do not have a floor and will take an NPC down to 1 offense if the atk debuff is strong enough.

I also attempted to try and find a strength cap for NPCs with the following results:
  • Rathe's Son (mage pet) with Maniacal Strength + Burnout IV (+128 STR) resulted in the expected ~+85 offense.
  • Greater Conjuration Earth (mage pet) with Maniacal Strength + Burnout IV (+128 STR) resulted in the expected ~+85 offense.
  • Greater Conjuration Earth (mage pet) with Maniacal Strength + Burnout IV + Focus of Soul + Strength of the Diaku (+230 STR) resulted in the expected ~+153 offense.
  • Greater Conjuration Earth (mage pet) with Maniacal Strength + Burnout V + Focus of Soul + Strength of the Diaku + Ferine Avatar (+390 STR +180 ATK) resulted in the expected ~+440 offense.
  • Defender Kealren (level 55 Shadowhaven NPC) with Focus of Soul + Strength of the Diaku (+110 STR) resulted in the expected ~+73 offense.
  • Defender Kealren (level 55 Shadowhaven NPC) with Cripple (-105 STR at my level) resulted in the expected ~-70 offense.

The results do not indicate a statistic cap for NPCs.

I selected the Shadowhaven guard because it parsed an unusually high offense, which I estimated at 220 strength. Cripple did not take it to the 'floor' value; this suggests that all of that NPC's offense above the debuff floor comes from strength (and not atk) and that its strength value is not capped at 255, assuming that NPCs use the same offense function as PCs.

Interestingly, Va Dyn Khar in Vex Thal, (not on the graph) parsed around 370 offense which is lower than some common NPCs. I also parsed Lord Nagafen before they gave him the mitigation of the mighty buff, and his offense clocked in around 540-- that would be the offense equivalent to having (for a level 55 NPC) 363 strength, or 255 strength and +122 atk, or 138 strength and +200 atk, or 213 strength and +150 atk. I can't say what he had in his inventory.


The AC Softcap

Adjusting for, or avoiding altogether, the AC softcap is important when doing these calculations. Demonstar has provided me with a client decompile of the softcap algorithm from an older client (nice of Sony to put it in the client) which is of course extremely valuable. Since it's different in modern clients I won't post it here. TAKP's public branch has it.

The softcap threshold for a level 65 or under warrior is 430, and it's 403 for knights. These values increase after level 65 in modern clients. In demonstar's decompile, the returns are divided by 3 at level 65 for warriors, but in Dzarn's AC thread, he says that warrior AC is multiplied by 0.35, so I've been doing that for Live parses. I could clearly see the bend in the DI probabilities at 430 mitigation when I parsed and graphed Live logs.

So for example, if your level 65 warrior PC has 1200 mitigation AC and no AAs, then his true mitigation would be (1200-430)*0.35+430=699.

The Combat Stability AA increases this cap just as the description says: if you have say, rank 8 of this AA, then the warrior's softcap would be 430*1.27=546. Physical enhancement is an additional 2%. Combat Agility multiplies your avoidance AC similarly. I was able to confirm this from parses.

If you parse logs on Sony's Test server, you can /resetaa once each time you zone/log in. You should buy some non-combat AA like Eyes Wide Open after you reset to ensure that the server turns all the AAs off.


The Player Character Damage Multiplier

As I mentioned previously in this document, PCs get an extra damage multiplier on top of the d20 * DI damage that NPCs and PCs roll, which is why PCs don't typically do only 20 damage values like NPCs do. This multiplier may only happen when offense is >= 115.

One of the goals I set out to accomplish was to better determine how PC damage was calculated. I had actually come up with an accurate model after a lot of effort, then a few months later somebody pasted actual Sony code which overnight made it obsolete. The code paste is here: https://forums.daybreakgames.com/eq/...-to-do.229581/

That snippet is missing the 115 threshold, which I can assure you exists, but what's really valuable from that snippet are how the 'damage table' is calculated (it's not really a 'table' but a multiplier cap) and the roll chances to apply the multiplier per attack, both of which change at varying level tiers and are different for monks. The chance roll is also missing.

In that code, attack is the offense value I talk about in this document. dmg_d is the d20 * DI damage and does NOT include the damage bonus. maxextra would be the 'damage table' that's commonly been mentioned over the years when discussing PC damage. chance is the chance to NOT roll the multiplier.
Reply With Quote
  #3  
Old 04-10-2016, 10:43 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default

Modeling the d20 Algorithm

We now have all the pieces we need to emulate melee combat in EverQuest except one, which is sort of like the keystone to the whole system: rolling d20 from offense and mitigation.

As I mentioned above, the probability distribution for the 20 possible damage values is a shallow bell curve with the ends compressed. For TAKP, I have replicated this curve by employing the Box-Muller Transform to generate a gaussian distribution, which I snatched from here.

Here is the algorithm I came up with, in lua:

Code:
function RollD20(offense, mitigation)
	local diff, mult1, mult2;

	mitigation = mitigation - (mitigation - offense) / 2;
	diff = offense - mitigation;
	if ( offense > 30 ) then
		mult1 = offense / 200 + 25.75;
		if ( mitigation / offense < 0.35 ) then
			mult1 = mult1 + 1;
		elseif ( mitigation / offense > 0.65 ) then
			mult1 = mult1 - 1;
		end
	else
		mult1 = 11.5 + offense / 2;
	end
	if ( offense > 30 ) then
		mult2 = offense / 140 + 18.5;
	else
		mult2 = 14 + offense / 6;
	end
		
	local mean = 0;

	if ( offense > mitigation ) then
		mean = diff / offense * mult1;
	elseif ( mitigation > offense ) then
		mean = diff / mitigation * mult2;
	end

	local stddev = 8.8;
	local theta = 2 * math.pi * math.random();
	local rho = math.sqrt(-2 * math.log(1 - math.random()));
	local d = mean + stddev * rho * math.cos(theta);
	
	if ( d < -9.5 ) then
		d = -9.5;
	elseif ( d > 9.5 ) then
		d = 9.5;
	end
	d = d + 11;
	d = math.floor(d);
	return d;
end
This mimics the curve fairly accurately, but not precisely. The mean and standard deviation were derived from some thought plus trial and error. I'm not a math genius so perhaps somebody else with more mathematical ability can come up something better, although it's close enough that players won't notice a difference.

Sony's d20 algorithm seems to have some sort of modifier that reduces the impact of disparity at very low levels, like avoidance has. The mess of code that calculates mult1 and mult2 was intended to compensate for this modifier that I was unable to figure out with precision. This code is the result of many, many simulations ran against a couple hundred logs of varying mitigation and offense values.

Here is how output from this function compares to an actual log:

Code:
Lvl61War 224wAC 1061AC 273def 126agi backface Lvl60NPCTestSixty.txt
1] 102: 6694 (15.2%)
2] 119: 1171 (2.6%)
3] 135: 1387 (3.1%)
4] 152: 1483 (3.3%)
5] 168: 1558 (3.5%)
6] 184: 1735 (3.9%)
7] 201: 1772 (4%)
8] 218: 1898 (4.3%)
9] 235: 2068 (4.7%)
10] 251: 2125 (4.8%)
11] 267: 2206 (5%)
12] 284: 2048 (4.6%)
13] 300: 1888 (4.2%)
14] 317: 1808 (4.1%)
15] 333: 1635 (3.7%)
16] 350: 1593 (3.6%)
17] 367: 1456 (3.3%)
18] 383: 1370 (3.1%)
19] 400: 1307 (2.9%)
20] 416: 6778 (15.4%)
Code:
Simulated DI Probabilities using Offense 100, Defense 100, Rolls 1000000
1] 15.28%
2] 2.85%
3] 3.16%
4] 3.43%
5] 3.71%
6] 3.98%
7] 4.18%
8] 4.34%
9] 4.44%
10] 4.55%
11] 4.51%
12] 4.49%
13] 4.37%
14] 4.20%
15] 3.96%
16] 3.76%
17] 3.45%
18] 3.15%
19] 2.83%
20] 15.34%
My function is slightly flatter, but that's the closest I could get it.

Another interesting result from both Sony's and my mitigation functions is that at extreme offense/mitigation disparity, the results end up with a maximum DI1 or DI20 probability of 75%. When I parsed a level 50 NPC with a level 1 armorless character for example, the DI20 probability was 74.6%. A level 1 kobold runt also parsed at roughly 75% DI1 on a time geared warrior.

Before the source code was pasted, I was able to figure out the player character damage multiplier roll chances by attacking Test Ten with a very high atk, knowing that DI20 would be 75%; simply multiplying the modal hit chance by 1.3333 (100% / 75%) will give you the approximate chance to not roll the multiplier because a modal hit at very high atk almost certainly means that the multiplier was not rolled.

One of the tools I created in this endeavor was to model the combat system in a lua script so that I could easily run simulations to compare actual parsed data with. (disim.lua) Here is the above algorithm compared with parsed Live data from 182 multi-hour logs:

Code:
a kobold runt lvl 1 - Offense: 5;  Mitigation: 1;  Effective Mitigation: 1.0;  Mit Mod: -2.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 05.00%;  Simulated  DI1: 04.87% (-0.1)
Real DI20: 34.80%;  Simulated DI20: 35.01% (0.2)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 2;  Effective Mitigation: 2.0;  Mit Mod: -1.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 08.70%;  Simulated  DI1: 06.69% (-2.0)
Real DI20: 30.30%;  Simulated DI20: 29.29% (-1.0)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 3;  Effective Mitigation: 3.0;  Mit Mod: -1.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 12.90%;  Simulated  DI1: 09.03% (-3.9)
Real DI20: 18.70%;  Simulated DI20: 24.06% (5.4)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 4;  Effective Mitigation: 4.0;  Mit Mod: -0.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 16.90%;  Simulated  DI1: 11.93% (-5.0)
Real DI20: 17.00%;  Simulated DI20: 19.36% (2.4)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 5;  Effective Mitigation: 5.0;  Mit Mod: 0.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 16.30%;  Simulated  DI1: 15.37% (-0.9)
Real DI20: 15.00%;  Simulated DI20: 15.32% (0.3)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 6;  Effective Mitigation: 6.0;  Mit Mod: 0.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 18.70%;  Simulated  DI1: 19.18% (0.5)
Real DI20: 13.80%;  Simulated DI20: 11.97% (-1.8)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 10;  Effective Mitigation: 10.0;  Mit Mod: 2.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 30.00%;  Simulated  DI1: 32.21% (2.2)
Real DI20: 06.50%;  Simulated DI20: 05.68% (-0.8)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 15;  Effective Mitigation: 15.0;  Mit Mod: 5.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 43.20%;  Simulated  DI1: 42.79% (-0.4)
Real DI20: 01.80%;  Simulated DI20: 03.13% (1.3)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 20;  Effective Mitigation: 20.0;  Mit Mod: 7.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 50.90%;  Simulated  DI1: 49.51% (-1.4)
Real DI20: 00.30%;  Simulated DI20: 02.10% (1.8)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 26;  Effective Mitigation: 26.0;  Mit Mod: 10.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 53.60%;  Simulated  DI1: 54.73% (1.1)
Real DI20: 00.40%;  Simulated DI20: 01.53% (1.1)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 30;  Effective Mitigation: 30.0;  Mit Mod: 12.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 58.70%;  Simulated  DI1: 57.33% (-1.4)
Real DI20: 00.00%;  Simulated DI20: 01.29% (1.3)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 35;  Effective Mitigation: 35.0;  Mit Mod: 15.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 60.30%;  Simulated  DI1: 59.50% (-0.8)
Real DI20: 00.00%;  Simulated DI20: 01.11% (1.1)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 39;  Effective Mitigation: 39.0;  Mit Mod: 17.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 57.20%;  Simulated  DI1: 60.98% (3.8)
Real DI20: 00.00%;  Simulated DI20: 01.00% (1.0)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 43;  Effective Mitigation: 43.0;  Mit Mod: 19.0  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 58.70%;  Simulated  DI1: 62.29% (3.6)
Real DI20: 00.00%;  Simulated DI20: 00.91% (0.9)
------------------------------------------------------------------
a kobold runt lvl 1 - Offense: 5;  Mitigation: 1253;  Effective Mitigation: 718.0;  Mit Mod: 356.5  Mult1: 14.0;  Mult2: 14.8
Real  DI1: 78.70%;  Simulated  DI1: 73.81% (-4.9)
Real DI20: 00.00%;  Simulated DI20: 00.36% (0.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 1;  Effective Mitigation: 1.0;  Mit Mod: -4.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 01.04%;  Simulated  DI1: 03.08% (2.0)
Real DI20: 46.90%;  Simulated DI20: 42.93% (-4.0)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 2;  Effective Mitigation: 2.0;  Mit Mod: -4.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 02.61%;  Simulated  DI1: 03.78% (1.2)
Real DI20: 44.10%;  Simulated DI20: 39.26% (-4.8)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 3;  Effective Mitigation: 3.0;  Mit Mod: -3.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 02.26%;  Simulated  DI1: 04.65% (2.4)
Real DI20: 40.48%;  Simulated DI20: 35.74% (-4.7)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 5;  Effective Mitigation: 5.0;  Mit Mod: -2.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 06.47%;  Simulated  DI1: 06.77% (0.3)
Real DI20: 27.98%;  Simulated DI20: 29.03% (1.1)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 6;  Effective Mitigation: 6.0;  Mit Mod: -2.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 08.92%;  Simulated  DI1: 08.10% (-0.8)
Real DI20: 24.77%;  Simulated DI20: 25.94% (1.2)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 7;  Effective Mitigation: 7.0;  Mit Mod: -1.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 07.95%;  Simulated  DI1: 09.62% (1.7)
Real DI20: 23.30%;  Simulated DI20: 22.92% (-0.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 9;  Effective Mitigation: 9.0;  Mit Mod: -0.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 12.83%;  Simulated  DI1: 13.20% (0.4)
Real DI20: 16.17%;  Simulated DI20: 17.70% (1.5)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 10;  Effective Mitigation: 10.0;  Mit Mod: 0.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 14.97%;  Simulated  DI1: 15.34% (0.4)
Real DI20: 14.69%;  Simulated DI20: 15.30% (0.6)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 11;  Effective Mitigation: 11.0;  Mit Mod: 0.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 14.12%;  Simulated  DI1: 17.39% (3.3)
Real DI20: 13.93%;  Simulated DI20: 13.41% (-0.5)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 13;  Effective Mitigation: 13.0;  Mit Mod: 1.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 19.27%;  Simulated  DI1: 21.57% (2.3)
Real DI20: 09.65%;  Simulated DI20: 10.45% (0.8)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 14;  Effective Mitigation: 14.0;  Mit Mod: 2.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 21.96%;  Simulated  DI1: 23.39% (1.4)
Real DI20: 09.18%;  Simulated DI20: 09.34% (0.2)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 15;  Effective Mitigation: 15.0;  Mit Mod: 2.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 20.94%;  Simulated  DI1: 25.33% (4.4)
Real DI20: 08.77%;  Simulated DI20: 08.36% (-0.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 17;  Effective Mitigation: 17.0;  Mit Mod: 3.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 26.11%;  Simulated  DI1: 28.70% (2.6)
Real DI20: 05.97%;  Simulated DI20: 06.94% (1.0)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 18;  Effective Mitigation: 18.0;  Mit Mod: 4.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 28.85%;  Simulated  DI1: 30.36% (1.5)
Real DI20: 05.77%;  Simulated DI20: 06.31% (0.5)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 19;  Effective Mitigation: 19.0;  Mit Mod: 4.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 27.42%;  Simulated  DI1: 31.96% (4.5)
Real DI20: 07.48%;  Simulated DI20: 05.73% (-1.8)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 21;  Effective Mitigation: 21.0;  Mit Mod: 5.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 36.60%;  Simulated  DI1: 34.77% (-1.8)
Real DI20: 05.08%;  Simulated DI20: 04.90% (-0.2)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 22;  Effective Mitigation: 22.0;  Mit Mod: 6.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 38.60%;  Simulated  DI1: 36.26% (-2.3)
Real DI20: 04.89%;  Simulated DI20: 04.55% (-0.3)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 25;  Effective Mitigation: 25.0;  Mit Mod: 7.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 41.37%;  Simulated  DI1: 39.68% (-1.7)
Real DI20: 03.30%;  Simulated DI20: 03.71% (0.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 30;  Effective Mitigation: 30.0;  Mit Mod: 10.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 46.90%;  Simulated  DI1: 44.82% (-2.1)
Real DI20: 01.72%;  Simulated DI20: 02.80% (1.1)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 35;  Effective Mitigation: 35.0;  Mit Mod: 12.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 48.37%;  Simulated  DI1: 48.63% (0.3)
Real DI20: 00.96%;  Simulated DI20: 02.24% (1.3)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 41;  Effective Mitigation: 41.0;  Mit Mod: 15.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 53.35%;  Simulated  DI1: 52.40% (-0.9)
Real DI20: 00.10%;  Simulated DI20: 01.77% (1.7)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 45;  Effective Mitigation: 45.0;  Mit Mod: 17.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 54.96%;  Simulated  DI1: 54.38% (-0.6)
Real DI20: 00.00%;  Simulated DI20: 01.55% (1.6)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 50;  Effective Mitigation: 50.0;  Mit Mod: 20.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 57.39%;  Simulated  DI1: 56.57% (-0.8)
Real DI20: 00.00%;  Simulated DI20: 01.36% (1.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 55;  Effective Mitigation: 55.0;  Mit Mod: 22.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 57.64%;  Simulated  DI1: 58.35% (0.7)
Real DI20: 00.00%;  Simulated DI20: 01.21% (1.2)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 61;  Effective Mitigation: 61.0;  Mit Mod: 25.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 61.83%;  Simulated  DI1: 60.05% (-1.8)
Real DI20: 00.00%;  Simulated DI20: 01.08% (1.1)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 70;  Effective Mitigation: 70.0;  Mit Mod: 30.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 63.63%;  Simulated  DI1: 62.34% (-1.3)
Real DI20: 00.00%;  Simulated DI20: 00.93% (0.9)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 81;  Effective Mitigation: 81.0;  Mit Mod: 35.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 64.39%;  Simulated  DI1: 64.27% (-0.1)
Real DI20: 00.00%;  Simulated DI20: 00.78% (0.8)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 90;  Effective Mitigation: 90.0;  Mit Mod: 40.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 65.53%;  Simulated  DI1: 65.66% (0.1)
Real DI20: 00.00%;  Simulated DI20: 00.72% (0.7)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 101;  Effective Mitigation: 101.0;  Mit Mod: 45.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 67.66%;  Simulated  DI1: 66.86% (-0.8)
Real DI20: 00.00%;  Simulated DI20: 00.65% (0.7)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 125;  Effective Mitigation: 125.0;  Mit Mod: 57.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 68.44%;  Simulated  DI1: 68.89% (0.5)
Real DI20: 00.00%;  Simulated DI20: 00.54% (0.5)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 150;  Effective Mitigation: 150.0;  Mit Mod: 70.0  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 70.62%;  Simulated  DI1: 70.33% (-0.3)
Real DI20: 00.00%;  Simulated DI20: 00.49% (0.5)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 201;  Effective Mitigation: 201.0;  Mit Mod: 95.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 71.90%;  Simulated  DI1: 72.24% (0.3)
Real DI20: 00.00%;  Simulated DI20: 00.41% (0.4)
------------------------------------------------------------------
a fire beetle lvl 2 - Offense: 10;  Mitigation: 299;  Effective Mitigation: 299.0;  Mit Mod: 144.5  Mult1: 16.5;  Mult2: 15.7
Real  DI1: 73.49%;  Simulated  DI1: 73.97% (0.5)
Real DI20: 00.00%;  Simulated DI20: 00.36% (0.4)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 1;  Effective Mitigation: 1.0;  Mit Mod: -12.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 00.00%;  Simulated  DI1: 01.00% (1.0)
Real DI20: 61.63%;  Simulated DI20: 61.28% (-0.4)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 15;  Effective Mitigation: 15.0;  Mit Mod: -5.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 05.75%;  Simulated  DI1: 05.85% (0.1)
Real DI20: 32.99%;  Simulated DI20: 31.62% (-1.4)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 25;  Effective Mitigation: 25.0;  Mit Mod: 0.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 13.69%;  Simulated  DI1: 15.35% (1.7)
Real DI20: 15.58%;  Simulated DI20: 15.24% (-0.3)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 45;  Effective Mitigation: 45.0;  Mit Mod: 10.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 31.62%;  Simulated  DI1: 33.23% (1.6)
Real DI20: 05.69%;  Simulated DI20: 05.33% (-0.4)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 55;  Effective Mitigation: 55.0;  Mit Mod: 15.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 38.63%;  Simulated  DI1: 40.12% (1.5)
Real DI20: 03.43%;  Simulated DI20: 03.64% (0.2)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 90;  Effective Mitigation: 90.0;  Mit Mod: 32.5  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 53.99%;  Simulated  DI1: 55.73% (1.7)
Real DI20: 00.22%;  Simulated DI20: 01.43% (1.2)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 110;  Effective Mitigation: 110.0;  Mit Mod: 42.5  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 57.49%;  Simulated  DI1: 60.92% (3.4)
Real DI20: 00.00%;  Simulated DI20: 01.01% (1.0)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 125;  Effective Mitigation: 125.0;  Mit Mod: 50.0  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 60.82%;  Simulated  DI1: 63.76% (2.9)
Real DI20: 00.00%;  Simulated DI20: 00.84% (0.8)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 150;  Effective Mitigation: 150.0;  Mit Mod: 62.5  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 63.16%;  Simulated  DI1: 67.50% (4.3)
Real DI20: 00.00%;  Simulated DI20: 00.63% (0.6)
------------------------------------------------------------------
a lizardman forager lvl 5 - Offense: 25;  Mitigation: 174;  Effective Mitigation: 174.0;  Mit Mod: 74.5  Mult1: 24.0;  Mult2: 18.2
Real  DI1: 65.05%;  Simulated  DI1: 69.94% (4.9)
Real DI20: 00.00%;  Simulated DI20: 00.51% (0.5)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 1;  Effective Mitigation: 1.0;  Mit Mod: -30.0  Mult1: 27.1;  Mult2: 18.9
Real  DI1: 00.00%;  Simulated  DI1: 00.56% (0.6)
Real DI20: 71.10%;  Simulated DI20: 68.80% (-2.3)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 8;  Effective Mitigation: 8.0;  Mit Mod: -26.5  Mult1: 27.1;  Mult2: 18.9
Real  DI1: 00.00%;  Simulated  DI1: 00.92% (0.9)
Real DI20: 64.02%;  Simulated DI20: 62.34% (-1.7)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 21;  Effective Mitigation: 21.0;  Mit Mod: -20.0  Mult1: 27.1;  Mult2: 18.9
Real  DI1: 00.76%;  Simulated  DI1: 02.11% (1.3)
Real DI20: 49.54%;  Simulated DI20: 49.48% (-0.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 28;  Effective Mitigation: 28.0;  Mit Mod: -16.5  Mult1: 26.1;  Mult2: 18.9
Real  DI1: 02.46%;  Simulated  DI1: 03.40% (0.9)
Real DI20: 41.37%;  Simulated DI20: 41.28% (-0.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 34;  Effective Mitigation: 34.0;  Mit Mod: -13.5  Mult1: 26.1;  Mult2: 18.9
Real  DI1: 04.69%;  Simulated  DI1: 04.65% (-0.0)
Real DI20: 34.05%;  Simulated DI20: 35.77% (1.7)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 41;  Effective Mitigation: 41.0;  Mit Mod: -10.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 07.01%;  Simulated  DI1: 06.81% (-0.2)
Real DI20: 28.37%;  Simulated DI20: 29.04% (0.7)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 45;  Effective Mitigation: 45.0;  Mit Mod: -8.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 08.78%;  Simulated  DI1: 08.14% (-0.6)
Real DI20: 27.92%;  Simulated DI20: 25.78% (-2.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 50;  Effective Mitigation: 50.0;  Mit Mod: -5.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 10.90%;  Simulated  DI1: 10.08% (-0.8)
Real DI20: 21.61%;  Simulated DI20: 22.16% (0.6)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 56;  Effective Mitigation: 56.0;  Mit Mod: -2.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 12.76%;  Simulated  DI1: 12.75% (-0.0)
Real DI20: 18.27%;  Simulated DI20: 18.26% (-0.0)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 57;  Effective Mitigation: 57.0;  Mit Mod: -2.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 13.21%;  Simulated  DI1: 13.18% (-0.0)
Real DI20: 18.45%;  Simulated DI20: 17.60% (-0.8)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 58;  Effective Mitigation: 58.0;  Mit Mod: -1.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 13.93%;  Simulated  DI1: 13.71% (-0.2)
Real DI20: 16.86%;  Simulated DI20: 17.00% (0.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 60;  Effective Mitigation: 60.0;  Mit Mod: -0.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 14.42%;  Simulated  DI1: 14.78% (0.4)
Real DI20: 16.35%;  Simulated DI20: 15.84% (-0.5)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 61;  Effective Mitigation: 61.0;  Mit Mod: 0.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 15.17%;  Simulated  DI1: 15.31% (0.1)
Real DI20: 15.65%;  Simulated DI20: 15.35% (-0.3)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 62;  Effective Mitigation: 62.0;  Mit Mod: 0.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 15.90%;  Simulated  DI1: 15.77% (-0.1)
Real DI20: 15.05%;  Simulated DI20: 14.93% (-0.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 64;  Effective Mitigation: 64.0;  Mit Mod: 1.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 16.14%;  Simulated  DI1: 16.55% (0.4)
Real DI20: 14.55%;  Simulated DI20: 14.19% (-0.4)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 65;  Effective Mitigation: 65.0;  Mit Mod: 2.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 16.57%;  Simulated  DI1: 17.03% (0.5)
Real DI20: 14.16%;  Simulated DI20: 13.73% (-0.4)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 74;  Effective Mitigation: 74.0;  Mit Mod: 6.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 19.78%;  Simulated  DI1: 20.72% (0.9)
Real DI20: 10.62%;  Simulated DI20: 10.85% (0.2)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 85;  Effective Mitigation: 85.0;  Mit Mod: 12.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 24.24%;  Simulated  DI1: 25.18% (0.9)
Real DI20: 08.57%;  Simulated DI20: 08.44% (-0.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 95;  Effective Mitigation: 95.0;  Mit Mod: 17.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 29.09%;  Simulated  DI1: 28.93% (-0.2)
Real DI20: 08.10%;  Simulated DI20: 06.76% (-1.3)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 104;  Effective Mitigation: 104.0;  Mit Mod: 21.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 32.86%;  Simulated  DI1: 32.20% (-0.7)
Real DI20: 05.14%;  Simulated DI20: 05.67% (0.5)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 112;  Effective Mitigation: 112.0;  Mit Mod: 25.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 35.49%;  Simulated  DI1: 34.87% (-0.6)
Real DI20: 04.13%;  Simulated DI20: 04.86% (0.7)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 125;  Effective Mitigation: 125.0;  Mit Mod: 32.0  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 40.01%;  Simulated  DI1: 38.86% (-1.1)
Real DI20: 03.02%;  Simulated DI20: 03.88% (0.9)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 138;  Effective Mitigation: 138.0;  Mit Mod: 38.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 44.26%;  Simulated  DI1: 42.44% (-1.8)
Real DI20: 02.04%;  Simulated DI20: 03.13% (1.1)
------------------------------------------------------------------
Test Ten lvl 10 - Offense: 61;  Mitigation: 156;  Effective Mitigation: 156.0;  Mit Mod: 47.5  Mult1: 25.1;  Mult2: 18.9
Real  DI1: 46.96%;  Simulated  DI1: 46.81% (-0.1)
Real DI20: 01.07%;  Simulated DI20: 02.48% (1.4)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 4;  Effective Mitigation: 4.0;  Mit Mod: -75.5  Mult1: 27.5;  Mult2: 19.6
Real  DI1: 00.00%;  Simulated  DI1: 00.55% (0.5)
Real DI20: 73.60%;  Simulated DI20: 69.12% (-4.5)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 45;  Effective Mitigation: 45.0;  Mit Mod: -55.0  Mult1: 27.5;  Mult2: 19.6
Real  DI1: 00.00%;  Simulated  DI1: 01.64% (1.6)
Real DI20: 54.40%;  Simulated DI20: 53.51% (-0.9)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 59;  Effective Mitigation: 59.0;  Mit Mod: -48.0  Mult1: 26.5;  Mult2: 19.6
Real  DI1: 00.80%;  Simulated  DI1: 02.51% (1.7)
Real DI20: 48.30%;  Simulated DI20: 46.49% (-1.8)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 99;  Effective Mitigation: 99.0;  Mit Mod: -28.0  Mult1: 26.5;  Mult2: 19.6
Real  DI1: 06.30%;  Simulated  DI1: 05.85% (-0.4)
Real DI20: 30.30%;  Simulated DI20: 31.63% (1.3)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 129;  Effective Mitigation: 129.0;  Mit Mod: -13.0  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 10.60%;  Simulated  DI1: 10.31% (-0.3)
Real DI20: 20.70%;  Simulated DI20: 21.78% (1.1)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 157;  Effective Mitigation: 157.0;  Mit Mod: 1.0  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 15.70%;  Simulated  DI1: 15.64% (-0.1)
Real DI20: 15.30%;  Simulated DI20: 15.03% (-0.3)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 177;  Effective Mitigation: 177.0;  Mit Mod: 11.0  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 18.70%;  Simulated  DI1: 19.15% (0.5)
Real DI20: 11.90%;  Simulated DI20: 12.09% (0.2)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 178;  Effective Mitigation: 178.0;  Mit Mod: 11.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 18.80%;  Simulated  DI1: 19.24% (0.4)
Real DI20: 12.10%;  Simulated DI20: 11.99% (-0.1)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 178;  Effective Mitigation: 178.0;  Mit Mod: 11.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 19.10%;  Simulated  DI1: 19.29% (0.2)
Real DI20: 11.30%;  Simulated DI20: 11.98% (0.7)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 230;  Effective Mitigation: 230.0;  Mit Mod: 37.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 28.30%;  Simulated  DI1: 27.83% (-0.5)
Real DI20: 06.40%;  Simulated DI20: 07.26% (0.9)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 288;  Effective Mitigation: 288.0;  Mit Mod: 66.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 37.10%;  Simulated  DI1: 36.23% (-0.9)
Real DI20: 03.80%;  Simulated DI20: 04.56% (0.8)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 348;  Effective Mitigation: 348.0;  Mit Mod: 96.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 43.90%;  Simulated  DI1: 43.37% (-0.5)
Real DI20: 01.70%;  Simulated DI20: 03.02% (1.3)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 362;  Effective Mitigation: 362.0;  Mit Mod: 103.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 45.90%;  Simulated  DI1: 44.73% (-1.2)
Real DI20: 01.50%;  Simulated DI20: 02.78% (1.3)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 418;  Effective Mitigation: 418.0;  Mit Mod: 131.5  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 48.60%;  Simulated  DI1: 50.00% (1.4)
Real DI20: 00.70%;  Simulated DI20: 02.06% (1.4)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 429;  Effective Mitigation: 429.0;  Mit Mod: 137.0  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 49.90%;  Simulated  DI1: 50.92% (1.0)
Real DI20: 00.50%;  Simulated DI20: 01.96% (1.5)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 498;  Effective Mitigation: 453.8;  Mit Mod: 149.4  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 50.90%;  Simulated  DI1: 52.77% (1.9)
Real DI20: 00.40%;  Simulated DI20: 01.71% (1.3)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 602;  Effective Mitigation: 490.2;  Mit Mod: 167.6  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 54.80%;  Simulated  DI1: 55.46% (0.7)
Real DI20: 00.10%;  Simulated DI20: 01.47% (1.4)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 663;  Effective Mitigation: 511.5;  Mit Mod: 178.3  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 53.10%;  Simulated  DI1: 56.65% (3.6)
Real DI20: 00.00%;  Simulated DI20: 01.36% (1.4)
------------------------------------------------------------------
Test Twenty Five lvl 25 - Offense: 155;  Mitigation: 1100;  Effective Mitigation: 664.5;  Mit Mod: 254.8  Mult1: 25.5;  Mult2: 19.6
Real  DI1: 59.80%;  Simulated  DI1: 64.09% (4.3)
Real DI20: 00.00%;  Simulated DI20: 00.80% (0.8)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 4;  Effective Mitigation: 4.0;  Mit Mod: -158.0  Mult1: 28.4;  Mult2: 20.8
Real  DI1: 00.00%;  Simulated  DI1: 00.45% (0.4)
Real DI20: 74.60%;  Simulated DI20: 71.46% (-3.1)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 79;  Effective Mitigation: 79.0;  Mit Mod: -120.5  Mult1: 28.4;  Mult2: 20.8
Real  DI1: 00.00%;  Simulated  DI1: 01.27% (1.3)
Real DI20: 59.80%;  Simulated DI20: 57.55% (-2.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 82;  Effective Mitigation: 82.0;  Mit Mod: -119.0  Mult1: 28.4;  Mult2: 20.8
Real  DI1: 00.00%;  Simulated  DI1: 01.32% (1.3)
Real DI20: 57.80%;  Simulated DI20: 56.95% (-0.8)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 116;  Effective Mitigation: 116.0;  Mit Mod: -102.0  Mult1: 27.4;  Mult2: 20.8
Real  DI1: 00.60%;  Simulated  DI1: 02.21% (1.6)
Real DI20: 49.10%;  Simulated DI20: 48.76% (-0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 152;  Effective Mitigation: 152.0;  Mit Mod: -84.0  Mult1: 27.4;  Mult2: 20.8
Real  DI1: 02.20%;  Simulated  DI1: 03.29% (1.1)
Real DI20: 41.80%;  Simulated DI20: 41.81% (0.0)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 191;  Effective Mitigation: 191.0;  Mit Mod: -64.5  Mult1: 27.4;  Mult2: 20.8
Real  DI1: 04.80%;  Simulated  DI1: 04.95% (0.2)
Real DI20: 34.50%;  Simulated DI20: 34.55% (0.0)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 202;  Effective Mitigation: 202.0;  Mit Mod: -59.0  Mult1: 27.4;  Mult2: 20.8
Real  DI1: 05.63%;  Simulated  DI1: 05.54% (-0.1)
Real DI20: 29.93%;  Simulated DI20: 32.62% (2.7)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 212;  Effective Mitigation: 212.0;  Mit Mod: -54.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 06.10%;  Simulated  DI1: 06.34% (0.2)
Real DI20: 29.10%;  Simulated DI20: 30.25% (1.1)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 212;  Effective Mitigation: 212.0;  Mit Mod: -54.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 06.20%;  Simulated  DI1: 06.33% (0.1)
Real DI20: 29.90%;  Simulated DI20: 30.26% (0.4)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 215;  Effective Mitigation: 215.0;  Mit Mod: -52.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 06.50%;  Simulated  DI1: 06.45% (-0.1)
Real DI20: 28.30%;  Simulated DI20: 29.82% (1.5)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 245;  Effective Mitigation: 245.0;  Mit Mod: -37.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 09.40%;  Simulated  DI1: 08.46% (-0.9)
Real DI20: 24.70%;  Simulated DI20: 25.11% (0.4)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 254;  Effective Mitigation: 254.0;  Mit Mod: -33.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 08.80%;  Simulated  DI1: 09.19% (0.4)
Real DI20: 21.70%;  Simulated DI20: 23.70% (2.0)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 296;  Effective Mitigation: 296.0;  Mit Mod: -12.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 12.70%;  Simulated  DI1: 12.80% (0.1)
Real DI20: 17.40%;  Simulated DI20: 18.11% (0.7)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 307;  Effective Mitigation: 307.0;  Mit Mod: -6.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 14.60%;  Simulated  DI1: 13.99% (-0.6)
Real DI20: 16.60%;  Simulated DI20: 16.87% (0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 311;  Effective Mitigation: 311.0;  Mit Mod: -4.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 14.90%;  Simulated  DI1: 14.41% (-0.5)
Real DI20: 16.60%;  Simulated DI20: 16.28% (-0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 315;  Effective Mitigation: 315.0;  Mit Mod: -2.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 15.01%;  Simulated  DI1: 14.79% (-0.2)
Real DI20: 15.71%;  Simulated DI20: 15.87% (0.2)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 315;  Effective Mitigation: 315.0;  Mit Mod: -2.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 14.74%;  Simulated  DI1: 14.80% (0.1)
Real DI20: 15.24%;  Simulated DI20: 15.92% (0.7)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 318;  Effective Mitigation: 318.0;  Mit Mod: -1.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 14.90%;  Simulated  DI1: 15.08% (0.2)
Real DI20: 15.90%;  Simulated DI20: 15.56% (-0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 320;  Effective Mitigation: 320.0;  Mit Mod: 0.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 14.74%;  Simulated  DI1: 15.34% (0.6)
Real DI20: 15.03%;  Simulated DI20: 15.32% (0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 345;  Effective Mitigation: 345.0;  Mit Mod: 12.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 17.50%;  Simulated  DI1: 17.56% (0.1)
Real DI20: 13.10%;  Simulated DI20: 13.34% (0.2)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 354;  Effective Mitigation: 354.0;  Mit Mod: 17.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 17.80%;  Simulated  DI1: 18.31% (0.5)
Real DI20: 12.20%;  Simulated DI20: 12.73% (0.5)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 362;  Effective Mitigation: 362.0;  Mit Mod: 21.0  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 18.80%;  Simulated  DI1: 19.03% (0.2)
Real DI20: 11.80%;  Simulated DI20: 12.19% (0.4)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 403;  Effective Mitigation: 403.0;  Mit Mod: 41.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 23.20%;  Simulated  DI1: 22.67% (-0.5)
Real DI20: 09.10%;  Simulated DI20: 09.74% (0.6)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 413;  Effective Mitigation: 413.0;  Mit Mod: 46.5  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 22.20%;  Simulated  DI1: 23.47% (1.3)
Real DI20: 09.70%;  Simulated DI20: 09.31% (-0.4)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 445;  Effective Mitigation: 435.3;  Mit Mod: 57.6  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 26.20%;  Simulated  DI1: 25.41% (-0.8)
Real DI20: 07.60%;  Simulated DI20: 08.39% (0.8)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 480;  Effective Mitigation: 447.5;  Mit Mod: 63.8  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 23.60%;  Simulated  DI1: 26.46% (2.9)
Real DI20: 08.40%;  Simulated DI20: 07.86% (-0.5)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 499;  Effective Mitigation: 454.1;  Mit Mod: 67.1  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 26.70%;  Simulated  DI1: 26.89% (0.2)
Real DI20: 07.10%;  Simulated DI20: 07.61% (0.5)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 528;  Effective Mitigation: 464.3;  Mit Mod: 72.2  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 27.70%;  Simulated  DI1: 27.72% (0.0)
Real DI20: 07.04%;  Simulated DI20: 07.30% (0.3)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 565;  Effective Mitigation: 477.3;  Mit Mod: 78.6  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 27.60%;  Simulated  DI1: 28.91% (1.3)
Real DI20: 06.80%;  Simulated DI20: 06.80% (0.0)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 602;  Effective Mitigation: 490.2;  Mit Mod: 85.1  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 31.11%;  Simulated  DI1: 29.95% (-1.2)
Real DI20: 06.02%;  Simulated DI20: 06.45% (0.4)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 602;  Effective Mitigation: 490.2;  Mit Mod: 85.1  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 28.90%;  Simulated  DI1: 29.86% (1.0)
Real DI20: 05.78%;  Simulated DI20: 06.44% (0.7)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 649;  Effective Mitigation: 506.6;  Mit Mod: 93.3  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 32.00%;  Simulated  DI1: 31.22% (-0.8)
Real DI20: 06.00%;  Simulated DI20: 06.00% (-0.0)
------------------------------------------------------------------
Ssolet Dnaas lvl 50 - Offense: 320;  Mitigation: 1137;  Effective Mitigation: 677.5;  Mit Mod: 178.7  Mult1: 26.4;  Mult2: 20.8
Real  DI1: 43.90%;  Simulated  DI1: 42.97% (-0.9)
Real DI20: 02.30%;  Simulated DI20: 03.11% (0.8)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 83;  Effective Mitigation: 83.0;  Mit Mod: -128.5  Mult1: 28.4;  Mult2: 20.9
Real  DI1: 00.00%;  Simulated  DI1: 01.25% (1.3)
Real DI20: 58.90%;  Simulated DI20: 57.86% (-1.0)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 178;  Effective Mitigation: 178.0;  Mit Mod: -81.0  Mult1: 27.4;  Mult2: 20.9
Real  DI1: 02.90%;  Simulated  DI1: 03.91% (1.0)
Real DI20: 39.30%;  Simulated DI20: 39.03% (-0.3)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 288;  Effective Mitigation: 288.0;  Mit Mod: -26.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 11.00%;  Simulated  DI1: 10.58% (-0.4)
Real DI20: 20.10%;  Simulated DI20: 21.38% (1.3)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 288;  Effective Mitigation: 288.0;  Mit Mod: -26.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 11.00%;  Simulated  DI1: 10.49% (-0.5)
Real DI20: 19.60%;  Simulated DI20: 21.39% (1.8)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 300;  Effective Mitigation: 300.0;  Mit Mod: -20.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 12.00%;  Simulated  DI1: 11.50% (-0.5)
Real DI20: 18.50%;  Simulated DI20: 19.94% (1.4)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 335;  Effective Mitigation: 335.0;  Mit Mod: -2.5  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 14.91%;  Simulated  DI1: 14.82% (-0.1)
Real DI20: 15.98%;  Simulated DI20: 15.85% (-0.1)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 340;  Effective Mitigation: 340.0;  Mit Mod: 0.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 15.20%;  Simulated  DI1: 15.31% (0.1)
Real DI20: 15.29%;  Simulated DI20: 15.29% (0.0)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 349;  Effective Mitigation: 349.0;  Mit Mod: 4.5  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 16.20%;  Simulated  DI1: 16.05% (-0.2)
Real DI20: 14.40%;  Simulated DI20: 14.59% (0.2)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 364;  Effective Mitigation: 364.0;  Mit Mod: 12.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 16.98%;  Simulated  DI1: 17.37% (0.4)
Real DI20: 13.33%;  Simulated DI20: 13.45% (0.1)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 422;  Effective Mitigation: 422.0;  Mit Mod: 41.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 22.30%;  Simulated  DI1: 22.17% (-0.1)
Real DI20: 09.70%;  Simulated DI20: 10.05% (0.3)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 426;  Effective Mitigation: 426.0;  Mit Mod: 43.0  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 22.10%;  Simulated  DI1: 22.42% (0.3)
Real DI20: 10.40%;  Simulated DI20: 09.91% (-0.5)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 584;  Effective Mitigation: 483.9;  Mit Mod: 71.9  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 26.20%;  Simulated  DI1: 27.16% (1.0)
Real DI20: 07.80%;  Simulated DI20: 07.52% (-0.3)
------------------------------------------------------------------
Test Fifty lvl 50 - Offense: 340;  Mitigation: 1148;  Effective Mitigation: 681.3;  Mit Mod: 170.6  Mult1: 26.4;  Mult2: 20.9
Real  DI1: 41.90%;  Simulated  DI1: 41.00% (-0.9)
Real DI20: 02.30%;  Simulated DI20: 03.48% (1.2)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 1170;  Effective Mitigation: 689.0;  Mit Mod: 147.0  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 36.10%;  Simulated  DI1: 35.73% (-0.4)
Real DI20: 03.90%;  Simulated DI20: 04.64% (0.7)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 629;  Effective Mitigation: 499.6;  Mit Mod: 52.3  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 22.14%;  Simulated  DI1: 23.01% (0.9)
Real DI20: 09.59%;  Simulated DI20: 09.53% (-0.1)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 731;  Effective Mitigation: 535.4;  Mit Mod: 70.2  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 24.93%;  Simulated  DI1: 25.57% (0.6)
Real DI20: 08.11%;  Simulated DI20: 08.26% (0.1)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 99;  Effective Mitigation: 99.0;  Mit Mod: -148.0  Mult1: 28.7;  Mult2: 21.3
Real  DI1: 00.00%;  Simulated  DI1: 01.24% (1.2)
Real DI20: 58.23%;  Simulated DI20: 57.92% (-0.3)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 541;  Effective Mitigation: 468.9;  Mit Mod: 36.9  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 20.19%;  Simulated  DI1: 20.67% (0.5)
Real DI20: 10.53%;  Simulated DI20: 11.00% (0.5)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 139;  Effective Mitigation: 139.0;  Mit Mod: -128.0  Mult1: 27.7;  Mult2: 21.3
Real  DI1: 00.34%;  Simulated  DI1: 02.05% (1.7)
Real DI20: 51.47%;  Simulated DI20: 49.87% (-1.6)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 499;  Effective Mitigation: 454.1;  Mit Mod: 29.6  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 19.24%;  Simulated  DI1: 19.64% (0.4)
Real DI20: 11.86%;  Simulated DI20: 11.58% (-0.3)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 195;  Effective Mitigation: 195.0;  Mit Mod: -100.0  Mult1: 27.7;  Mult2: 21.3
Real  DI1: 02.64%;  Simulated  DI1: 03.45% (0.8)
Real DI20: 41.86%;  Simulated DI20: 41.01% (-0.9)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 253;  Effective Mitigation: 253.0;  Mit Mod: -71.0  Mult1: 27.7;  Mult2: 21.3
Real  DI1: 05.77%;  Simulated  DI1: 05.61% (-0.2)
Real DI20: 31.08%;  Simulated DI20: 32.39% (1.3)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 443;  Effective Mitigation: 434.5;  Mit Mod: 19.8  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 17.34%;  Simulated  DI1: 18.19% (0.8)
Real DI20: 13.09%;  Simulated DI20: 12.74% (-0.3)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 293;  Effective Mitigation: 293.0;  Mit Mod: -51.0  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 08.38%;  Simulated  DI1: 07.87% (-0.5)
Real DI20: 25.35%;  Simulated DI20: 26.43% (1.1)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 405;  Effective Mitigation: 405.0;  Mit Mod: 5.0  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 15.66%;  Simulated  DI1: 16.05% (0.4)
Real DI20: 14.72%;  Simulated DI20: 14.63% (-0.1)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 347;  Effective Mitigation: 347.0;  Mit Mod: -24.0  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 11.99%;  Simulated  DI1: 11.34% (-0.6)
Real DI20: 19.03%;  Simulated DI20: 20.13% (1.1)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 400;  Effective Mitigation: 400.0;  Mit Mod: 2.5  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 15.01%;  Simulated  DI1: 15.71% (0.7)
Real DI20: 14.71%;  Simulated DI20: 15.00% (0.3)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 152;  Effective Mitigation: 152.0;  Mit Mod: -121.5  Mult1: 27.7;  Mult2: 21.3
Real  DI1: 00.66%;  Simulated  DI1: 02.29% (1.6)
Real DI20: 48.61%;  Simulated DI20: 47.81% (-0.8)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 395;  Effective Mitigation: 395.0;  Mit Mod: 0.0  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 15.22%;  Simulated  DI1: 15.35% (0.1)
Real DI20: 15.41%;  Simulated DI20: 15.37% (-0.0)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 983;  Effective Mitigation: 623.5;  Mit Mod: 114.3  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 32.00%;  Simulated  DI1: 31.54% (-0.5)
Real DI20: 05.60%;  Simulated DI20: 05.85% (0.2)
------------------------------------------------------------------
Test Sixty lvl 60 - Offense: 395;  Mitigation: 872;  Effective Mitigation: 584.7;  Mit Mod: 94.9  Mult1: 26.7;  Mult2: 21.3
Real  DI1: 28.51%;  Simulated  DI1: 29.01% (0.5)
Real DI20: 06.75%;  Simulated DI20: 06.82% (0.1)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 99;  Effective Mitigation: 99.0;  Mit Mod: -165.5  Mult1: 28.9;  Mult2: 21.6
Real  DI1: 00.00%;  Simulated  DI1: 01.11% (1.1)
Real DI20: 60.13%;  Simulated DI20: 59.64% (-0.5)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 233;  Effective Mitigation: 233.0;  Mit Mod: -98.5  Mult1: 27.9;  Mult2: 21.6
Real  DI1: 03.45%;  Simulated  DI1: 04.03% (0.6)
Real DI20: 38.16%;  Simulated DI20: 38.30% (0.1)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 266;  Effective Mitigation: 266.0;  Mit Mod: -82.0  Mult1: 27.9;  Mult2: 21.6
Real  DI1: 05.21%;  Simulated  DI1: 05.16% (-0.0)
Real DI20: 32.76%;  Simulated DI20: 33.71% (1.0)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 307;  Effective Mitigation: 307.0;  Mit Mod: -61.5  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 07.49%;  Simulated  DI1: 07.24% (-0.2)
Real DI20: 26.57%;  Simulated DI20: 27.88% (1.3)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 350;  Effective Mitigation: 350.0;  Mit Mod: -40.0  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 10.12%;  Simulated  DI1: 09.55% (-0.6)
Real DI20: 21.60%;  Simulated DI20: 23.09% (1.5)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 401;  Effective Mitigation: 401.0;  Mit Mod: -14.5  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 13.27%;  Simulated  DI1: 12.96% (-0.3)
Real DI20: 17.35%;  Simulated DI20: 17.94% (0.6)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 425;  Effective Mitigation: 425.0;  Mit Mod: -2.5  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 14.63%;  Simulated  DI1: 14.92% (0.3)
Real DI20: 15.43%;  Simulated DI20: 15.76% (0.3)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 430;  Effective Mitigation: 430.0;  Mit Mod: 0.0  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 14.94%;  Simulated  DI1: 15.37% (0.4)
Real DI20: 15.30%;  Simulated DI20: 15.30% (-0.0)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 450;  Effective Mitigation: 437.0;  Mit Mod: 3.5  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 16.29%;  Simulated  DI1: 15.84% (-0.5)
Real DI20: 14.50%;  Simulated DI20: 14.82% (0.3)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 475;  Effective Mitigation: 445.8;  Mit Mod: 7.9  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 16.46%;  Simulated  DI1: 16.34% (-0.1)
Real DI20: 13.93%;  Simulated DI20: 14.32% (0.4)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 500;  Effective Mitigation: 454.5;  Mit Mod: 12.3  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 17.06%;  Simulated  DI1: 16.98% (-0.1)
Real DI20: 13.29%;  Simulated DI20: 13.80% (0.5)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 596;  Effective Mitigation: 488.1;  Mit Mod: 29.1  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 19.21%;  Simulated  DI1: 19.26% (0.1)
Real DI20: 11.69%;  Simulated DI20: 11.90% (0.2)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 700;  Effective Mitigation: 524.5;  Mit Mod: 47.3  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 21.53%;  Simulated  DI1: 21.66% (0.1)
Real DI20: 10.33%;  Simulated DI20: 10.28% (-0.0)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 798;  Effective Mitigation: 558.8;  Mit Mod: 64.4  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 23.80%;  Simulated  DI1: 24.12% (0.3)
Real DI20: 08.79%;  Simulated DI20: 08.97% (0.2)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 905;  Effective Mitigation: 596.3;  Mit Mod: 83.1  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 26.11%;  Simulated  DI1: 26.48% (0.4)
Real DI20: 07.76%;  Simulated DI20: 07.78% (0.0)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 1001;  Effective Mitigation: 629.8;  Mit Mod: 99.9  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 28.48%;  Simulated  DI1: 28.69% (0.2)
Real DI20: 06.68%;  Simulated DI20: 06.87% (0.2)
------------------------------------------------------------------
Test Seventy lvl 70 - Offense: 430;  Mitigation: 1190;  Effective Mitigation: 696.0;  Mit Mod: 133.0  Mult1: 26.9;  Mult2: 21.6
Real  DI1: 32.70%;  Simulated  DI1: 32.88% (0.2)
Real DI20: 05.10%;  Simulated DI20: 05.45% (0.3)
------------------------------------------------------------------

Estimating NPC Mitigation from Combat Simulations

Having a precise model of PC damage and a reasonably accurate d20 algorithm gives us another means to estimate NPC mitigation. One need merely plug in your PC's stats and run repeated simulations adjusting the mitigation value until the results match the log. This is particularly fortunate since the 115 offense threshold makes parsing mitigation difficult to impossible for higher level NPCs.

I parsed a couple of raid bosses using this technique. Luclin raid bosses were known for their high AC values, and I wanted to see what they were, so I parsed Xerkizh The Creator and Va Dyn Khar. While every common NPC above level 51 parsed near or at 200 mitigation, these raid bosses ended up at ~850 and ~950 mitigation respectively. The margin of error using this technique is a bit high, of course. A more accurate bell curve algorithm would improve the accuracy.
Reply With Quote
  #4  
Old 04-10-2016, 10:56 AM
Kayen
Developer
 
Join Date: Mar 2009
Location: -
Posts: 228
Default

I hereby award you a Ph.D in EQemu Studies with all the all the rights and privileges pertaining thereto.

Seriously though, impressive work here.

Kayen
Reply With Quote
  #5  
Old 04-10-2016, 11:08 AM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default

Torven it would not have to be 100% accurate. It just needs to be close. If you have an algorithm that is close I am sure it would be good enough to call it a day.
Reply With Quote
  #6  
Old 04-10-2016, 02:36 PM
demonstar55
Demi-God
 
Join Date: Apr 2008
Location: MA
Posts: 1,164
Default

Note: that ranger bonus is part of an AA line now

http://www.raidloot.com/AA.aspx?name...s+attack+power

(which PEQ should have)
Reply With Quote
  #7  
Old 04-10-2016, 07:36 PM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default

first correction: The mage pet was 'Greater Conjuration Earth' not 'Greater Elemental Earth' and the unaccounted for missing ~25 offense was due to a spreadsheet copy and paste error.
Reply With Quote
  #8  
Old 03-30-2017, 02:32 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default

I have an update to this model thanks to Demonstar's work. He has discovered in decompiles that ToHit gets a +10 then gets multiplied by 1.21. (this confirms the multiplier) I also discovered (from looking at Live's new UI numbers) that Sony added another +10 to Avoidance AC before running calcs with it. These +10s are why I needed an avoidance modifier to make the math fit better. Knowing this, we can swap the modifier out for the +10s:

Code:
if ((ToHit + 10) * 1.21 > AvoidanceAC + 10) then
	
	MissRate = (AvoidanceAC + 10) / ((ToHit + 10) * 1.21 * 2)
	AvoidanceAC = (ToHit + 10) * 1.21 * MissRate * 2 - 10
	ToHit = (AvoidanceAC + 10) / MissRate / 2 / 1.21 - 10
else
	
	MissRate = 1 - (ToHit + 10) * 1.21 / ((AvoidanceAC + 10) * 2)
	AvoidanceAC = (ToHit + 10) * 1.21 / (1 - MissRate) / 2 - 10
	ToHit = (AvoidanceAC + 10) * (1 - MissRate) * 2 / 1.21 - 10
end
I wouldn't be surprised if this produces precise output matching Sony's code. The previous version was so close that it's academic however.

It's interesting to note that the +10s show up in the new Live UI character sheet but were not factored in the old ATK and AC formulae.

Demonstar also discovered a way to get NPC offense and to-hit values from a handful of NPCs in the game. From this I was able to confirm that the methods I devised to estimate offense and to-hit values were fairly accurate.

'Mighty' buffed NPCs gain about 120 or 125 to-hit; the margin of error makes it difficult to know for sure. Note that this is before the 1.21 multiplier. They also gain significant AC from the buff in Classic, Kunark and Velious and none in Luclin. I parsed all PoP NPCs before they gained the buff so I don't know if bosses in that era have modified AC with the buff. Offense and Avoidance is unmodified.

Live's client now includes AC softcaps for all classes and levels in file 'ACMitigation.txt' in the Resources folder. Turns out the level 65 warrior softcap is actually 440 (not 430) with a 0.35 overcap multiplier. Reminder: Modern caps and overcap returns are different from old era EQ.

I have parsed offense/tohit/mitigation/avoidance for a large number of raid bosses in the game from classic to PoP and will be giving them to TAKP and PEQ. Some interesting findings:

* Lord Nagafen's offense is actually fairly high for his level/era.
* Most raid bosses have a small or even no to-hit/accuracy modifier, but some have a very large modifier. Notably: Yelinak, Velkator, Kael bosses, Drunder Rallos, PoAir and PoEarth bosses, Quarm. (didn't parse Dain)
* Most bosses don't have large offense modifiers. Even PoP bosses often have small modifiers, which is why those bosses low hit so much.
* Some bosses with large offense modifiers: AoW and Tunare (at least for the era), Dagarn (much larger than AoW's!), Thall Va Kelun, Aten, CoD Bertox, Drunder Rallos (very high), PoWater bosses, Time Rallos, Quarm.
* Time Rallos and Bertox have phases/stages to them where their offense, to-hit, AC, max hit and resists change.
* Luclin is known for high AC mobs, but the harder Velious bosses also have significant AC.
* PoP bosses have lower AC than the harder Velious bosses.
* Highest AC bosses I've found: Rhag`Mozdezh, A glyph covered serpent, Vyzh`dra the Cursed, Blood of Ssraeshza with ~1200. Vulak has ~1000. AoW ~900.
* Kaas Thox Xi Ans Dyek actually had only 100 AC. (for reference: common level 50+ NPCs have ~200)
* Few bosses have an avoidance modifier. Those that do: Vex Thal bosses (small), Diaku Overseer, CoD Bertox, PoWater bosses. Margin of error makes small modifiers lost in the noise however.
Reply With Quote
  #9  
Old 01-21-2024, 08:11 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 61
Default

Mackal/Demonstar awhile back had decompiled older era clients and summarized the results on some github pages and is a must-read for any old EQ recreation devs. Can be found here: https://github.com/mackal/EQMechanics/wiki

Recently the Quarm server has motivated us to look at pre-PoP mechanics, and Kicnlag from Project Lantern has decompiled several different older clients and discovered a few new things to add to Mackal's work. (notably the 405 warrior cap)

This is the AC cap timeline that we're aware of as of this post:

* Classic (pre-Kunark) had a hard mitigation AC cap of 350 for all classes.

* At Kunark launch, level 51+ warriors had their hard cap increased to 405. All other classes (and sub 51 wars) remained at 350. (verified from the April 28 2000 client)

* AC caps changed again some time after (or at) Velious' launch. The earliest known client having the higher AC caps is April 4 2001. The new caps are: 430, 403, 375 for level 51+ melee classes only.

* The hard caps turn into soft caps for melee classes only in the late Velious time frame. (or maybe Luclin launch, not sure; would be nice to narrow this down) The overcap returns at this time are divided by 12 for all melee classes.

* PoP launch made shield AC ignore the cap. Also class and level based overcap returns. Casters get softcaps at this time, so no more hardcaps for any class.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 02:43 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3