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:

Additive

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.

Largest

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.

Multiplicative

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


http://bloggyxmas.blogspot.co.uk/

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:

Locality

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).

Phasing/Instancing

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.


Queues

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

Friday, November 7, 2014

Overwatch: Diversity Done Better

Blizzard announced their first new IP in 17 years. Seventeen! That's older than a good chunk of their fanbase--I know when I see comments about how people grew up on WoW it makes me feel old. But the last new IP Blizzard had was StarCraft in 1998. Though they've beefed up their franchises with spin-offs (Hearthstone and Heroes of the Storm), at some point the Diablo/StarCraft/WarCraft triumvirate was going to give out. So to see a new thing is pretty sweet.


I'm not a huge fan of modern FPS games. I was big into Goldeneye, Perfect Dark, and Quake 3 Arena back in the day, but more recent titles like Halo or Gears of War haven't really interested me. I played Mass Effect despite the shooter aspect of it (though to be fair, Mass Effect 3 did a really, really good job of making it much more fun). But Overwatch seems like it's an interesting enough take on the team-based shooter genre that I want to give it a whirl.

Between the superhero-esque powers, a little faster-paced gameplay than many other shooters, and a strong aesthetic all really solidify it in my head as something I want to play. What also helps, however, is that the characters are actually quite interesting.


Twelve characters have been revealed so far, and there are more to be shown, but of the ones we've seen, we have two robots, nine humans, and a gorilla. Of those nine humans, five are women. And not only that, but we have people of different skin tones beyond white (which is typically either European, Australian, or North American representation in games). Symmetra is Indian, Pharah is Egyptian, and Honzo is Japanese.

Mind you, some folks have already accused Blizzard of "appropriating stereotypical aspects of other cultures to layer on top of its white-dude-fantasy-world." I'm not really in much of a position to argue for or against that, mind you, being pasty white and all, but at the same time I'm finding it hard to think of other major games where an Indian or Middle Eastern character is shown in a positive light, or at all, so it's probably a positive step overall.

While they mostly have similar body types, there's still a fair bit of diversity within the set of ladies.
As for the ladies in the game, while I think they could use more diversity in their silhouettes (as they largely all have the exact same body type), @Moxiedoodle summed it better than I could:


So kudos, Blizzard. Folks took you to task, and then you stepped up to the plate and maybe not hit a home run, but frankly still did a lot better than you have in the past. And a lot better than many other developers do today. And you did so in a way that shows the game as not being any worse for wear by being inclusive.

There are still white characters, and male-power-fantasy characters, and boob plate and fan service, but there's also covered characters, folks who aren't white, and lots of ladies. As @Moxiedoodle mentions above: there's something for maybe not everyone, but a lot more than there was in prior games. #Blizzard, #Overwatch, #Diversity

BlizzCon Imminent

I've nothing to add other than re-posting my previous prediction from a month and a half ago:

http://talarian.blogspot.com/2014/09/blizzcon-2014-prediction-new-wow.html

We'll likely see if I'm correct. Setting aside some space here for me to post links to interesting information as it happens.

In the meantime, I have some networked finite state machines to build, rather than being at BlizzCon :(