Welcome Guest:

Other MMO Coverage

322 MMOGs and counting...
Become a Premium Member today!

Champions Online Developer Diary - Systems Balancing, Pt 1.

Posted November 4th, 2009 by B. de la Durantaye

The equations behind the systems of Champions Online
by Brian Urbanek
Systems Designer
Cryptic Studios

Twenty points of energy equals twenty five points of damage, and players should survive about twenty seconds of trading punches against an enemy of approximately equal power.

That's about it.

Well, okay, there's a bit more to it than that.

The first step to balancing a game is generating your baselines. "Baselines" are average, expected values of just about everything. We have baselines for expected hit points, attributes, damage done, resources gathered, and most every other stat, metric, or value you could imagine.

Generating these baselines is half art, and half science. The "art" part comes from figuring out what kind of game you want to make. Different genres and play styles lend themselves towards different target ideals of "good balance," and hence valid baselines. A game that's supposed to simulate a gritty, street level police drama, where a gunshot is extremely dangerous, requires very different assumptions (and different math and systems) than a game that's about super heroic action.

Once you think you have a good grip on the fuzzy "art" part of your baselines, comes the hard math of making sure they feed into each other in a way that makes sense.

Putting this into concrete Champions terms, let's look at attributes, life expectancy, and DPS. So, first, the "art" part. There's no hard, math-based particular reason why Champions characters at creation have stats that range from about eight to twenty, or why I set the "target" peak value of a stat at level 40 to be 200. Basically, I thought the numbers just looked nice. They're understandable, they allow sufficient whole number resolution and sufficient room for growth and variance. Really, we could have made the range from 1 to 10, or 73 to 9,436, and had everything else in the game could still be made to scale the same way, and the game could have had exactly the same "feel" that it does right now. If it's not yet clear why that's true, keep reading, and I'll put it all together by the end.

The next step was working out the rate at which a player's expected stat value would grow. The simplest answer is what's called a "linear progression". That would be where I take the expected peak at level one (about 20), subtract that from the top value (200), and divide the result by the number of levels over which you can earn those points (39), yielding a stat max growth of about 4.6. Well, that's a perfectly valid and satisfactory number, but it doesn't quite hit the right flavor. The nature of an MMO, particularly a (super) heroic MMO, is such that players want to be able to resoundingly defeat enemies that are lower level than you, but enemies that are just a few levels higher than you should be significant challenges, and you don't really get that with a linear progression.

What we actually want is a system whereby the increase at each individual level is slightly more than the increase from the level before. That kind of behavior is exactly what is modeled by an "inflationary system." An inflationary system is described as: <base value> + <base increment> * <number of increment steps> * (1 + <inflation rate>) ^ <number of increment steps>. That may look kind of long and scary, but it's actually pretty easy to work with in Excel. All I have to do is figure out how much inflation I want (and that's an "art" question; I used 1%), and it's easy to plug it in and work out that with a base increment of just slightly more than three, I get exactly the kind of curve I want, and the target stat baseline grows from a 3 point difference between levels 1 and 2, to more than a 6 point difference between levels 39 and 40.

Of course, it's nowhere near enough to just declare that the target value for a player's stats is 76 at level 16; other systems have to support that to make that a reality. This, really, is why baselines exist - to inform the systems that generate them. Now that I know how much of a given stat I want a player to have, I have the first piece of information I need to figure out how many stats players can get from their gear.

So, back to "art." Champions is a super-heroic game, and to me, that meant that most of a player's potential and power should come from their own power, their own choice, and their own superhuman abilities. Of course, as a competing tension, I want gear to be meaningful and exciting - just not quite as all powerful and influential as it is in other games. In the end, I negotiated out with Antiproton (our items and rewards lead) for items to get 42.5% of the player's total stat budget. Super stats got 40%, talents get 15%, and "base" value is 2.5%. Those are the proportions that "felt" right after a lot of discussion and testing, but they're far from the only valid choices we could have made.

So, now we have a new baseline value; a player should be able to get up to 85 points in a given stat from their gear at level 40. This is what we call a derived baseline, or more properly a one step derived baseline. In on other words, unlike the arbitrary choice of "200" for stat peak at level 40, this value is not arbitrary; it's calculated, and it can't be changed. I could go back and change the precedent factors that generated it, such as changing the stat peak at a given level, or changing the itemization budget, but if those values don't change, I can't change this value without invalidating everything else that derives from those precedents. (I'll show what I mean by that in a while.)

The next step after generating the item value baseline is to put it to work, and derive actual values for actual items. In order to do that, we need to have an understanding of what kind of gear, how much gear, and what the quality of that gear is at each level.

In Champions, we expect players to make multi-dimensional progress through their gear. That is, they not only get higher level gear as they level up, but they also get higher quality gear. This idea of quality is represented by the color bands; white, yellow, green, blue, purple. At level one, we expect players to be in level one whites. At level 21, however, we expect players to have graduated completely out of whites, and be in an approximately balanced blend of yellows and greens. It's certainly possible to do better than that. Even a solo player that did lots of mission content, did all the open missions (and did well at them) could have more greens than yellows and maybe even a blue or two. That's not, however, who we're balancing for. We're balancing for the "average" player. Doing so means that we can feel confident that an "average" player has a good, balanced experience, and that an exceptional player gets to feel extra strong as a reward for their hard work.

This table, the "desired build" table, was created by feel; we hand-entered values and ratios to make a gear progression that we felt would give a slow but steady improvement. The effect of that table, however, is dramatic. Every drop table in the game as well as the schedule of rewards for missions that our content designers use is driven by this table, and the rates and values of drops are calculated with brutal specificity to generate drop rates that actually match what our "desired build" requests. Actually, the drop rates are very slightly rigged in the player's favor, to allow players with just a tiny bit of luck or determination to do better than the table mandates. The point of baselines isn't to limit players or crush their potential; it's to establish the minimum expected values that we eagerly hope players will work to exceed.

Now that we've set up the basic expectations, next time I'll delve more into combat balancing and how it all ties together.

Formula and numbers

I am a bit confused on the equation. In excel =POWER(<base value>+<base increment>*<number of incremental steps>*(1+<inflation rate>),<number of incremental steps>) yields some pretty funky results which don't match the examples you gave in the Diary. Maybe you are trying to not divulge the entire formula exactly for proprietary reasons... But if you aren't trying to do that then can you clear that formula up with some real numbers and examples please? For instance what numbers are you usi...

Quote:
Originally Posted by sgtsubterfuge View Post
I am a bit confused on the equation. In excel =POWER(<base value>+<base increment>*<number of incremental steps>*(1+<inflation rate>),<number of incremental steps>) yields some pretty funky results which don't match the examples you gave in the Diary. Maybe you are trying to not divulge the entire formula exactly for proprietary reasons... But if you aren't trying to do that then can you clear that for...

Me likes big big numbers thingie, makes guud clomp with dat big numbers.

Numbers tasty, me likes.

wait, what ?

Quote:
Originally Posted by Asherett View Post
You've misread the formula.

It's <base value> + <base increment> * <number of increment steps> * (1 + <inflation rate>) ^ <number of increment steps>.

With your annotation it should be =<base value> + <base increment> * <number of increment steps> * (POWER(1 + <inflation rate>), <number of increment steps>).
Ok, I'll try that. Thanks! Were you able to pick up on any of the variables he...

Quote:
Originally Posted by sgtsubterfuge View Post
Ok, I'll try that. Thanks! Were you able to pick up on any of the variables he listed?
Works better but still gives funky ranges that don't match his 3 points between lvls 1 and 2 and more than 6 points between lvls 39 and 40...

Read all 8 comments and add your thoughts! »

Join Now!
  • arkantos78901,
  • ThermiteReaction,
  • BaronIveagh,
  • ueltschi,
  • and InternetNomads
recently became Premium Members and get first access to beta keys, contests, exclusive interviews and video, and can turn off ads. Why not join them?