Wednesday, December 31, 2014

[WoW] Secondary Wars: The Socket Strikes Back

Last week I took a look at what point did it make sense for you to take a gear upgrade regardless of the secondaries involved. One of the criticisms leveled at it was I used a pretty odd slot (bracers), given how small of a contribution it gives. Totally valid, because it's harder to see the exponential curve as stats go up.

I also glazed over Sockets pretty quickly, and between my conversation in the comments with Balkoth, as well as more thought on it myself, I wanted to do a more thorough analysis, and also perform a comparison versus Warforged. But first, let's talk secondary stats a second time.

Secondary Stats Revisited

So last week I chose bracers. This week, let's go the other direction, let's pick the chest piece, one of the--if not the--biggest chunks of stats on a single piece of gear.

I nabbed plate chest pieces this time, and when you compare it to the bracers last week, it provides nearly twice the secondary stats as the bracers did (and about 50% more primary stat). So I ran through the same calculations I did last week for both Retribution Paladin and Enhancement Shaman stat weightings.

Retribution Stat Weights. You'll note they're much closer together than the Enhance weights were.
As before, I choose to make the best piece mathematically possible for the base one, and check against the mathematically worse Warforged version to see if it's worthwhile.

Retribution Chest
Item Level 630 Item Level 636
167 Strength 177 Strength
216 Mastery 229 Versatility
1632.3 = (167 * 5.7) + (216 * 3.15) 1627.2 = (177 * 5.7) + (229 * 2.70)

Item Level 685 Item Level 691
279 Strength 295 Strength
365 Mastery 385 Versatility
2740.05 = (279 * 5.7) + (365 * 3.15) 2721.00 = (295 * 5.7) + (385 * 2.70)

As we can see, it's really quite close. Close to the point where 10 ilvls would be overkill for Paladins. Chances are, Warforged anything is better than the plain piece you're running. But they have a much closer stat spread than other classes, so let's take a look at Enhancement Shaman based on the spreads last week.

Enhancement Chest
Item Level 630 Item Level 636
167 Agility 177 Agility
216 Haste 229 Versatility
1463.4 = (167 * 5.4) + (216 * 2.6) 1413.8 = (177 * 5.4) + (229 * 2.0)

Item Level 685 Item Level 691
279 Agility 295 Agility
365 Haste 385 Versatility
2455.6 = (279 * 5.4) + (365 * 2.6) 2363.0 = (295 * 5.4) + (385 * 2.0)

So a larger gap, but the calculations for 640 item (1467.6 = [184 * 5.4] + [237 * 2.0]) show that 10 ilvls is still sufficient to overcome the disparity. And frankly, like last week, if you pick the more reasonable stats where you choose the best two secondaries and compare them to the worst two, Warforged is actually generally an upgrade for Ret:

Retribution Chest
Item Level 630 Item Level 636
167 Strength 177 Strength
121 Mastery 128 Versatility
95 Haste 101 Crit
1618.05 = (167 * 5.7) + (121 * 3.15) + (95 * 3.0) 1637.30 = (177 * 5.7) + (128 * 2.70) + (101 * 2.8)

Item Level 685 Item Level 691
279 Strength 295 Strength
197 Mastery 208 Versatility
168 Haste 177 Crit
2714.85 = (279 * 5.7) + (197 * 3.15) + (168 * 3.0) 2738.70 = (295 * 5.7) + (208 * 2.70) + (177 * 2.8)

But for Enhancement it's actually a (very minor) downgrade, but so minor I'm not sure it's worth bothering with unless you think that extra ~20 DPS you'll get is worth it:

Enhancement Chest
Item Level 630 Item Level 636
167 Agility 177 Agility
121 Haste 128 Versatility
95 Mastery 101 Multistrike
1420.65 = (167 * 5.4) + (121 * 2.6) + (95 * 2.15) 1418.85 = (177 * 5.4) + (128 * 2.0) + (101 * 2.05)

Item Level 685 Item Level 691
279 Agility 295 Agility
197 Haste 208 Versatility
168 Mastery 177 Multistrike
2380.00 = (279 * 5.4) + (197 * 2.6) + (168 * 2.15) 2371.85 = (295 * 5.4) + (208 * 2.0) + (177 * 2.05)

So the conclusions I came to last week still hold as far as vanilla vs. Warforged. 15 ilvls is still a no-brainer, and unless you have a really broad stat spread (broader than Enhancement's), even 10 ilvls is solid regardless of secondaries on the piece. Add in the extra Stamina for survivability, and it's an even bigger boon.

The "exponential" stat curve is still really low at the ilvls where we are, so even on a chest piece doesn't show it too deeply. That exponential curve really starts showing in aggregate, as the combined stat budget of all of your items starts scaling quickly as you go up ilvls. It'll be interesting to see how that changes when we hit T18 in a patch or two.

Warforged Versus Sockets

As Balkoth brought up last week, Sockets are a static bonus, and as stat budgets increase exponentially, the relative value of a Socket will decrease. Also, when you look at say, bracers, which have a smaller overall budget than say, a chest piece, it has a greater relative effect. That is, a gem is going to compare more favorably to Warforged in bracers than in a chest.

So using Enhancement stat weights, I graphed the difference in stat weights for worst Warforged, best Warforged, and +50 sockets with the best secondary.

That graph needs some explanation. I took two baselines for 630/640/655/670/685, one with the best possible secondary, and one with the worst possible secondary. Then, I have the stat score for a Warforged item of that ilvl with the best/worst as a base, and I have the stat score for a +50 Haste gem in that ilvl with the best/worst item as a base, the idea being reality will lie between the maximum/minimum values of best/worst stat scores.

The green line, the worst secondary baseline, is clearly terrible. Everything is better. The best secondary baseline, however, is better than either gems or sockets. But that makes sense given sidegrades, and the much larger chunk of base stats to work off of. The baselines of course change depending on the stat spread of a given class.

Really, the more interesting piece of information we can glean from this is that there's an inflection point where a +50 gem goes from better to worse than Warforged, as predicted by Balkoth in our conversations prior. The inflection point for Enhancement chest pieces lies somewhere between ~665 ilvl (worst stats, Warforged vs. +50 Socket) and ~687 ilvl (best stats, Warforged vs. +50 Socket), depending on the secondary stats on your item.

Given just how close it is for even the best--and you'll not likely see to many chest pieces with nothing but Haste--for Mythic/Heroic pieces, Warforged is probably about the same as Sockets, or Sockets eke out Warforged slightly until Mythic, which Warforged wins (barely). So I'd expect in this scenario at least, we'll hit the full inflection point somewhere in Mythic Foundry gear.

Let's take a look at Bracers:

No contest. Sockets > Warforged all the way through Mythic, and beyond. The inflection point likely lies in T18, I'm going to guess somewhere in the range of 705 ilvl.

So Enhancement has a decently wide stat spread, and Agility is worth a lot compared to even the best secondary. Let's perform the same exercise for Retribution, which has a much closer spread, and a primary that isn't worth as much comparatively.

Retribution mimics Enhancement relatively closely. For both chest and bracers we're looking at nearly identical inflection points. That may be a fluke, however, so let's take a third spec, Frost Mage, which has an even wider stat spread than Enhance.

Frost Mage Stat Weights. Versatility isn't last? Wow!

Even more interesting, the inflection point for a Frost Mage chest item is actually beyond Mythic for the best case item, probably about 3 - 5 ilvls if I were to guess visually. And of course, bracers it'll likely be by 710ish where that inflection point hits.

So with all of that, I'm quite confident that Sockets are better than Warforged for this tier, excepting perhaps Mythic Blackrock Foundry gear for the big ticket items (i.e.: chest). For smaller items, Sockets will be better than Warforged into T18, unless Blizzard introduces Epic gems or something, in which case Sockets will likely be king for the whole expac as long as you're using +50 gems--which if you're using Heroic or better gear, when that +15 difference starts to really matter, you should be.

The caveat on this are weapons and trinkets. Weapons rely heavily on weapon damage/spell power boosts. I would bet money that Warforged for those would be better than Sockets (though I haven't done the math to prove it). Trinkets I think it'll depend on the proc, as Warforged would boost the proc effect, but a Socket would not. Also noting that I'm ignoring Stamina still, but given how low Versatility is on the totem pole, many people seem to be ignoring the benefits of survivability.

All of this will get a bit more interesting once we toss in Blackrock Foundry gear, given it's 10 ilvls off Highmaul (650/665/680/695), giving us more options for in-between gear, and side-grades where we may have to decide if 4 or 6 ilvls are worth dropping a Socket (they won't be given Sockets > Warforged in all but the super-top-end gear, and Warforged is just 6 ilvls) or if 10 ilvls are worth dropping a Socket, or so on.

Addendum: Link to the spreadsheet where all my work on this is stored for perusal.
#WorldOfWarcraft, #Theorycrafting

Monday, December 22, 2014

[WoW] Why Rando-Secondary Stats Matter Less Than You Think

I've seen it time and time again:

"Versatility is garbage."
"Crit is the worst stat for my spec."
"I don't want that upgrade, haste is useless to me."

I've had guildies pass up 15+ ilvl upgrades because they didn't like the secondary stats. Murf mentions something quite similar in his listmas post. So, is that the truth of the matter? I venture that it's not, and that you're best taking a raw ilvl upgrade in most cases.

Let's take a look at some classes. I know Enhancement Shaman relatively well, so I brought up my character on AskMrRobot and took a look at the stat weights given:

Not gonna lie, the fact that AskMrRobot doesn't normalize these to Agility = 1 is driving me mildly batty.
Now, at the end of the day, I don't actually care what the stat weights are. We're trying to find out here at what point is it that it really does matter what secondaries your gear has in terms of upgrading your character. And when you think about stat weights, they're generally just generated via simulation runs to see how much extra DPS each point of a stat is worth, usually compared to your primary stat. You'll also note that due to the way that stats interact with abilities, they don't always scale the same. For example, Enhance loves Haste right now, but if I recall correctly, the more Haste you get, the better Mastery looks, until there's an inflection where Mastery overcomes Haste.

So really I only care about what the spread is between the "best" secondaries and the "worst" secondaries. The actual values, or the exact secondaries we care about are immaterial.

I grabbed an some items from the current WoW raids/heroic 5-mans, and charted out the stat progression for the basic item, and with warforged (I'm ignoring sockets for a moment for simplicity. We'll get back to those). I chose Bracers--interesting point I learned, there are no mail belts in Highmaul LFR from bosses. I wonder if there's a shared drop I missed? Below you can see a chart that shows all of the values that I extracted:

So now that we have all of that, let's assume you have double your best secondary on your 630 ilvl item, and all your upgrades have double your worst secondary. In the case of the Enhancement Shaman weightings, that would be an item that looked like:

Item Level 630
+94 Agility
+121 Haste

And all our upgrades only have Versatility. So let's compare our 630 to the next closest thing, a Warforged version with Versatility, which would look like:

Item Level 636
+99 Agility
+127 Versatility

So now take the stat weightings above, and multiply them by the differences. We had 121 Haste, so that's 314.6 points of power (121 * 2.6). 127 Versatility is 254 points of power (127 * 2), meaning the difference is ~60.6 points. The difference in power attributed to Agility is (99 * 5.4 - 94 * 5.4) = (5 * 5.4) = 27, leaving us with a power differential of ~33.6, or around 7 more points of Agility to make it worthwhile.

All right, let's bump it up to LFR.

Item Level 640
+103 Agility
+134 Versatility

So we have our prior 121 Haste (314.6), versus our new 134 Versatility (268), but a new difference of 9 Agility from our base item (48.6), meaning the upgrade is 2 points better than what we started. So in the absolute worst case for the weights given, 10 ilvls difference is sufficient to say screw it, take the item regardless of the secondaries no matter what (for a weighting of 2.6 vs 2.0 and stacking the BEST versus the worst).

Interestingly enough, that seems to hold scaling up. Performing similar calculations for 676 upgrading to 685 shows that it would be better to keep the 676, caveat the strange stats on the item, but if we were to get a couple more ilvls on the 685, it would beat out the lower level item.

So that's the worst case. Let's take a normal case, where the secondaries are split between the best two and the worst two.

Item Level 630
+94 Agility
+70 Haste
+51 Mastery
(94 * 5.4 + 70 * 2.6 + 51 * 2.15) = 761.65

Item Level 636
+99 Agility
+74 Versatility
+53 Multistrike
(99 * 5.4 + 74 * 2 + 53 * 2.05) = 791.25

And just like that, the the 636 is already better than the 630 by a decent margin.

All of the above assumes our weightings are "correct". Haste is 30% better than Versatility according to AskMrRobot's weights. What if the gap was wider? If you look at the weightings for Holy Priests, you're looking at a 57% gap--1.1 for the best, 0.7 for the worst, with Intellect at 2, ignoring Spirit for a moment because that's another bucket of worms.

Holy Priest Weightings. It's clear to me that these weightings are generally created to enforce priority order, rather than work with raw numbers...but let's pretend for a moment, shall we?
Item Level 630
+94 Intellect
+121 Multistrike
(94 * 2 + 121 * 1.1) = 321.1

Item Level 640
+103 Intellect
+134 Versatility
(103 * 2 + 134 * 0.7) = 299.8

As expected, still worse. In the case of weightings like these, it doesn't overcome the stat weight disparity until a little above 646 (if we could get items at 648 or so, that would do the trick). But again, it's rare to see stats stacked like that, so let's take a much closer to real world example:

Item Level 630
+94 Intellect
+70 Multistrike
+51 Haste
(94 * 2 + 70 * 1.1 + 51 * 1) = 316

Item Level 640
+103 Intellect
+74 Versatility
+60 Mastery
(103 * 2 + 74 * 0.7 + 60 * 0.8) = 328.07

In the case of Holy Priests with the weights as given, Warforged wasn't sufficient. We had to go up 10 ilvls still. However, 10 ilvls is definitely more than enough to say screw it, replace it regardless. Even had I decided to use Spirit/Multistrike in the 630 calculation, the 640 would've been effectively equivalent.

All of this is to say that ilvl is still largely king. If it's a gap of 10 ilvls or more, you're probably best just taking the upgraded item and calling it a day, regardless of the stats that it has on it. All of this gets completely out of whack when it comes to trinkets (because of procs), weapons (due to weapon damage/spellpower), or sockets. I'm not going to cover trinkets because that's a case by case basis, but sockets are interesting.

Right now sockets are worth +35/+50 of a secondary stat. For our Enhancement case, if we got a 630 item with a socket and gemmed Haste, that's a huge power differential:

Item Level 630
+94 Agility
+70 Haste
+51 Mastery
+35 Haste (Socket)
(94 * 5.4 + 70 * 2.6 + 51 * 2.15 + 35 * 2.6) = 890.25

Item Level 646
+109 Agility
+78 Versatility
+64 Multistrike
(109 * 5.4 + 78 * 2 + 64 * 2.05) = 875.8

So a single green gem in a socket is enough to make that 630 better than the unsocketed LFR Warforged item. What if we flipped it so that we had the best socket but worst stats to start?

Item Level 630
+94 Agility
+70 Versatility
+51 Multistrike
+35 Haste (Socket)
(94 * 5.4 + 70 * 2 + 51 * 2.05 + 35 * 2.6) = 843.15

Item Level 636
+99 Agility
+74 Haste
+53 Mastery
(99 * 5.4 + 74 * 2.6 + 53 * 2.15) = 840.95

The socket is better than Warforged, even when comparing the worst stats to the best. And that's with a crappy gem, no less.

All of the above assumes the stat weights are accurate, which frankly, they are not. It's clear in both the Enhancement Shaman and Holy Priest cases that while they may be based on sims, they've been tweaked to make pretty--especially for the Priest, which I'm confident is literally just enforcing priority ordering rather than actual weights with math behind them. Remember, those weights change as you get more of a given stat because of how stats interact in your spec. 

In my mind, that means a 15 ilvl upgrade (ie: LFR->Normal->Heroic->Mythic) is an absolute no-brainer, take it regardless of stats, unless you have a socket. Sockets are worth a good 5 - 7 ilvls on their own, if not 10 with a rare gem. 10 ilvls is probably okay as well, unless you're truly going from 2 awesome stats to 2 of your worst stats, at which point you need to understand more about your stat weights and how spread out they are. Basically, you mostly only need to worry about optimizing your secondary stats once you're getting side-grades (including warforged).

I think I'm justified in saying ilvl is largely king, but I definitely underestimated the power of sockets. #WorldOfWarcraft, #Theorycrafting

Thursday, December 18, 2014

[IndieDev] Vive les RĂ©sistances: Models for Stacking Stats Like Resists

Currently I'm working on implementing resistances in our game, Eon Altar, and while chatting with our designers the question came up of how do you stack resistances?

I mean, we're not like D&D 4th Edition where an attack could have every possible elemental keyword (looking at you, Tiamat, and your Fire Electric Acid Cold Poison breath), so we don't need to worry about an attack doing both Cold and Fire damage, for example. However, we do need to worry about multiple sources of the same resistance--30% Fire from a skill, and 20% Fire from a buff--as well as when different types overlap--say, a Melee Fire attack against someone with a big shield so they resist damage from the front and perhaps also resist Fire damage.

Stacking A Single Resist

Let's pretend you're Freddie the Fire Mage (note: not an actual character in our game), and you've decided that it'd be a good idea to stack Cold resist, because, well, who likes being cold? So you went down your skill tree and picked up a natural resistance to Cold of 20%. You also decided that this Frost Dragon looks nasty, so you popped a Potion giving you 30% Cold resist. Oh, and Penny the Paladin has an aura giving you another 20%.

So you have 20%, 30%, and 20% from three sources. There's a few ways you can go about this:


You can just add them up and call it a day. In Freddie's case, that's just a total of 70% Cold resistance. The good thing is it's super easy for players to grok; you don't need to have a minor in mathematics to intuit the results. The potentially bad thing is once you hit 100%, you're immune. Further boosts are wasted, and complete immunity to a mechanic may allow players to find a way to cheese your game if you're not careful. This can be mitigated somewhat by putting an artificial cap on it (i.e.: Diablo II's 75% element resist cap), or by ensuring a player doesn't have enough sources of a given stat to stack it too high.

Once you hit 4 sources of 30% Cold resist, everything else would be wasted. Heck, you wasted 2/3rds of the 4th source anyhow.


Another way is to just take the biggest source. In Freddie's case, that would be 30%. It heavily punishes stacking because rather than having the natural Cold resist or Penny's aura, Freddie could've just popped a potion and used those skill points on other abilities. Players are instead encouraged to be generalist about their stats rather than giving the option of specializing. But it's easy to balance because you can ensure an absolute maximum a player can have because it'll only ever count a single source.

No matter how many 30% Cold resist sources you had, you'd still only ever have 30% Cold resist.


The third way is multiplicative. Multiplying the effects together amplifies the effects. So for Freddie, his 30%, 20%, 30% resists becomes 87.2% (1.3 x 1.2 x 1.3 = 1.872 and subtract 1 for 0.872), which is clearly greater than the additive 70%. Movement in WoW, until recently, used multiplicative. This rewards stacking multiple sources, even if they're small sources, as each source amplifies the other sources. This ends up creating an exponential curve, nearly requiring players to specialize to be optimal. Frankly, in my mind, it would also be hell to balance because runaway numbers.

It's hard to tell because we're capped at 100% for this example, but we'd be already at 119.7% resist at 3 sources of 30%, which is the start of a decently steep exponential curve.
If we didn't cap it at 100%, this is what it would look like. Note the scale on the left going to 1200%+. Exponential scale indeed.

Inverted Multiplicative

A fourth way is inverted multiplicative. That is, invert the semantic, then multiply each effect with each other. This creates diminishing returns, where each additional stacked source has slightly less effect. In Freddie's example, you have 20% Cold resist from the first source; 44% combined Cold resist from the first and second sources; and 55.2% combined Cold resist from all three sources.

The math for this is a little bit funny, because resists are like saying "not damage", so instead of saying 20%, 30%, 20% resist, you say 80% damage, 70% damage, 80% damage, multiply them together (0.8 x 0.7 x 0.8 = 0.448), then subtract 1 and drop the sign (0.552).

Final Fantasy XIII actually performs stacking single resistance calculations this way. The con, of course, is the math is tricky for your average player. The pro is that you'll never hit complete immunity (without something giving you complete immunity which would be a multiplication by 0), allowing players to specialize if they so choose, but also allowing the players to decide where the limit of stacking return is.

Every 30% Cold resist source still gives you resistance, but each one has less effect than the one before. Makes a nice pretty curve, too.

We're currently leaning towards the first method for stacking a single resist. The ability for players to just math it out in their head is immense, and not to be underestimated. We also don't have too many sources of stats, so I doubt a player will be able to stack a large number of a single stat. We'll see if I have to eat my words later, though.

Additive as Increase

Thanks to Balkoth for this one (see his comment below). This one is similar to inverted multiplicative, but the formula is basically 100 / (100 + AdditiveBonus). This one has a much steeper drop off than Inverted Multiplicative, so takes more than twice as many sources as inverted multiplicative to get the same result. Probably a good choice if you have lots of sources and want to keep stacking sources to just a couple buffs, regardless of how many possible sources you have.

Our curve for this plateaus a fair bit earlier than multiplicative increase, making it attractive if you have lots of different sources possible and want to limit player stacking further.

Stacking Different Resists

So say Penny the Paladin has 20% Fire resist, but thanks to her shield, she also resists 30% of direct frontal Melee attacks. We now have two different resists, and basically the same problem as above, but with slightly different consequences.

Adding the two doesn't make much sense. If we cranked those numbers up to 50% each, that means a direct frontal Melee Fire attack would do 0 damage, which doesn't make much intuitive sense when you think about resisting half the damage. However, for smaller numbers (less than 50%), I think it works just okay.

We could take the largest, but like previously, this punishes players for stacking resistances. A player would game that by just attempting to ensure that Penny always took attacks from the front, and screw any other contingencies, devaluing her 20% Fire resist.

We could take the smallest (or the intersection) of the two, but that potentially sucks because then a Cold melee attack would basically do full damage, ignoring her 30% direct frontal Melee attack resistance, because she has 0% Cold resist.

Multiplicative is problematic for the same reason additive is: if makes little sense for each resist to be amplifying other resists. On the other hand, it would reward diversification of stats, making a jack-of-all-resists much more attractive, at the expense of stacking.

Which really just leaves inverted multiplicative for different sources, which would give Penny 44% resistance from frontal Melee Fire attacks. It doesn't punish her unduly for not having every type of resistance, and in my opinion--strangely--makes more intuitive sense than adding them, especially for larger numbers. This is the route we're choosing for multiple different resistances simultaneously applying.

So Why Percentages?

Finally, there's another option entirely: use flat values. Similar to how D&D works, we could use flat values (you resist 20 Fire damage), but this is harder to balance and scale. Percentages scale by virtue of being, well, percentages. We don't need to rejigger numbers for resistances every time we change the scale of our combat. If today at level 1 Freddie is doing 10 damage on average, and tomorrow Freddie is doing 20, we'd also have to rebalance resistances if they were flat. As percentages, they have the same relative effect.

We also don't have the MMO problem of constantly having to put out new expansions and worrying about nerfing percentages the way WoW does--because what does 300% Haste mean? Nope, gotta reset those percentages every 10 levels. Assuming we have enough different things for players to choose as they level, there's no danger of percentages becoming silly (not to mention our additive cap on a single resist of 100%).

On the other hand, flat values make big single attacks more valuable, but devalues multiple smaller attacks. If you're a dual-wielder, and your opponent resists 20 damage, they really get to resist 40 damage because you performed two attacks, not one. Percentages don't have that issue (or bonus, depending on how you balance your game).

Note that I'm not saying that the choices we made are the best objectively. They're what we believe will work for our system. We'll see how these work in practice, as I'm still actually implementing them, but it was a neat discussion. Things can still change if we decide to go a different route, as well! #IndieDev, #EonAltar, #GameDesign

Monday, December 8, 2014

[WoW] Mission Improbable: Garrison Missions and Strange Design Decisions

An interesting facet of WoW's new Garrisons feature is that they basically created a Facebook/Mobile style game within the WoW framework itself. You have followers--fellow NPC heroes--that you send on missions and they bring you back rewards. Followers have traits, and missions have threats. Match traits with the right threats, and your chances of success go way up.

Qiana counters two of the three threats listed, and by herself would give me a 58% chance of getting the prize.
The idea overall is pretty fun in practice, but it's clear in the implementation and in developer comments that this is Blizzard's first rodeo into this style of gameplay.

Credit where credit is due, the basis they've built is quite solid. The idea of followers having their own levels, and getting experience for finishing missions is good. On top of that, similar to WoW itself, once your follower hits level 100, the game changes. Experience now goes to upgrading the quality of your follower, and they get more powerful by upgrading their gear so their ilvls go up. By mimicking WoW itself, they've used a language that players are already familiar with, not to mention giving context to the mini-game to justify its presence.

However, the devil is in the details. First of all, mission selection is wonky at best. Blizzard has missions appearing in basically seven tiers: 90 - 94; 95 - 99; 100; 100 (615 ilvl); 100 (630 ilvl); and 100 (645 ilvl). When some followers reach a high enough level, new missions start appearing in the tier that they're eligible for. Originally, this meant lower level missions would disappear, and if a follower is too low-level for a mission, they gain nearly no experience, meaning they get left behind. Now, Blizzard hot-fixed this such that you get a few missions in each tier you have followers eligible for, but this has uncovered a plethora of other issues.

Missions available and their rewards.
The first issue that Blizzard has begun to address is that of the interaction with the Salvage Yard. The Salvage Yard is a building where when you complete missions, you have a change to get a crate of loot. The better your salvage yard, the better the crates. Now, the crates can hold anything from low-level greens to epic world drops, to follower gear to complete vendor junk (but usually goes for a few gold). By giving players a bunch of lower level missions to help level their lower level followers, people quickly realized that the fastest way to generate follower gear and the like was to spam low level missions.

Which unto itself shows us a completely different issue. Lower level missions are often completeable by one follower, and often within 30 minutes to 2 hours at most. Fast forward to level 100 quests, and they're almost all 3-follower missions that take 4, 8, or 12+ hours. This, of course, mimics WoW again. Most end-game content is group content that takes more time than just solo-questing at lower level does, so it makes sense in the context of WoW that this would be the case. However, it goes against everything the devs had taught players earlier on in how Garrison missions work.

59%, will he or won't he succeed?
One of the nice things about lower-level Garrison missions was logging in, sending followers on missions, running some quests or a dungeon yourself, and when you were done, seeing your followers finish their own tasks and sending them out on one more set before logging off. You could see actual progress in a single game-play session, even if it was minor.

But once you hit 100, unless you're running the Epic Mount trait, chances are you're not going to see results until the next day. Now, I don't have a problem with that by itself, but in the context of the shorter missions from lower levels, it's frustrating to see gameplay slowed down like that for no discernible reason besides flavour. Of course, you don't want to be handing out high-level loot every two hours, so there's still gameplay reasons for slowing it, but the switch between frequent, quick missions to slow, infrequent missions feels really bad to me as a player.

There's also the case that lower level missions are just plain better for any numeric rewards. Whether it's gold, experience, or garrison resources, you're far better keeping a lower level follower around to get 95 - 99 missions to send your 100s out on. When a 96 mission gives 700 experience and 50 garrison resources for 1 - 2 hours of time, and a 100 mission gives 1500 experience and 120 garrison resources for 8 hours of time, we have a bit of an imbalance. I shouldn't feel like getting all my followers to 100 hamstrings my capability to develop my followers further.

What I would like:

  • A lot more missions in a tier than I have the capability to complete. Make me choose my priorities, be it gold, follower XP, gear, garrison resources, miscellaneous items, or whatever. Maybe nerf the amount each mission gives currently to take in account missions stacking.
  • Give me more variety in a given tier of missions for time taken. If I'm about to sit down for a 2 hour gaming session, having a bunch of 30 minute - 2 hour missions is ideal. If I'm about to log off for the night, I can send out the 10 hour missions. Even if things like gear are relegated only to 8+ hour missions, being able to send out for smaller batches of XP or gold is nice to feel progress.
  • Make the 8+ hour missions numeric rewards feel more in line with the amount of time my followers are spending. Doesn't need to be completely linear, but a little closer would feel better. Don't punish me for having all of my followers at level 100. It would also curb behaviour where players feel like they MUST log in every two hours to be the best. Some folks are going to do that regardless, but for the majority of players this should be sufficient I would think (especially now that Salvage Yard has been nerfed to an extent).
There's other things to be said about the Salvage Yard being the best way to get follower gear versus the Bunker (hooray, 1 Iron Horde Scrap again for 20 GRs!), but in terms of missions themselves, I think there's a fair number of tweaks to be made to make them feel a lot better than they do today.

Overall, I really do love the feature. It just has a few rough edges which need smoothing out.
#WorldOfWarcraft, #Garrisons, #GameDesign

Tuesday, December 2, 2014

Bloggy XMAS 2: A Family Like No Other

Syl over at MMO Gypsy has put out the call for a Bloggy XMAS, where we talk about gaming and community, and how gaming brings us together.  I lucked out with Day #2, so I get to see others take a swing first, but still go early enough that no one accidentally snipes my ideas!

Gaming has played a huge role in my life, from learning how to play Super Mario Bros. and Duckhunt when I was around 4 years old, to LAN parties and Goldeneye marathons in my teens, to online games in my adult life. For me, gaming has always been an activity you do with friends and family. Oh sure, you can play by yourself, but even those single player games, I've found the experiences to be greatly enriched by sharing said experiences with friends and hearing their version back.

One of the biggest boons in my adult life and gaming was joining a guild in World of Warcraft. Until about mid-2009, I had been in a couple of guilds, ran a small one with my then boyfriend, or played largely guild-less for most of my WoW career. With no one to tether me to the game, I found my time fluctuating--playing, not playing--and my activities were fairly limited to solo content.

A different boyfriend (at a different time) introduced me to his guild on US-Proudmoore, The Stonewall Family. I joined to play with him, but I stayed because I had found a new home. As a gay gamer, I found in the past a stigma within both the gay community about being a gamer, and the gaming community about being gay.

It kind of put a pretty heavy damper on having fun in game without having to deal with casual slurs, or not-so-casual homophobia. I mean, I couldn't even say in a dungeon run, "Sorry, have to bail, my boyfriend needs help," without someone realizing I had a male avatar and then getting called out on it negatively. Or on the flip side, finding folks to date that don't just assume you're a man-child because you play video games. On the plus side, it did make it easy to whittle down the dating pool, I suppose.

Proudmoore Pride Parade 2012
So getting into a guild that was LGBT friendly, and active about it, was immense for me. I could be myself without having to worry about what other people think. Folks to talk to in cases when I felt I had nobody else, really. We help hold Pride parades on Proudmoore every year. Our guild chat is some of the friendliest I've ever known. Actually, to be fair, Proudmoore as a whole has a ridiculously excellent server attitude in general. Sure, Trade still has it's trolls, but interestingly enough, homophobia tends to get shut down really quick on Proudmoore.

Five years later, I'm still around. I've contributed by running or help run raids all the way back to Ulduar. There've been a couple raid tiers where I've been MIA for half the tier, usually because of burnout because raid attendance is awful to try and deal with in a casual guild, let me tell you. And yet I still wouldn't trade it for anything.

Our current raid team that I'm a part of is the best the guild has ever had, actually taking down content while it's current, and doing so splitting the difference between having fun and being totally silly, with actually being able to buckle down, point out mistakes, and improve as a team. The guild itself is quite laid back, with members running the gamut from hardcore pet battle enthusiasts, to WoW tourists, to hardcore raiders (some who raid in other guilds, but come back to The Stonewall Family for their other characters).

I've known some people in guild for the whole five years I've been around, and others for much less than that, but to me, they're my community, my friends, my family. I hear about when they get their teaching licenses, or when they're working to adopt their foster children. Many of us have met each other in real life at different times, and hearing about other guildies meeting always feels a little like magic. Celebrating victories, and helping each other through hard times. That's what friends and family are for, right?

So while WoW is an excellent game, as they put it on the LFG documentary, it's about the people. If I didn't know the people I do now, if I wasn't playing weekly with my fellow raiders, who knows if I'd still be playing WoW? And that's led to me blogging, and meeting many excellent bloggers. My community has done nothing but grow in excellent, awesome bounds since I started playing the game, and I'm so very thankful for it!
#WorldOfWarcraft, #BloggyXMAS, #Personal

Monday, December 1, 2014

[WoW] Enhancing My Shaman Experiences

I'm a little melancholic about the fact this expansion will be my first not healing during raids. Normally I play Holy Paladin, but our raid has more healers than we need for about 12 people (we certainly don't need to be running four healers for Heroic content), and I'm the only one of the four that has a consistent DPS character, so I don't have a whole lot of choice in the matter. On the other hand, I do really enjoy my Enhancement Shaman, so getting to main him through raid content is still going to be fun as heck.

I ripped through the leveling content, opting to ignore dungeons during the leveling experience, so I ran the grand majority of questing content on Draenor. I have to say, I am loving Garrisons, and I loved the leveling experience. Between digging around for treasures while out and about, and the Draenei questlines, I've rather enjoyed a lot of the content. I was concerned it was going to be yet another Orc expansion, and it kind of is, but I've been pleasantly surprised at the non-Orc content (Arrakoa in particular was a fun ride).

Also, complete Yrel fanboy here. Just saying.

I'll be doing a post later on my Garrison experiences, but suffice to say I've found them incredibly engaging, though daunting for more than one character.

While I was leveling, my Enhancement Shaman, as usual, proved to be nearly the ultimate soloing machine. With my copious self-healing, massive AoE, and decent single-target DPS, not to mention a plethora of cooldowns, taking on rares or difficult mobs was cake. I would generally survive most encounters other classes could not. Seriously, how do mages level? I'm not sure I could manage that.

Once I dinged 100 and could start running dungeons, I was there. First up was getting my Silver Proving Grounds. Which was trivial. The PGs don't start scaling until ilvl 615, and I was rocking 598. I ended Silver with about 50% of the time left over every wave. So I figured, hey, bet I could do Gold. Three attempts, and I managed it:

The video is my 4th go, forgot to record my first win, sadly.

After running a few dungeons as DPS, I can tell you that Enhance, despite numerous nerfs to our healing output (I miss you, Chain Heal) is still perfectly capable of playing Healer or Tank if need be. Yes, even in Heroic 5-mans.

Skyreach our rando Tank/Healer combination was terrible, and the first boss I ended up tanking (thank you Earth Elemental, Shamanistic Rage, Stone Bulwark Totem, and Maelstrom Weapon) the last half. The second boss I ended up having to heal because the tank locked the healer out of the encounter, which ended in a couple deaths, but the Paladin tank proved that he was capable of self-healing and staying out of the bad there while I spot healed the rest of us (and him).

Which does remind me; Healers, if your tank dies and you see an Earth Elemental go up, please heal it. It's tanking. I honestly should write a macro that tells them that.

Cakewalk if you avoid the boulders. (Image from Wowhead)
I've also managed to solo the last 12% of Roltall in Bloodmaul Slag Mines, so that's fun too. Turns out that most of his damage is entirely avoidable. He doesn't melee terribly hard.

But given the difficulty of Heroics, I think Blizzard could have easily required Gold PGs and have been mostly okay. Silver seemed too easy compared to the difficulty of content in the 5-mans. On the other hand, most of my runs have been pretty smooth, so dropping the bottom whatever percentage of people who cannot complete Silver PGs seems to have made running random Heroics tolerable since there's a bare minimum skill requirement now. Oh, there's still douchcanoes, let's not kid ourselves, but short of giving us better social tools to handle those, there's nothing we can do about it.

After all of that, color me surprised that a bunch of Enhancement Shaman were upset about our DPS. I mean, if you go look at Noxxic's sim charts, we're relatively low on the totem pole (hah, Shaman puns!). Or we were before our buffs. Now we're solidly in the middle, until we hit 660+ gear. But at least in heroic dungeons before the buffs I didn't feel weak. Until I ran into a pair of Ret Paladins, both 10 ilvls below me, doing 20% more DPS than I was doing with ease...

Then I remembered most of my DPS was tied to my Elementals thanks to Primal Elementalist, and I generally save those for bosses (where I was even with the Ret Paladins) so perhaps I should spec out of that into Unleashed Fury instead? But I hate that so much of my damage is already tied to Lightning Bolt thanks to Improved Maelstrom Weapon, and Unleashed Fury just exacerbates that issue. Liquid Magma is useless for most Heroics, since it's basically Starfall 2.0 last I checked (hooray, let's pull ALL the things! CC, what's CC?), so I'm not really sure. Maybe I should just be fine with my DPS being competitive on bosses and say screw trash.

Once I remembered that half my gear doubles as healing gear, I started running Heroics as Resto because instant queue > 20 - 40 minute DPS queue. I'll talk more about my experiences as a healer in another post, but honestly, I love the new healing model so much.

Raids open up this week, though I'm not sure if my team is ready to go yet. At least one of our healers hasn't hit 100, but otherwise I think we're mostly there. A bunch of us are at ilvl 630 or greater, so we should be ready to walk into Highmaul.

So far been having a blast this expac, and I hope it keeps on rolling! #WorldOfWarcraft, #EnhancementShaman, #ProvingGrounds

Saturday, November 15, 2014

[WoW] Server Traffic: Queues, Phasing, and Some Numbers

Recently Blizzard released a little product known as Warlords of Draenor, and it turns out their engineers were taken by surprise by the number of people logging into the game. Between that and the ongoing DDoS attack that pretty well every MMO launch in the past year has dealt with (because apparently there're some folks out there who just hate fun, I guess), Blizzard's servers have basically melted.

So why is this such a big deal? Why couldn't Blizzard just throw more hardware at the issue? Would an extra 1,000 people on each server make that big a difference?

The answer, it turns out, is yes. Even a 10% increase over what they expected can result in server meltage. Why, though?

Let's pretend I've made a new MMO, Talarian World, and I just propped my servers up and some folks start logging in. For every player, I have about 100 bytes of data coming in to my server every second (to be honest, the exact amount is largely immaterial once we hit a certain number of people, but just play along for a moment), That data contains information about my new world location, what abilities I used, commands, whatever.

Now, to prevent cheating, my server is Authoritative. This means that any action I take in my game client has to be vetted by the server, and confirmed. So the server responds with information to tell me the actual world state. For the sake of simplicity, we'll say the server returns to me 100 bytes. So we have for a single player logged in, 100 bytes in, 100 bytes out. Maybe per second, or every half second, or whatever.

Other developers are probably yelling at me right now, as 100 bytes in/100 bytes out is terrible, but again, simplicity. Hold your horses for a moment.

So now we have a second player logged in, and they have their own 100 bytes in, and their own 100 bytes out, but we're an MMO; we need to let other players see you. So both player 1 and player 2 now have 100 bytes in, 200 bytes out, for a total of 200 in, 400 out. For 3 players, you get 300 in, 900 out (updates for 3 players, being communicated to 3 players). When you start scaling that number up, well, the results are dramatic:

Yes, I know there's 1024 bytes in a kilobyte. I only care about magnitude, not precision in this case.
For 1,000 players, you're looking at ~100 KB in, but ~100 MB out! And for 5,000 players you're now looking at 2.5 GB. Heck, going from 5,000 to 6,000 (+20%) players means an increase of ~1.1 GB (+44%) of outgoing data per communication cycle.

That's clearly unsustainable, and totally insane. Note that CPU and RAM usage also goes up significantly. The more players, the more database hits you need to make, the more RAM needs to be used, and the more CPU used for maintaining all of the information and communicating it out.

Now, Talarian World was implemented naively. World of Warcraft is not. They have coping strategies for dealing with that number of people:


The first is, of course, locality. There's no point in sending information about a given player in Stormwind when you're in Ironforge. Granted, there's still processing to be done to figure out if you're in the same locality or not, so it's not free per se, but it's a lot cheaper than our exponential data graph above. Also note that Blizzard clearly is capable of scaling their locality checks. When I was out at Blasted Lands, people would disappear from my screen if I was more than 40 yards away from them (which isn't very far in-game).


Still, that's not enough. When everyone is swarming a single spot, you're all going to be in the same locality, even if it's as small as 20 yards. So the next trick is something that other game companies have done for a long time, and that Blizzard just finally rolled out to Draenor in general, which is separate instances of the same area. Break the population up into their own sub-worlds such that they don't see each other. Blizzard calls their version of this tech phasing, but it's not really new (though to be fair, Blizzard's ability to do it seamlessly and dynamically rather than having a drop-down to select your instance is actually super-slick).

Using our chart above, if we have 1,000 people in an area, we have ~100 MB of data going out. Splitting that in half into two 500 chunks of population that cannot interact in the world means we have ~25 MB x 2, so ~50 MB of data total. By splitting the population, we've reduced the amount of data by half! Splitting it into 10 chunks of 100 people instead reduces that further, to 10MB total. Again, like calculations for locality, this isn't free computationally, so we're still chewing up some RAM and CPU, but there's likely an inflection point somewhere where the chunks of people cost more to maintain than just leaving them in the same instance.

Of course, instancing/phasing breaks immersion to an extent, because now you might not be able to see your friend nearby. Though, to be frank, a bajillion people and 2 - 5 seconds of server lag breaks immersion even more, so the trade-off is probably fine.

Level Design

Another sort of technique that one could do is level design. Ironically, the folks in the World of Warcraft Looking For Group documentary mention that putting a tonne of people in the same spot in the world causes all sorts of issues, and then they went and did it again anyhow by having a single point of entry into Draenor with Khadgar. They mitigated this by posting Khadgar in three other spots, but then they had the exact same problem on the other side of Tanaan Jungle, where everyone was doing the same quests to get their garrisons started.

It's a bit strange that they did all this (really great!) work with Tanaan, instancing it like they did. Once you got into Tanaan, the experience was quite smooth. Then once on Draenor itself, bam, complete meltdown. Especially on an Alliance or Horde-heavy server, where 80% of your population is now in the same zone. Previous expacs had new races or classes to roll so the population was spread out. This expac, there was only Tanaan, then Shadowmoon Valley or Frostfire Ridge.

And it makes me wonder if their level designers even told the engineers what they were doing with the Khadgar thing. Did a server engineer have a meltdown but was ignored anyhow? In a product as large as WoW, I'd not be surprised if either communication internally wasn't sufficient, or someone's concerns were waved off. In a team as small as 15 I've seen that happen, let alone a team of hundreds.

Other level design mitigations can include, say, removing all the squirrels in Nagrand to save on CPU/RAM.


And finally, we have queues. When all else fails and you've maxed your server resources, just limit the number of people who can be on at a time. Most of the above techniques still cost resources in the form of CPU time and RAM. Eventually you'll still hit some limits of your hardware/software, and while you can solve some of it by adding hardware, there's still a ceiling where it just cannot help. So at that point, like the local club, you put up a line. Not the happiest of solutions, but probably the most immediately effective. People are sad because they can't get in, but likely better than frustrated because they're constantly being disconnected or every ability takes 5 to 10 seconds to go off.

Did Blizzard drop the ball? 

Yes and no.

As per Lore's tweet above, Blizzard did expect more people to come back, but then were surprised by the actual number. As per the chart way above, it's not a linear increase, and going from 100 to 200 players is manageable, but going from 5000 to 5100 is not an equivalent increase; it's far, far worse in terms of resources consumed (hooray exponents!).

But they had the technology in Tanaan to apply phasing to an area to break the population up. They knew that was a bottleneck, yet didn't consider either the Khadgar scenario, nor the Garrison-creation quest scenario. So instead, in an emergency fix, they applied the tech to all of Draenor. If I were a dev on that team when that fix went out, I'd be shitting my pants, to put it mildly. On the other hand, it was either that or watch the servers melt, so not like they had much of a choice.

They also had the chops to realize when they're designing a bottleneck in the experience (as indicated by the Ahn'Qiraj comments in the Looking For Group documentary), so putting Khadgar in a single spot just absolutely flabbergasted me.

On the other hand, the sustained DDoS attack made a bad situation worse. It's hard to account for that kind of malicious traffic, which also eats resources (network, CPU, RAM, etc.) trying to figure out what's legit and what is not, not to mention clogging up the routers and such on the way to Blizzard's servers.

In some ways, this was both the smoothest launch they've had, and also one of the worst in a long time. Tanaan was executed beautifully; phasing, few bottleneck quests, and withstood the lag storms amazingly in practice. Everything else? Bollocks. Hopefully next launch they'll take these lessons and apply them (in some cases, apply them again). #Blizzard, #WorldOfWarcraft, #SoftwareDevelopment