Ben "Ratbeard" Durbin
Let’s start with a recap on why we’re undertaking the stat rebalance in the first place. It bears on what we’ve done so far, what we’ll explore shortly with Crit/Block, and how we will approach stat rebalances for other stats in the game.
First and foremost, the stat rebalance is intended to solve the problem with stats that have reached the practical limit for growth. With some exceptions, any percent-based stat (resist, accuracy, pip chance, pip conversion, etc.) that reaches 100% has no more room for growth, and that ties our hands with respect to raising the level cap and enticing players with new content and new gear. From level 1 to about level 100, each new world brought new gear, and players could mix and match (aka min/max) to chase particular stats for particular builds.
As these stats reached their practical limit, our options were either to increase new gear only marginally (in which case players were not motivated to chase the new gear) or to add other stats to new gear. This created a problem of a different sort: the dissolution of school identity. For example, when there was no more room to increase Resist on Ice gear, we compensated by adding other stats (damage, crit) that had room for growth. But these stats had room for growth specifically because
they were meant to lag behind other stats.
The stat rebalance we are currently undertaking will shift stats away from fixed limits and allow us to restore more stat-based school identity. This is not to say that you cannot chase gear to shore up your school’s weaker stats, just that we’ll have more flexibility to create gear where you’ll actually have to make choices about what stats you want to chase. In part this relies on the stats you’ll see on the gear, and in part this relies on changing the way the stats work to create “soft” caps instead of “hard” caps.
The How (Technical Details)
After our rebalance, most stat calculations will use limit functions of the general form f(x) = x/(x+a), where x is the stat in question, and a can be any positive number – perhaps a constant (set in a combat config file) or even another stat. Where percent-based stats are concerned, we look for functions with a limit of 1 (ie 100%), but we can create functions with lesser or greater limits, as needed. This general approach allows players to pursue higher and higher values of x without fear that the resulting value reaches a broken state. We set the limit as appropriate for each stat and allow players to chase gear with higher values of x in pursuit of that limit.
In the basic form of the function, diminishing returns set in. Eventually a player will reach a value for x that is close enough to the limit that the player isn’t motivated to chase any more. We address that by integrating the opponent’s stats into the function: a value of Resist that approaches the limit when your wizard is level 50 may no longer be satisfactory when your wizard is facing level 100 foes.
Crit and Block
Both Crit and Block have a base chance of success (derived from your character level) which is then passed through a limit function that compares the attacker’s Crit to the defender’s Block. The attacker rolls and attempts to crit, and if he is successful, then the defender rolls and attempts to block.
The new formulas are designed to allow Crit to outpace Block. The goal here is to preserve that “magic moment” where the spell is cast, the cinematic plays, and both players anxiously wait to see whether the attacker crits and the defender blocks. Getting the RNG exactly right to create a dramatic moment (as opposed to a frustrating moment) is a tricky thing.
For two high-level characters with equal values of Crit and Block, the new Crit/Block formulas result in a 75% chance to Crit and a 25% chance to Block. Overall this creates a “crit fail” chance – that is, the combined chance that in two subsequent random rolls, either the attacker fails to crit, or the defender successfully blocks – of 43.75%; thus, the attacker has a 56.25% chance overall to Crit.*
If the defender successfully blocks, the calculation ends there – the block negates the crit and no additional damage is dealt by the attack.
On the other hand, even if the defender does not block
, his Block stat protects him from critical hits. In the next step of the combat calculation after a critical hit, we calculate the critical damage multiplier using a function that compares Crit and Block once again. For players with 0 Block stat, the maximum critical damage multiplier is x2; for a defender whose Block stat is appropriate for their level (in comparison to the attacker’s Crit), the resulting critical damage multiplier usually falls in the x1.2 to x1.4 range.
It is always
good to have a high Block stat, even if you do not successfully Block a crit.
* Some other useful high-level comparisons/matchups:
- Attacker has x2 Crit stat vs. defender Block stat: 86% crit, 14% block; crit damage multiplier x1.40
- Defender has x2 Block stat vs. attacker Crit stat: 60% crit, 40% block; crit damage multiplier x1.14
PvE vs PvP Customizability
Our approach throughout the stat rebalance has been to minimize changes that are “player-facing.” By this we mean that – as much as possible - we want the game to feel
different, but not look
different. This requires a little bit of extra work as we commit to rebalancing PvP – whose players by and large do
want the game to feel different. For PvP players, the game should feel different but not look too different; and for PvE players, the game should feel about the same and
look about the same. To this end we have three guiding principles:
- Redesign the formulas, not the stats
- Build formulas with customizable parameters to balance PvE vs. PvP
- If stats must change, change mob stats before changing player stats
An example might help illustrate this approach. Our first stat rebalance was the change to the way that shadow pips work. The formulas we created to rebalance shadow pips include several different parameters that control the pace at which the shadow gauge fills, as well as the ability to differentiate between PvP and PvE, between solo and team play, and whether or not the opposite team is human (PvP) or AI (PvE). Without requiring any new code, the Design team can increase or decrease the shadow pip rate simply by changing a couple of parameters in a configuration file – and we can change PvP independently of PvE (and vice versa). (In fact, we did just this during the Test Realm that included the rollout of the shadow gauge, increasing the rate of shadow pip gain for PvE without increasing it for PvP.)
To recap: rebalance stats via limit functions
that integrate both attacker and defender stats into the calculation, thus creating soft caps and a chase for better gear to keep up with the stats of your opponents. Our next (and most daunting) task is to rebalance the Damage/Resist/Pierce loop; we’ll share more information on that as appropriate. We’ll also address to Accuracy, Pip Chance, and Pip Conversion; it's unlikely these three stats will include any opponent stat comparisons so we’ll need to handle them a little differently.
Speaking of handling things a little differently, you may notice that these Dev Notes precede Test Realm, as opposed to being released after Test Realm (as a backwards-looking explanation) or even during Test Realm (as a reference to current implementation). The feedback that we have received so far over the last couple of updates has been excellent; prepping you in advance this time with What we’re hoping to accomplish, Why we’re attempting it, and How we’re going about it should further elevate the discussion and get us all pulling together in the same direction: many more years of great Wizard101 gaming!
Please let us know what you think of this dev diary update in the Forums
Ben "Ratbeard" Durbin
Dated: October 14, 2020