November 30, 2008

Solving MMO rewards for units of time

MMO Characters are Made of Time

In an MMO, what's the ultimate measure of success? A high level and the best gear, right? Well levels are really just an easier way of representing xp (a level 100 character is really just a 17billion xp character, but numbers like that are just too clunky for players to see). Experience points were invented as an attempt to approximate aquiring experience in real life, which of course can only be done by spending time on something.

Gear, powers, stats, and gold are also all just measures of time. You might have some really good stats, but you either played long enough to get a good drop, played long enough to level up higher and choose better abilities, or played long enough to earn some money to spend on the gear. Skills and crafting are the same story. If you've spent enough time improving them, they'll become high enough to reward you with more gold, stats, and gear.

Even player skill is usually only achieved by playing the game a lot and becoming an expert at it. While you might see a level 1 with lots of player skill, that skill was usually accumulated through many hours of gameplay on a different character or in another game. In that light, it's really no different from mailing some gold or gear from your main to your alt.

Ok, that's no big secret. Most MMOs reward players based on time played above all else. But we can use this fact to establish a system of rewarding players comparably for their time, however they choose to spend it .

Reward units and conversions

Let's invent a new unit of measurement called a reward-hour (rHour). It's a bit like a light-year. It measures of the rewards we expect an average player to receive in an hour of playing our game. 1 reward-hour can be made up of money, gear, stat points, reputation, new powers, or anything else with which the player can be rewarded. Let's stick with gold and xp for now. These values can be easily adjusted after the system is in place, so don't worry about exactly how much xp or gold is in an rHour. It could be different for every game, but still use the same system. That's why we'll just abstract it out to a variable.

1 rHour = some xp + some gold. It can be made up of any ratio of the two, but since we always want an rHour to be worth the same amount, we need to figure out a conversion rate between xp and gold. Then we can make rHours that are mostly xp and a little gold, mostly gold and a little xp, or about even.

It might seem strange to invent a new conversion rate between two dissimilar things, but it's really useful in game design. If we were making RTS units, we might decide that 1 unit of speed is worth 3 units of offense. We can make up conversions between any game elements we want, but it's our responsibility to make sure they feel fair to the player. More on this in another post.

Different rewards for different activities

Now we have the ability to express any activity in the game in terms of how it rewards the player gold and xp over time. This is important, because it will let us make sure we're not encouraging the player to behave in a way that we weren't intending. For example, we don't want players to get xp faster by standing in field killing (grinding) mobs than they do by completing all the great quests we're going to write.

We can start making different activities grant reward-hours of different xp/gold ratios based on how we want our players to play. I already mentioned that we want quests to give a lot more xp than just grinding mobs, so people are always encouraged to actually do the quests. To make sure all rHours are balanced, we'll have to remove some gold from questing to make up for all the xp we added. Going out and grinding mobs is probably a good way to make a few quick bucks, so that should give more gold instead of xp. We could also decide that crafting is really the best way to make a ton of money but no xp, but let's stick with combat and questing for this example.

Let's define a couple new units of measurement, for each of these two activities. We can define any number of these that we like, depending on how many different activities we want to reward. They're made of different ratios of gold and xp, but we can make sure they're worth the same amount, by converting gold into xp and vice versa.

[For example, let's say we decide 900xp and 100g are worth the same amount of time. If we want an activity to reward 50% more gold, it has to reward 50% less xp and vice versa. So a reward-hour that grants 450xp and 150g is worth the same amount as one that grants 1350xp and 50g.]

1 combat-hour (cHour) of rewards = high gold, low xp
1 questing-hour (qHour) of rewards = low gold, high xp

Actually let's divide each of those variables by 60 so we end up with combat-minute (cMin) and quest-minute (qMin). That will be more useful for the small units we'll need to measure quests.

Converting content into time units (and therefore rewards)

Now that we have units of reward for an hour of combat and questing, we can begin to use those values to define rewards for specific content.

The first thing we would need to do is figure out the average length of time for a single player to kill a creature of their level and recover from that fight. This could be calculated using combat tuning data, but for these purposes let's arbitrarily choose one minute, since it's a nice round number.

Let's say a quest requires a player to kill ten mobs, in an area that takes 5 minutes to walk to, and each of those mobs spawns with 1 other non-quest mobs that the player will have to fight. To finish this quest, the player will have to walk for 5 minutes, fight for 20 minutes, and walk back for 5 minutes.

That should yield rewards in the form of:
5qMin + 20qMin + 20cMin + 5qMin -> 30qMin + 20cMin. These values can then be converted back into xp and gold based on the equations we've established.

We had some choices here as to which rules we follow for rewarding the player. I chose to include walking time as valid qMins, as well as the time that the player is fighting. Different games could follow different rules. A different designer might choose to "pay" the player for travel time, but only at a discounted rate, which they represent in a new type of reward-hour specific to travel time.

As long as every designer on the project follows the same rules, the player should always be rewarded fairly and consistently for their time.

Because it can account for the time a player spends traveling, or fighting extra mobs on the way to a quest objective, this system should provide sizable rewards for quests, even just delivery quests that only require traveling to another location. Time estimates can be confirmed in testing, but reasonable estimates should be possible at the time of content creation.

Advanced uses and automation

It's also possible for this system to take random drops into account, using expected values based on the quest items' drop chances. If a quest requires 10 of an item that has a 10% chance to drop, the rewards can be estimated based on the player having to kill 100 mobs instead of ten.

If gear and/or stats were incorporated into the reward scheme, it would become possible to start tracking rewards in item-hours (iHour), making it easy to calculate the frequency and quality of gear rewards and even the drop rates rare items should have. If a quest chain took 2 hours to complete, and rewards only one item at the end, it can be worth 2iHours. If that same item dropped from a random critter, it would be tuned to drop with a sufficiently low rate so that its expected value coincideded with killing the number of mobs that would take the player 2 hours.

As you can see, the calculations would quickly become cumbersome. But because we've been careful to establish rules and formulas, all of the calculations could easily be automated. The ideal implementation of this system would be built right into the quest editor, estimating time based on quest parameters and allowing the designer to estimate completion time and tweak the overall reward with a tuning modifier. An advanced editor could even allow each location to be identified in world space, and estimate combat/travel time based on mob densities in those areas.

Once the system is automated, we can also introduce curves to the rate at which rewards are gained (slowly at level 1, quickly later), and a curve for how many rHours it takes to gain a level (much less than 1 rHour at level 1, many many rHours later). This system can be used to calculate the total number of hours required to reach the level cap, the total amount of quest hours in the game or a given zone, etc. This way we can find a zone that is light on content for the amount of time we expected a player to spend there.

Data-mining can also be used to calculate rewards that players are actually earning per hour, which will allow us to go back and refine our calculations as time goes by. We can use statistical analysis to check if the average player spends their average hour within the middle of the bell curve, and to see how fast or slow the best or worst players seem to be progressing.

As you can see, this system could become the tuning backbone for the whole game. It will scale to be as large and complex as we allow it to. It could take several days or even weeks to implement, depending on complexity. However, over the life of an MMO, which might contain many thousands of quests, mobs, items, bosses, etc., a simple method for reliably tuning rewards for them would cumulatively save months of effort.

No comments: