Damage, Resist, and Pierce 
Wizard101 Spring Update 2021


The current Spring 2021 Wizard101 test realm brought about many changes, one being to the damage, resist, and pierce stats. I would recommend reading the update notes here. Additionally, feel free to check out this article that explains the general idea behind the spell audit that continued this update (though the mathematical formula used there is not quite what the Devs use, it is useful as an explicit approximation).

For those only interested in the damage and resist calculator, that can be found here. This calculator take in an attacker’s damage and pierce and a defender’s resist, outputting outgoing, incoming, and total damage multipliers for PvE and PvP.

This article will give an in-depth mathematical explanation of the new damage, resist, and pierce system. As mentioned in the test realm update notes linked above, I communicated with Ratbeard to help design the function used and give feedback regarding the qualitative sensibility of specific values. Of note is that while both the Devs and I have confidence in the structure of the function, the specific numbers (such as limits) used in both PvP and PvE are not set in stone. These are dashboard-changeable values that will likely change during this test realm and beyond, similarly to the values associated with the current critical dashboard.

About This Article


The information here will be geared towards those who would like to gain a deeper understanding of the damage/resist dashboard, the dashboard’s changeable values, and the specific function used to decide damage multipliers. While my explanation will be intended for those who have a reasonable foundation in mathematics (advanced high school or college), I will add simpler, more intuitive explanations for those who would benefit from it. Examples of using the function to calculate damage multipliers are included near the end of this article.

I will not address in this article why the previous system needed to be changed; perhaps I or another staff member will write an article about that. Additionally, while I will occasionally note why certain specific decisions were made, the primary goal of this article is not to give an in-depth explanation regarding the thought process behind creating the system. This article is about the “what” rather than the “why” of the system; for questions about the “why,” I encourage you to ask either me (@charlied134 on Twitter, or in the comments here) or the developers (@wizard101devs on Twitter).

I see this article as an important step forward in terms of general understanding of Wizard101’s mechanics. Never before has there been an article such as this explaining the inner workings of one of the game’s mechanics with information coming directly from the source. While Final Bastion and Duelist101 have been known to provide these sorts of analyses (such as a legendary analysis of Wizard101’s first critical system by Mmailliw), the information in these articles came from laborious in-game experimentation rather than design information coming directly from those who created the system. From my understanding, the primary reason the Devs do not release this sort of in-depth explanation themselves is because the majority of the game’s player base would have no interest in reading about it, therefore making it an inefficient use of their time. I hope to be able to continue this sort of explanation of Wizard101’s mechanics to ensure that precise information is available.

A note

The design of the new damage/resist/pierce system took an incredible amount of effort. My own involvement in this dates back over half a year, with the developers likely spending even more time than that agonizing over this. Many different details were considered when creating the system currently in test realm, and many other systems were developed and abandoned. I personally worked with at least three different potential systems including the version in test realm. I’m sure the developers worked through others. Additionally, many issues arose, not all of which could be addressed easily or at all. I say this to make the following point: if you see a “simple” or “obvious” change that could be made to this system as a seemingly unconditional improvement, it is likely that there is a specific reason (mathematical or otherwise) that it was not implemented. The most helpful feedback will understand this and allow it to inform discussion. As mentioned above, please direct feedback or questions to me or the developers.

 

The Premise of the New
Damage and Resist System

Before discussing pierce, I will first go over how damage and resist work assuming no pierce is present. Note that the systems used to calculate damage and resist are identical (though the dashboard values differ); from here on, I will refer to this single “system” used for both damage and resist. The premise of the new system is to allow damage and resist to function exactly as they did before (i.e., 1 stat gives an additional 1% boost) until a wizard reaches a stat number specified by the developer dashboard. Note that this is not an obvious conceptual starting point for a damage multiplier system, but it was created as such primarily because it is intuitive for new players to see 1 stat as a 1% boost or reduction in damage.

After reaching that specific stat value, damage and resist begin to be calculated by a limit function that causes any further increase in stat to have diminishing returns (for every additional point of damage you have, your spells get less than 1% of an additional multiplicative benefit). If you are unfamiliar with limit functions and are uninterested in researching them, know that the idea is that as the stat approaches infinity, the amount of damage boost (for damage) or reduction (for resist) that occurs approaches a finite value rather than growing indefinitely (as was the case in the previous system).

Mathematically, the key points of the system are as follows:

  • The new system is a piecewise function that begins as a linear function and eventually becomes a limit function with a horizontal asymptote
    • The input of this function is the damage/resist stat and the output is boost/reduction to outgoing/incoming base damage multiplier in decimal form
      • Note that both outgoing and incoming base damage multipliers are 1.0, representing that spells deal the amount of damage written on their cards in the absence of stats
      • The function’s output is added to this base outgoing multiplier (for damage) or subtracted from the base incoming multiplier (for resist)
        • Example: if the damage function outputs 0.6, the outgoing damage multiplier would be 1.0+0.6=1.6
        • Similarly, if the resist function outputs 0.6, the incoming damage multiplier would be 1.0-0.6=0.4
          • The incoming multiplier is automatically set to 0.0 if the function drops it below 0.0 (i.e., you will never heal from an incoming attack)
  • The function’s form is the same for damage and resist, though the specific numbers differ
  • The function is continuous where relevant (positive values of the input stat)
  • As such, there is at least one intersection point between the linear and limit functions (by various fixed-point theorems); in relevant cases we have ensured that there is always exactly one intersection point (which the developers and I tend to refer to simply as the “intersect” or “intersection”)
  • The function approaches a limit.

So What’s the Limit Function?


When you zoom out, the function is a fairly straightforward inverse exponential function of the following form:

basic damage function latex

Here, L is the limit as controlled by the dashboard (readers with knowledge of calculus can verify L is the function’s limit as x tends to infinity), while k and n change the shape of the graph. Specifically, increasing “k” will make the graph steeper (by “squishing” the graph towards the y-axis) while increasing “n” will make the graph flatter (by shifting the graph to the left). The function’s input x is the damage/resist stat being used to calculate the outgoing/incoming damage multiplier. Though I label the function’s output as “multiplier” as a shorthand, the output could be better described as multiplier boost (as described above). As a visual, here’s what the function looks like:

damage function graph
Note that this graph specifically uses an intersection of 150 and limit of 2.0 (the relevant values for damage in PvE)

This is a very generalized function that can take essentially any desired shape depending on the values of L, k, and n. While this is incredibly useful for future modification through a dashboard, it is not very friendly when trying to implement a specific intersect as is desired for the damage/resist system. (One can verify finding values of k and n such that the intersect of a linear function of the form “multiplier=x/100” with the limit function is not straightforward). To address this, there are further formulas for k and n given in terms of dashboard-adjustable values k_0 and n_0 such that the sum of k_0 and n_0 is the intersection. These formulas are a bit of a headache to look at and will thus not be included here. Those with a sufficiently advanced background in mathematics may be able to derive them formally.

The importance of k_0 and n_0


The relevance of k_0 and n_0 is that their sum is the intersect of the piecewise function. Additionally, k and n are increasing functions of k_0 and n_0. This means that they share the property of controlling the shape of the curve; increasing k_0 increases steepness, while increasing n_0 increases flatness. Essentially, what the aforementioned formulas for k and n do is automatically generate “nice” values for k and n that correspond to the values that create a specific intersect and shape (i.e., ratio of k to n).

Typically, what we found while experimenting was that setting k_0 to its maximum reasonable value and n_0 to its minimum reasonable value for a given desired intersect produces a shape most useful for our purposes because it most naturally connects with the linear piece. Forcing the piecewise function to be continuously differentiable is possible, but not incredibly useful for our purposes because the input of the function is typically only natural numbers rather than a continuous interval.

While the dashboard presumably allows k_0 and n_0 to take any value, there are bounds on these values that create “reasonable” functions for our purposes. This is simply because the intersect could theoretically be either below 0 or above L, both of which are not useful for our purposes. Additionally, the specific formulation of n in terms of n_0 forces a conditional lower bound on it. Again, those interested may be able to derive these bounds.

What About Pierce?


Perhaps anti-climactically, pierce currently functions as it did before. This may change in the future (I have personally discussed and suggested several different ways pierce could function in the new system). As of now, the implementation of the new system will allow the developers to see how pierce operates in a new context.

To clarify, pierce will still affect auras first, with any leftover pierce affecting shields and finally directly affecting opposing resist. Against resist, pierce simply subtracts the attacker’s pierce stat from the defender’s resist stat before the defender’s resist stat is passed to the piecewise function; if 30 pierce attacks directly into 90 resist, a resist stat value of 60 will be passed into the piecewise function to determine the final damage modification. This is a simple solution that may work, though I have my doubts. The developers will be keeping an eye on it.

 

The Damage, Resist,
and Pierce Dashboard

Here, I will explain what specific values were set (to my knowledge) at the start of this Spring 2021 test realm, as well as identify the parameters within the dashboard that the developers may reference in future dev diary patch notes (as they have done in the past with certain parameters within the critical dashboard). Note that I do not have access to the dashboard and only list parameters that to my knowledge would be sensible/necessary to manipulate. See the list of likely parameters below:

  • PvE/PvP multipliers for damage, resist, and pierce stat: these are values that simply multiply all players’ damage, resist, or pierce stat by the set value before passing them into their respective functions. Expect these values to nearly always remain at 1.0, with possible exceptions including boss cheats or future PvP tournament formats.
  • PvE/PvP damage limit: these are the values of L discussed above in PvE and PvP respectively, setting the limit approached by infinite damage stat growth.
  • PvE/PvP resist limit: similarly, these would be the limit L for resist in PvE and PvP.
  • PvE/PvP damage k_0, n_0: these are the values k_0 and n_0 that determine the intersect and shape of the damage function in PvE and PvP respectively. Expect these to change as the developers test different values for the intersect (especially in PvP).
  • PvE/PvP resist k_0, n_0: similarly, these are the k_0 and n_0 values for resist in PvE and PvP.

Though the [test realm update notes] likely explain this, here is my knowledge (or educated approximation) of what these values were initially set to (note that many of them are likely to change or have already changed depending on when you read this article):

  • Multipliers: 1.0 for all three stats
  • Limits:
    • PvE damage: 2.0
    • PvP damage: 2.0
    • PvE resist: 1.25
    • PvP resist: 0.7
  • k_0, n_0:
    • PvE damage k_0: 190
    • PvE damage n_0: -40
      • Therefore, the intersect is 150
    • PvP damage k_0: 140
    • PvP damage n_0: -40
      • Therefore, the intersect is 100
    • PvE resist k_0: 120
    • PvE resist n_0: -20
      • Therefore, the intersect is 100
      • Note that the intersection at 100 implies that there is absolutely no functional change for resist in PvE – it’s as if there was no change at all to resist in PvE
        • This may change in the future due to a pierce change or dashboard adjustments
    • PvP resist k_0: 65
    • PvP resist n_0: -15
      • Therefore, the intersect is 50

The numbers to keep in mind here are the limits and intersects. The limits represent the theoretical maximum amount of damage boost or reduction to any spell. These limits are represented as decimals to be added to (for damage) or subtracted from (for resist) 1.0 to obtain the outgoing (damage) or incoming (resist) damage multiplier. For example, a 1.5 damage limit represents a 2.5 outgoing multiplier limit (corresponding to what was previously 150% damage); similarly, a 0.7 resist limit represents a 0.3 incoming damage multiplier limit (corresponding to what was previously 70% resist).

The intersect represents the point at which diminishing returns take effect for damage and resist gain. At these stat values, 1 stat no longer corresponds to 1% boost, instead corresponding to a smaller value depending on how high your total stat value is. For example, a resist intersect of 50 means every resist stat point above 50 will not give you a full 1% incoming damage reduction.

 

Practical Examples

Here is the calculator referenced below (also referenced at the beginning of this article). This calculator will allow a user to input damage, resist, and pierce stats, while outputting outgoing, incoming, and total damage multipliers for both PvE and PvP. In the future, other calculators might be made to help compare stats such as damage and critical or resist and block.

Case 1
  • PvE
  • Attacker: 180 damage, 25 pierce
  • Defender: 90 resist

First, you need to calculate the value of the outgoing damage multiplier. To do this, the attacker’s 180 damage becomes the input of the damage function. Because the intersect of this function is 150, the attacker’s 180 damage will be affected by the limit function. Putting this into the function gives 1.688, meaning your 180 damage stat will give you an outgoing damage multiplier of 2.688 (as the calculator shows).

To calculate the incoming damage multiplier, you first deduct the attacker’s pierce from the opponent’s resist to gage functional resist. 25 pierce against 90 resist implies 65 functional resist stat. This is below the PvE intersection of 100, so the 65 resist stat will function as 65% resist did previously. This implies an incoming damage multiplier reduction of 0.65 and therefore an incoming damage multiplier of 0.35.

The total multiplier, then, is the product of the incoming and outgoing multipliers, which in this case is 0.9408.

Case 2
  • PvP
  • Attacker: 130 damage, 35 pierce
  • Defender: 90 resist

Note that 130 is above the intersect of 100. Putting this into the function spits out 1.227, meaning your 130 damage stat will give give you an outgoing damage multiplier boost of 1.227; therefore, your outgoing damage multiplier will be 2.227 as the calculator shows.

Note that the functional resist of 55 is above the intersect of 50. Putting this through the function gives 0.537; therefore, your incoming damage multiplier will be 0.463 as shown by the calculator.

The total multiplier, then, is the product of the incoming and outgoing multipliers, in this case 1.031.

Case 3
  • PvE or PvP
  • Attacker: 85 damage, 15 pierce
  • Defender: 40 resist

Since all of the values involved are below the relevant intercepts for both PvE and PvP, the damage modification from these stats under the new system is no different than how they acted under the old system. Namely, the outgoing multiplier will be 1.85 while the incoming multiplier will be 0.75, for a total damage multiplier of 1.3875.

This example is simply to illustrate that as of now, only extreme stat values are affected by the new system.

Takeaways

So what does this mean? There are some different takeaways for PvE and PvP. Take a look at the lists below:

PvE
  • Only damage stats above 150 will be affected
    • This means the change will only affect the damage of glass cannon builds (balanced builds should be unaffected)
    • You might want to reconsider that quint damage mighty pet in terms of “optimal” damage output – critical talents may give a better EV than the low damage talents
  • Resist is unaffected in PvE
    • Immunity is achievable and no more difficult to obtain than before
    • Additionally, any resist you have over 100 will continue to act as a buffer that counters opposing pierce
PvP
  • Damage will be affected for most schools relatively equally
    • Builds that are at or below 100 damage will be unaffected
      • Therefore, bladestacking and other more defensive strategies will be less affected by this
    • Damage reduction for builds in the 120-140 range will likely end up at 5-15%
  • Resist will only be affected if resist is above 50 after deducting the attacker’s pierce
    • This is a very small change; taking 35 as average pierce, a defender would need above 85 resist to see any loss of effectiveness in their resist
      • This implies that only ultra-defensive ward builds will be affected at all, with only absurd (100+) levels of resist seeing significant change
      • Additionally, open attacks using Shadow Shrike will essentially see no change in damage output compared to the previous system (pending any changes to how the spell works)
      • Only expect to see any notable change in matches where the defender has set extremely hard for the attacker
    • Shielded attacks, however, are more likely to go up in damage because the shields absorb an attacker’s pierce, leaving resist to be cut down by the limit function (though this is at best a consolation prize)
    • I have recommended that the PvP resist intersection be lowered simply because in the short term, resist is not taking a nerf in PvP
      • The Devs are starting with a conservative number likely to align more with the status quo (i.e., the previous system); we will have to see where it ends up based on data, experience, and feedback
      • Additionally, a pierce rework down the road will likely make this “problem” obsolete

Overall, the new system does not have an extreme effect on current balanced stats. Resist in particular is completely unaffected in PvE and nearly unaffected in PvP as well. Damage takes a more noticeable hit, but only the most extreme cases will see serious stat reduction. To reiterate, expect the numbers to change during this test realm and beyond, be it for balancing reasons or simply to keep up with an increasing level cap and more powerful gear. Though functional resist is essentially unaffected because pierce has not been changed, the infrastructure is in place to handle resist.

Share your vote!


Do you like this post?
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid
Charlie

Former Duelist101 editor who at times contributes to Final Bastion with his mathematical mind, and impeccable eye for the little details we all may overlook at some point.

48 COMMENTS

  • But wait, how does this change anything?

    I don’t have a background in mathematics so I presume I’m wrong; I’m asking a question not calling you wrong, but how does this actually balance anything? Doesn’t it still have the same dynamic?

    To my understanding, Damage needed to rise exponentially just to keep up with the linear increase in Resist, because Damage has constant returns while Resist has exponential returns. Is this not still the case, just with lower values, under the new capped system?

    In your own Case 2, all you’re doing is reducing 130% Damage and 55% Resist to 122% and 54% respectively Putting these through a calculator just gives has the new capped system as doing slightly less damage.

    Damage still needs to increase more or less exponentially to counteract Resist’s linear increase. So what’s the point? Is this just about decreasing damage overall?

    I know you’ve been working on this for a long time so I highly doubt I disproved its necessity with my ten-minute reading of the article, I’m just curious about the why.

    • One of the major issues is that resist cannot go above 100. This means that there was a natural limit (in the non-mathematical sense) to how strong of stats gear could give you. The developers provided an excellent example of this on their twitter page: robes designed in the early 2010s and robes designed in 2020 have similar resist stats, something that absolutely should not be happening since there have been 70+ levels added to the game since then. This means that as time goes on, it becomes more and more difficult to incentivize people to keep using new gear as opposed to old gear. I may be wrong here, but the highest resist robe (tied) was designed around 2014-2015 and there have only been riffs on that robe ever since.

      Under this new system, it becomes possible to give gear “better” stats numerically than before without having stats that are so ridiculous the characters achieve literal god-like power. Imo, the point was that before this change there was a small and rapidly shrinking design space for gear upgrades (in addition to dampening out of control resist and damage stats in pvp). Now, the space has increased dramatically and there should be no issues with sustainability going forward.

      • What about Armor Piercing, a 2011 added stat?
        “Armor piercing counters resist. This percentage lowers your opponent’s resist and can reduce the resist of shields. If you had 20% armor piercing and the boss had a 50% tower shield on, then your attack would lower the tower shield to 30%.” from Final Bastion
        “The Pierce stat is unchanged at this time. It is important to note that Pierce is applied to the Resist stat before the Resist stat is applied via the new limit formulas. Players may find some value in chasing Resist well above the intersection in order to serve as Pierce insurance.” KI Damage/Resist Stat Limits anouncement
        So, having 120% Resist against a 20% Armor piercing attack might be worth having. Hope those peircing stats don’t increase above 25% because the Resist limit is now 125% PvE (only 70% in PvP).
        It takes a lot of time and effort to farm, craft and/or buy multiple Crown packs to get high value stats plus time and effort hatching pets over and over and over to get pets with high value stats.
        Reducing these stats means that all that time, effort and Crowns only to get “diminishing returns for higher stat values” gear/pets means that higher level wizards have no reason to spend all that time, effort and Crowns.
        And of course, KI leaves it open to changing other stats to “balance the game”.

        • Like this article notes, resist in PvE is effectively unchanged. The resist limit of 125 is irrelevant because the intersection is 100 and pierce is applied before resist is passed into the function (all explained in the article – I suggest you take a closer read if you need more info). Immunity is still equally easy to achieve and any resist over 100% will continue to act as a pierce buffer.

          Diminishing returns doesn’t mean useless – stats are still useful (I suggest checking out the calculator linked in the article). If anything, it’s incentivizing weighing other stat options besides min maxing damage or resist.

          • Risist is clearly changed in PVE: “Resist Intersection – 100 / Resist Limit – 125”
            With Armor Piercing jewels with up to 6% combined with Infallible with 20% and Extraordinary with 20% treasure cards, a player can get Armor Piercing to 46% (plus gear stats). What do the bosses have? Usually better than the players and so many of them cheat. The only way to keep Resist “effectively unchanged” is to never allow Bosses to have higher levels of Armor Peircing. And will the next world and new special dungeons have bigger and badder bosses? Of Course, but players are now capped on these two stats with KI keeping their options open to capping or changing other stats. BTW, will the wizard stats page show the pre-limiting levels of Resist since that is what applies to Pierce? Or just the limited/capped PVE and PVP value as shown now?

            AND PvP with a resist cap at 70%, well that is a big change. (I get that facing another player that has 100% resist to your school is not fair.)

            Immunity is not “easy to achieve” and is the significant effort worth it? Time will tell. People have gotten Imunity for single schools but I have not read any report where a wizard has achieved Immunity for all schools (unlike Malistaire the Undying). If Membership drops off (esp for ones with High Level wizards) it won’t be blamed on this change. After all, there is always something newer and better and more exciting around the corner. On the other hand, maybe people will stick around for the Fishing or Gardening – lol.

            I didn’t say that Diminishing returns were useless – just that the effort to get to a capped wizard is not worth it. And once you reach these caps, there is no point in making a better damage and/or resist wizard, no point in getting higher level gear, no point in buying Crown gear. The challenge is over.

            As far as players focussing on other stats… Am also sure that “Combat Balance Improvements” will continue. The announcement states that “The Pierce stat is unchanged at this time” – clearly indicating that Pierce IS on the table to being changed. Maybe max Health will be capped next. Or maybe a universal 10% chance of a fizzle regardless of the accuracy of the wizard. (Ever notice that with some Bosses or dungeons your wizard fizzles significantly more often that during other battles? hmmmm) Or maybe bosses will steal the wizards pips (oh wait, already have that). What will KI do about all those wizards that seem to cast spells always boosted with Critcal? Easy, diminish and cap Critcal too. And all those One-Shot wonders that show up in Team Up? Just let the Bosses cheat and recover like trick birthday candles (already have bosses that summon new minion when the old ones are defeated). KI could have just kept making bigger and better Bosses for PvE. They could have approaced the dynamics of PvP another way to balance PvP. Guardian Spirit was changed for PvE because people complained about the high level of health regained after being defeated in PVP. Taking stuff away from people that they worked so hard for the stats is a downward spiral.

        • Judging from your most recent comment, you still haven’t read and/or understood the article. I suggest you take a closer look to understand why your statement “Resist is clearly changed in PvE” is incorrect. Pierce is calculated before resist is passed to the limit function.

          • In another reply you said that KI’s “explanation in the update notes is perfectly sufficient for normal gameplay, that being “there are now diminishing returns when you get stats above x number, with a limit at y number.”
            And KI says that these are the changes:
            Affected Stat PvE PvP
            Damage Intersection 150 100
            Damage Limit 200 200
            Resist Intersection 100 50
            Resist Limit 125 70
            And explicitly state that:
            “A player with a Resist stat of 100 or below will see no change to his Resist values; players with a Resist stat over 100 will see diminishing returns in the amount of Resist he or she receives with a practical limit of 125%.”
            So, you are saying that the anouncement is wrong???? Why include it in the anouncement then. Why not let people have resist of 200 in PvE if it really is unchanged? But clearly KI did change Resist for PvE.
            Equally clearly, more such changes are being considered including the statement that:
            “The Pierce stat is unchanged At This Time.” And you state in this article that Pierce “may change in the future (I have personally discussed and suggested several different ways pierce could function in the new system).” With this change – particularly for PvE – nothing is off the table for future changes and KI may well decide to have Pierce apply to Resist AFTER the limit function instead of before. Easy Peasy. Just a small code change. Or give Bosses 50% Pierce or 95%.
            Nothing KI said and Nothing you said give PvE players any comfort that these stat changes were necessary or make PvE gameplay better. Muck with PvP all they want (probably wouldn’t say this if the kids did PvP) – they can look at the numbers on PvP to see if activity declined (esp for high level wizards) before and after this change. The effect on PvE will be very subtle. Membership renewls will drop off somewhat randomly as players feel the impact of Balancing – hard to tell the difference between a player getting tired of the game and those that don’t like this change.
            And don’t forget the Spell Audits (“Our spell audit continues”). Balance wizards are hobbled while other schools get higher level traps and blades than Balance.
            “Balance blades and traps, because they are universal-type damage and easily stacked, remain at +25%.”
            So, any solo wizard with one trap (30%) and one blade (35%) will achieve a 76% hit boost except a Balance wizard (with 25% each) that only gets a 56% hit boost (look math). I guess that is fair because Balance wizards are just Helper wizards and don’t solo very much.

  • Can someone explain this so kids (the target users of Wizard101) can understand it. Seriously, KI expects kids to understand this kind of math? I gave up on trying to explain the benefits of stacking because it was too hard to understand. I finally said that they would get much more damage soon with both a blade and a trap that if they only used one at a time.

    • No, KI doesn’t expect everyone to understand this math – that’s one reason why they don’t give this explanation themselves. Their explanation in the update notes is perfectly sufficient for normal gameplay, that being “there are now diminishing returns when you get stats above x number, with a limit at y number.” This article is meant for people interested in what specific mathematical system was put into the game, which is definitely not necessary information – in fact, I would call it a luxury to have this information at all. I would suggest using the concise explanation in KI’s update notes (and re: buffs, maybe something about how repeated multiplication works).

      • “The biggest change in this update from a combat perspective will be the new Damage and Resist stat limits. Rather than continuing on a 1% bonus per 1 stat point linear progression, both Damage and Resist will now follow a stat curve – a limit function – that gives diminishing returns for higher stat values.” This “explanation in the update notes is perfectly sufficient for normal gameplay” – Seriously??? We get diminished returns. The more effort we put into the game, the less we get?
        Actually, the simple explaination is that all that time and effort to make the best wizard has been a waste. No problem for early players and casual players. But for the serious hard core players, part of the game was making the biggest and baddest wizard. Guess those wizard will be leaving for the next new game.
        It used to be as you leveled up your wizard got stronger and the bosses got stronger. Will KI be limiting the the bosses, retroactively as they have done our wizards?
        Oh well, the kids will soon graduate and find more interesting things in life.

      • Just find a quiet place to get them to One In A Million in steps.
        It’s a great lesson in the power of compound interest.

  • Cool so the build I spent hours making is now irrelevant. Thank you so much! Hate this <3

    • I agree with you, we spend countless numbers of hours farming for gear, or crowns in packs, then if you buy a hyper elixir it is irrelevant. I have this. Why fix something that isn’t broken, and these Devs That came in later then when the game first started and I started in 2008 have made this game a total mishmash of stabbing the members in the back. I am hating this as well. These set stat bonus’s mean nothing then? Why bother buying packs for gear or mounts then. Hundreds of thousands of dollars we have spent in our home, and now this. Come on, we need actual reasons as to WHY? Not mathematical formula’s and why this is all relevant.

      • I have spent countless hours farming, making the perfect pet, getting the correct jewels, spending REAL MONEY on crowns to get packs, etc. So much time and money spent for my build on my storm. And now they do this? My only option IS glass cannon as a storm. We don’t get good health, don’t get good resist, all we get is damage. A storm with resist is MENTAL. And now that is taken away from me? What’s the point KI? Change it back, there was NO NEED FOR THIS.

  • Calculator has been added (at the beginning of the article and at the beginning of the examples section)

    • I think the problem goes even deeper than this. These changes, especially the very recent critical nerf, are disproportionately hobbling the glass cannons. I can accept that many people don’t want to be glass cannons, or don’t like glass cannons, or perhaps don’t even respect glass cannons, but does that mean they shouldn’t exist? Imagine how the healers would feel if you took away AOE heals and they had to help teammates one at a time, or how tanks would feel if they had their resist and block nerfed. For better or worse, the glass cannon is my identity in this game and if glass cannons are eliminated (by hobbling them so severely that they are no longer glass canons), then i dont have a place here. Isn’t that why we have personality specific schools, so that everyone can have an identity?

  • Good engineering practices follow Einstein’s famous quote “everything should be made as simple as possible, but no simpler”. It’s not always easy, but as a designer we ALWAYS strive to keep things simple.

    Suggestion 1:
    Include the ACTUAL (adjusted) calculated values for damage & resistance on the ‘Character Statistics’ page. This keeps things simple by eliminating the need for a calculator. However, I’d also include a ‘calculator’ interface for each wizard whereby interested users can create their own ‘what if’ scenarios.

    Suggestion 2:
    Implement a ‘wizard level’ factor into the adjustment algorithm by manipulating the intersection point of the 2 piece piecewise function. e.g. the intersection point would be 140 for a level 140 wizard, 130 for a level 130 wizard, etc. Perhaps level x and below wizards don’t have any adjustments made. Again, it can be designed so users can understand.

    Suggestion 3:
    Include on the ‘Character Statistics’ pages a simplified graph (similar to yours) conveying the piecewise functions and the data points where one’s wizard is currently at. Pictures are worth many words – making things simple and easy to understand for the end user.

    Suggestion 4:
    Fortunately, my Engr degree included differential, integral and multi-var calculus coursework so I’m able to follow your mathematics. However, resolving ‘tanks’ and ‘glass cannons’ issues shouldn’t require an Engr, CS, Math, etc. degree to truly understand the algorithm used to do so. It’s always very desirable to keep things “as simple as possible” for the coder, support person, and most importantly the end user.
    My idea is to implement the first order approximation for an exponential function -> a piecewise function consisting of two differing linear portions with a point of intersection. This is a fairly accurate approximation over the operational (vs. theoretical) domain of the function. e.g. damage of 150 to 220.

    e.g. of my damage adjustment function.
    For the domain: 0 <= Damage Input = 150, Boost to Damage Multiplier = 1.5 + {(Damage Input-150)/200}

    A damage adjustment summary for players simply becomes: “All damage above 150 is cut in half”.
    It really becomes that simple. A similar function & statement can be derived for a resist adjustment function. Functional changes can be made using a different intersection point, different slope for the second linear portion, and changes to include implementation of suggestion 2.

    My $.02

    • My previous post included an incorrect portion. My e.g. of my damage adjustment function should read:

      For the domain: 0 <= Damage Input = 150, Boost to Damage Multiplier = 1.5 + {(Damage Input-150)/200}

      • I’ll try once more. Perhaps I’m having problems typing. My example should read:
        For the domain: 0 = 150, total Boost to Damage Multiplier = 1.5+{(Damage Input-150)/200}

        Thank you

      • One last time as I’m not sure why my 2 formulas for the two regions are not showing up properly in my replies – perhaps a control character is involved. I will simply leave it to the interested reader to derive the 2 basic equations – domain dependent.

    • I was actually hopping that the exponential function would behave more simpler than this and this was the calculator that I came up with.
      https://www.desmos.com/calculator/ah6mrclkqd

  • Resist in PVP is not urelatively untouched. Hitting into shields is now far more viable against players with very high resist.

  • The formula for PVE damage formula I got from your equation was 2 – 2/(e^(0.0160168-1.01623692)).

    • Numbers are slightly off but should be enough to approximate. I should have a precise calculator out by tonight or tomorrow.

  • When you say that “k_0 and n_0 are increasing functions of k and n, respectively”, does this mean that k_0 does not depend on n, or just that k_0 is an increasing function of k for any fixed value of n? Also, is there any dependence on L?

    • It’s more useful to think of k and n as functions of k0 and n0 (edited to clarify)

  • As far as im aware, the current crit system requires far more crit rating to increase the dmg beyond that of pure dmg. Meaning a max +41 crit on pet is still worse at lvl140 than +3.2 dmg… I don’t like how much the mechanics of the game are changing… It feels like builds I am making will be irrelevant in 6 months

    • That’s going to depend on how high your damage is and how high your opponent’s block is, but the EV of a critical talent will be better in some cases

  • You said, “To reiterate, expect the numbers to change during this test realm and beyond, be it for balancing reasons or simply to keep up with an increasing level cap and more powerful gear.” The devs have also stated that the parameters in the limit function will be changed in the future. Do you have an idea of how often the parameters will be changed?

    I’m specifically asking because I don’t like the fact that a significant portion of our character improvement will now come from changes to the limit function, instead of from leveling up and getting better gear. It seemed like a good solution to this would be having the limit function depend on your wizard’s level, so that the limit function changes gradually. Ratbeard said that this was considered, and I’m wondering why it was rejected. I can see that it might not be necessary if the damage intersection and limit are changed often (e.g. each time the level cap increases), but I also see benefits to this system (see the test realm forums).

    • We did talk about that. It wasn’t “rejected” – as of now it’s just more important to see how the system is working before trying to plan for the future. The parameters will be changed whenever there’s a reason to (it’s not hard to do).

      • That makes sense. Do you have thoughts on the having the limit function depend on the level of the wizard, and not just the level cap? I thought it would be cool to see your damage multiplier increase (slightly) when you level up. This could also somewhat bridge the gap between gear sets (e.g. olympus to waterworks to darkmoor to dragoon).

        • That was an idea I tossed out that I think could work. I think a lot of it depends on how pierce will change and if there could be a similar level-based system for the resist limit.

          • Thanks for the responses! 🙂

            I was mainly thinking of PvE since I don’t do PvP. Also the leveling up aspect would mostly be cool while questing. Pierce isn’t as relevant in PvE so I don’t think it would matter as much there, but I guess having a somewhat unified system is good.

  • It seems like the three relevant parameters for the curve are limit (L), intersection (I), and “steepness/flatness” (c). Why not rewrite the formula as:

    multiplier = L-(L-I)*e^(c*(x-I))

    This is still the same thing, but now the parameters that control steepness and intersection are not tangled up together.

    • Sure, you can do that

      • I thought this formulation might be simpler (e.g. for the dev dashboard), as I don’t see what the values k_0 and n_0 represent on their own.

        Also, I haven’t yet figured out how to determine k and n from k_0 and n_0; the data points in the article don’t seem sufficient for that. Could you provide a little more detail on this?

        I’m trying to determine what c is (in my formulation) for the PvE damage function. From testing in test realm I got that c is roughly 0.016. Do you have a precise value for c or does the (k_0,n_0)->(k,n) function makes it too ugly?

        • I think n can be expressed as a function of c and l, but going the other way cannot be done in terms of elementary functions.

          Charlie’s formula gives L – L/e^(kx + n); yours gives L – (L – l) e^(c(x – l)).

          Subtracting both sides from L, we have
          L exp(-kx – n) = (L – l) exp(c(x – l)). From here we can see that c = -k (for example, take logarithmic derivative with respect to x).

          But then L exp(-n) = (L – l) exp(-cl) = (L – l) exp(kl).
          Taking natural logs (“log” will mean natural log) yields
          log L – n = log(L – l) + kl and therefore
          n = log(L/(L – l)) – kl.

          For PVE damage multipliers: we use c = 0.016 (estimated) for k = -0.016. Using L = 2; l = 1.5: L/(L – l) = 4 and therefore n = 1.4103 or so. We confirm that 2 – 2/exp(1.4103 – .016x) equals 1.5 right around x = 1.5 and is indeed increasing in x with asymptotic limit 2.

          We can do the same thing for the other functions if we have c properly estimated.
          But inverting this latter function cannot be done in a straightforward way…

        • I think n can be expressed as a function of c and l, but going the other way cannot be done in terms of elementary functions.

          Charlie’s formula gives L – L/e^(kx + n); yours gives L – (L – l) e^(c(x – l)).

          Subtracting both sides from L, we have
          L exp(-kx – n) = (L – l) exp(c(x – l)). From here we can see that c = -k (for example, take logarithmic derivative with respect to x).

          But then L exp(-n) = (L – l) exp(-cl) = (L – l) exp(kl).
          Taking natural logs (“log” will mean natural log) yields
          log L – n = log(L – l) + kl and therefore
          n = log(L/(L – l)) – kl.

          For PVE damage multipliers: we use c = 0.016 (estimated) for k = -0.016. Using L = 2; l = 1.5: L/(L – l) = 4 and therefore n = 1.4103 or so. We confirm that 2 – 2/exp(1.4103 – .016x) equals 1.5 right around x = 1.5 and is indeed increasing in x with asymptotic limit 2.

          We can do the same thing for the other functions if we have c properly estimated.
          But inverting this latter function cannot be done in a straightforward way…

          • This is pretty similar to what I did. My main goal was to determine how k and n depend on k_0 and n_0, and I think these calculations show that the article doesn’t provide enough information for us to do that.

        • I don’t have that value because that’s not how we formulated the function (I’d have to do some algebra). It probably involves at least a couple natural logs.

          • The value for c in my formulation is the same as the value for k in your formulation, if that helps.

        • Update to my previous comment: I think your estimate of c uses the wrong sign: with a positive sign your function goes to -infinity as x goes to infinity. The values that seem to work are actually c = -.016 (x expressed as a percentage) or c = -1.6 (x expressed as a decimal – e.g. 1.5 for 150 percent).

          Then k = 1.6 (x as decimal) or .016 (x as percentage) and n is around -1.0137. The intersection and limit are in the right place, and Example 1 is very close to confirmed (we see 1.691 instead of 1.688)…

          Also, 160 damage gives a 2.574 multiplier, 170 gives a 2.637 multiplier, 190 damage gives a 2.736 multiplier and 200 gives a 2.775 multiplier. While 208 damage is enough for a 2.8 multiplier, you need 250 damage or so to get all the way up to 2.9 from there, 294 for 2.95… and you’ll never pass 3, of course!

          • Sorry about that. It was just a typo in my original post (I meant to put -c instead of c in the exponent).

        • While editing, I was able to derive k and n as functions of k_0 and n_0. I think I can provide this much detail (this is what I did):

          Find an expression for the intersection of the linear multiplier formula and the exponential formula. The x in that expression represents the intersection. Then, find a value of k such that the intersection is 1 higher (without loss of generality, you can assume n=0 during this exercise). Next, given that formula for k, you need to find n as a function of the parameters of the model (this requires some cutesy algebraic tricks and applications of the definition of the intersection).

          You can then verify your final formula has all the “correct” properties. The process sounds a bit ad hoc, but it works

          • I believe that you came up with functions k and n of k_0 and n_0, but I’m not convinced that the functions you derived are the only possible functions, given the form of the limit function and the fact that the intersection is k_0+n_0. You would have had to make an additional assumption that was not given to obtain a unique answer.

            I tried doing what you described, but your explanation was not super clear. If we have a value of k with and intersection of I, then to obtain an intersection of I+1 without changing n, we would need to replace k with k’, where

            k’=(I*k+ln(L-I)-ln(L-I-1))/(I+1).

            A formula for n in terms of the other parameters is n=ln(L)-ln(L-I)-k*I.

            I’m not sure what you did after this because you didn’t really describe it. My best guess is the following: Start at I at some value, and then increase I by 1 an appropriate number of times (repeatedly updating k) until we have I=k_0+n_0. Then find the value of n given k and I. This process, or a process like it, is certainly one way to obtain k and n from k_0 and n_0 subject to the restriction I=k_0+n_0. However this is definitely not the only way to do it. We still need another piece of information relating the parameters L, I, k, n with k_0, n_0.

  • I’ve been waiting for this for so long (and am looking forward to further updates)! Two things that don’t quite look right in the examples:

    -From Case 1 we have “25 pierce against 90 resist implies 75 functional resist stat.” (but 90 – 25 is 65, not 75, right?) If we replace 75 with 65, we need to carry that new value throughout the calculations… unless I somehow forgot how to understand Pierce.
    -From Case 3 we have “Namely, the outgoing multiplier will be 1.7 while the incoming multiplier will be 0.75, for a total damage multiplier of 1.275.”: are we subtracting the 15 Pierce from the attacker’s 85% damage to get 1.7 instead of 1.85? Again, unless I’m misunderstanding how Pierce works, I don’t think it does anything to your own attack! The Pierce would indeed change the defensive multiplier to 0.75, but I would expect the total damage multiplier to be 1.85 * 0.75 = 1.3875… unless I’m missing something here!

    • Thanks for that – as I updated the guide as info changed this past week I tweaked the examples a bit and seemingly didnt update those numbers. Hope you’re doing well, Mr. Professor Emeritus!

      • There’s still a typo: “so the 65 resist stat will function as 75% resist did previously.”

Leave a Reply

Your email address will not be published. Required fields are marked *