Good day to everyone, in this article I'd like to do a complete analysis of equipment module and its effect on damage. Recently there have been a few of articles about this topic. I would like to give you a more complex insight into the matter and persuade you about how things work and where the truth is really hidden (if you read it all, congratulations
). If you will find this article too technical, I recommend skipping to last 3 paragraphs where I summarize the results.
Basics
Let's see what equip parameters there are and label them with variables:
x1 – avoid damage
x2 – reduce miss chance
x3 – maximum damage
x4 – damage
x5 – critical chance
x6 – strength
x7 – hit
From x1 to x5 it's parameters whose unit is percentage. x6, x7 are without units – constants. We assign values to these variables straightforwardly, from the game – if there's hit +60, then x7 = 60. If there's reduce miss +4.5%, then x2 = 4.5. No unit transitions.
Let's look at how our base damage is computed in the game. That's the first pair of numbers, the one in this form: 800/1200. What are these 2 numbers? They're upper and lower bound of player's range of possible hits. Of course, not considering any buffs/debuffs, i.e. weapons, MU bonus, etc. Without these, player with base damage 800/1200 would always hit between 800 and 1200, never more or less. Game then works like this – it generates a random number between upper and lower bound, then applies all buffs/debuffs on this random number. It could be another way – buffs could be applied on upper and lower bound and only then would be the damage generated, but these 2 procedures are the same thing, make no difference (something like a linear transformation principle).
As we can see, buffs aren't interesting, we can consider them fixed and we just care about what number is generated.
If we assume that every number among our 400 numbers: 801, 802, .. 1199, 1200 has same probability of being generated – 1/400 – then we can easily compute expected value of damage as (800+1200)/2 = 1000. For purpose of the analysis we can therefore work with average case only and we don't break anything. Let's make these variables:
BD – base damage
LB – lower bound
UB – upper bound
How do we compute LB and UB? More variables:
S – Strength
R – Rank (e.g. Major is R=2)
This stands true:
It's recommended to the reader to think about formulas stated above, in case he hasn't known/thought about them before. Essentially there are 2 differences between upper and lower bound – coefficients 0.8 and 1.2, and the more important one – while damage boost is applied to both of them, max-damage applies to upper bound only.
Critical, reduce and avoid
At this point we have an idea about 4 out of 7 parameters. What about the rest? It's necessary to realize one thing. All of these 3 parameters (avoid, reduce, critical) work with certain probability. Whether they work or not is determined by some generator of random numbers (e.g. if we have critical 23.45%, then it picks a random number between 1 and 10000, and number between 1 and 2345 is chosen, critical works, otherwise it doesn't. Same with reduce and avoid. The most important about this is that these 3 numbers are picked independently of each other. This allows us to think about their effects separately.
Let's look at critical. Again it's just 2 numbers in form of 1600/2400. Doubles of previous example were used intentionally, because that's how it works in the game. Critical in average case hits 2000, therefore it's just a double damage. This event of doubled damage happens in 12.5+x5 % of cases (12.5 is default). That means this: out of 100 hits, in average, (12.5+x5)-times I hit 2*BD (2*base damage) and (100-12.5-x5)-times I hit only 1*BD.
That's why critical causes average damage to turn from BD into
It's same with reduce miss. Out of 100 hits, (87.5+x2)-times I hit, and the rest of times I don't. This evaluates into our damage so far (critical*BD) being multiplied by total percentage of successful hits. That is - by this expression:
Of course we ignore the fact that this way it would let our miss chance go under 0%, but it's OK, because we will forbid that later on.
The only left is avoid damage. Let's have 50% avoid (I know it's not allowed, but this is just an example). Let our damage so far (multiplied by critical and reduce already) be X. Then if out of 100 hits 50 have avoid damage work for them, it means that we have dealt X damage and still can hit 0.5X damage. After we are done with 0.5X, we have 0.25X left still, and so on. In general, if our avoid is (5+x1), then we can turn damage X into this
and so on with exponents going into infinity. If we factor out X, we get
and sum in brackets can be rewritten into 100/(95-x1). So after this modifier we can perfectly define our total damage (TD):
Nonlinear programming
Our effort is to maximize variable TD. If we didn't have any constraints, we could set all variables x1-x7 to a million and we would be done ;-) Therefore we need to express constraints given by the game.
Game is telling us only 1 principal constraint and that's x2 <= 12.5. Except that we also have to consider 2 facts:
1. player can wield only 5*2=10 boosts
2. each parameter gets values from different intervals, or variously good, respectively
Second point is extremely important one (the only interesting in this analysis really), because if, for example, values of critical came from between 1-2%, and reduce was from 10-20% (for equip of the same quality), then reduce would be better of course, but just because of unfair values given to it.
But how do we take this into account?
A good way seems to be to look at intervals of values which parameters get (check wiki) at equip of quality 5 – that is what we want to use at the end-game anyway. Average values for equip 5 are:
x1 – 5
x2 – 6.75
x3 – 10
x4 – 5
x5 – 5
x6 – 30
x7 – 65
Each parameter adds up into total sum at a different rate. This can be taken into account by using something I would call a total capacity of equip set. Let's imagine, in the beginning, total capacity (C) is 0, i.e. also all x1-x7 are 0. If we raise x6 say by 1, then we want this to reflect into total capacity 6-times less than C would be affected by (for example) raising x4 by 1. Why? Because 30/5 = 6. x6 grows 6times faster than x4. It could be noted schematically like this:
What we need is to choose proper coefficients c1-c7 so they reflect the rate of growth of each parameter, in other words the difference of intervals from which values are taken. Let's say we have 10 boosts to damage (x4). One adds up a 5, together they add up 50 and theoretically we could set C to anything, even these 50 at c4 = 1. This would ask us to make c6 6-times smaller than c4 and so c6 would have to be 1/6. This way we could determine the rest of coefficients and at C=50 we would have a complete constraint. It would have some ugly fractions though, and that's why I compute smallest common multiple of numbers 5, 6.75, 10, 30 and 65 which is 35100 and this I make to be my C. Then the same way I compute coefficients and get an inequation
Note: variables R and S were for our purposes set to practical values S = 1800, R = 2.2 All following results were computed using these constants. By changing them we don't expect significant changes in our results.
This kind of problem where we want to optimize a function (in this case maximize TD) at certain constraints, is solved by mathematical field called nonlinear programming. There are solvers of various quality, which can solve this for us. I've got one such solver and this is the solution I got:
This means the best damage is made by using avoid damage on all 10 boosts – 5*10+5=55%. But because there's another constraint on avoid: x1<=35, let's try and see what solver says if we add this constraint to our program:
As we can see, once avoid was filled with 35 and more was forbidden, the parameter that was chosen to be filled up next was reduce miss, followed by max-damage with what was left after.
Avoid damage may be ultimate winner, but at the same time it is also economically difficult parameter – the only one that causes expenses on weapons raise. Let's try to forbid avoid completely.
For x1 <= 0
= ECONOMICAL PERFECTION
And we got 4th place too – critical.
For examining other 3 parameters we have to forbid max-damage now:
We add new constraint x3<=0
Damage has now actually got ahead of critical - they are +/- same - depends on value of max-damage.
If we forbid all x1-x4 parameters and enlarge capacity too, strength will be used and so strength is 6th.
Conclusion
For those who want to have an economical set-up without avoid, set-up labelled „perfection“ is the one to go for – 2 boosts into reduce miss, 7 into max-damage, 1 into critical.
Of course ultimate winner is set-up with 2 boosts into reduce, 7 into avoid and 1 into max-damage, except this one is viable only for those who can afford it.
Final ranking:
1. Avoid damage
2. Reduce miss
3. Maximum damage
4. Damage & Critical
6. Strength
7. Hit
Your comments and opinions are welcome
This article tried to be very rigorous and I know it's not very useful for most of e-sim players. Next time I might write a more laic tutorial.
Previous article:
Equipment: kompletná analýza (SK) (11 years ago)
Next article:
Kandidatúra na prezidenta (11 years ago)