tag:blogger.com,1999:blog-2814591084344141656.post7927192028825541352..comments2022-04-11T20:34:56.519-07:00Comments on Gamer By Design: [WoW] Right in the HealsTalarianhttp://www.blogger.com/profile/17684944568000522986noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-2814591084344141656.post-86178688220998319292014-03-11T15:24:01.940-07:002014-03-11T15:24:01.940-07:00Heh, regarding your last paragraph, check out the ...Heh, regarding your last paragraph, check out the LMAX Disruptor. It's a very neat general implementation of that idea, with minimal locking.Rohanhttps://www.blogger.com/profile/09090769681887119989noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-13155647859854365752014-03-11T11:56:26.212-07:002014-03-11T11:56:26.212-07:00No, but at the same time if we're talking abou...No, but at the same time if we're talking about a server being bottlenecked by processing n events per second (which isn't a great metric because each event is not the same in terms of processing required, but better than no metric) then it makes sense that anywhere computational complexity could be reduced is still a win. It may not be that much more expensive, but it's still more expensive. Micro-optimization can be very much alive when you're talking optimizing for the sheer amount of data processing that is a MMO server.<br /><br />As an aside, thinking about the interconnectedness of the data on the service is fascinating. If I perform an action (say, heal x health), I get y threat on every enemy, so my position on the threat list changes. So the only times the threat list needs to be locked for potential multithread access is my personal threat data for the change, and whenever the threat order needs reprocessing (the next attack for the monster?)--assuming Blizzard doesn't just process the entire instance on a single thread with a queue of requests to process, and just treat monsters as having their own requests like players... which honestly makes more sense in hindsight of writing that paragraph, and you don't need to worry about locking data for cross-thread access, which would get ugly very fast with that many actors.<br /><br />Just thinking out loud because it's fun.Talarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-3671991549937302302014-03-11T09:45:35.209-07:002014-03-11T09:45:35.209-07:00Hmm. You're right on the random part. After so...Hmm. You're right on the random part. After some quick research, I see you can use a modified Fisher-Yates shuffle to quickly select N random targets from a list, making that section pretty fast.<br /><br />But to be honest, the algorithms are so similar that we are basically talking about choosing X random people from N targets, or taking the first X sorted targets from an unsorted list. Given that N is pretty small, almost certainly less than 50, this part is going to be pretty fast regardless.<br /><br />But I still think that maintaining the sorted list can't be that expensive, given that they maintain similar lists for threat for every enemy.Rohanhttps://www.blogger.com/profile/09090769681887119989noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-11780303430346524982014-03-10T22:13:29.304-07:002014-03-10T22:13:29.304-07:00Modified the blog post to point out the real bottl...Modified the blog post to point out the real bottleneck. Appreciate the pointer :DTalarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-12109237847400000322014-03-10T22:11:01.289-07:002014-03-10T22:11:01.289-07:00Hmm, I went back and re-read the diagnosis thread ...Hmm, I went back and re-read the diagnosis thread for the problem (http://us.battle.net/wow/en/forum/topic/9679038602), and I think you're correct insofar as the number of events was definitely the bottleneck, which does remain for random heals, so I think my paragraph is definitely going too far as to say hooray, problem solved.<br /><br />However, I still postulate by not checking anything other than "are they injured?", it's still less computationally expensive than maintaining a sorted list. In this particular case, rather than having a sorted list at all, you really have two pools of people: injured, or not injured. The algorithm would look like such:<br /><br />1. Enumerate list of all healable targets<br />2. For Each Target<br /> A) IF in range<br /> B) AND health < maximum<br /> C) Add to list of possible targets<br />3. Choose 1 target at random from list and apply heal<br />4. Remove target from list<br />5. Repeat from step 3 until you have X targets or you hit the end of the list<br /><br />There's no sort or shuffle involved here, and in fact, by having *no* smart heals, you never have to keep the sorted list at all. Fewer CPU cycles burned on maintaining the sorted list, as well as not having the data overhead at all.Talarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-6422812411498944132014-03-10T18:18:26.011-07:002014-03-10T18:18:26.011-07:00This is the second place I've seen the idea th...This is the second place I've seen the idea that "smart" heals cause more lag than "random" heals. I am not certain that this is true.<br /><br />Pretend you're a dev implementing a spell that heals X targets.<br /><br />For the "smart" case:<br /><br />1. Get a list of all healable targets.<br />2. Sort the list by health.<br />3. Check the first target to see if it is in range.<br />4. If it is in range, add it to the list.<br />5. Move to next target.<br />6. Repeat from Step 3 until you have X targets or you hit the end of the list.<br /><br />For the "random" case:<br /><br />1. Get a list of all healable targets.<br />2. Shuffle the list.<br />3. Check the first target to see if it is in range.<br />4. If it is in range, add it to the list.<br />5. Move to next target.<br />6. Repeat from Step 3 until you have X targets or you hit the end of the list.<br /><br />The only difference is that you sort instead of shuffle in Step 2.<br /><br />And you can optimize smart heals a bit by keeping the health list pre-sorted for the duration of the encounter. This is similar to how mobs maintain threat lists, only sorting by health instead of threat. Whenever someone's health changes, just bubble-sort them to their correct position. WoW has a list for threat for every mob in the encounter, so a single additional list for health should not be that big a change.<br /><br />The technical problem with smart heals is not that they are more computationally expensive than random heals. The problem was that smart heals often had many healing events per spell, which is why Blizzard changed them to have fewer events, but stronger ones (instead of ticking every second, tick every 3 seconds for three times as much). But that issue remains even for the random heals.Rohanhttps://www.blogger.com/profile/09090769681887119989noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-78534642840664791602014-03-10T13:46:54.745-07:002014-03-10T13:46:54.745-07:00If you missed the fiasco that was Cataclysm, I can...If you missed the fiasco that was Cataclysm, I can understand why you'd be puzzled by the playerbase's reaction.<br /><br />The developers implemented a lot of these changes in Cataclysm, successfully, too. Triage healing was alive and well for most of that expansion. However, everything was tuned way too tight. Even in heroic 5-mans (which were the only real non-raiding progression at the time), people really struggled with the content because of the difficulty. Honestly, I think Blizzard could have left healing alone and otherwise changed everything else, and folks would have struggled anyways. I really don't believe that the healing model at the time had anything to do with it.<br /><br />However, because the end result of difficult content is healers going OOM and people dying, that made it very easy to just blame the new healing model, and so that is what folks complained about.<br /><br />People overreacting to health dips and blowing their expensive heals rather than treating it like triage and allowing folks to sit at less than 100% health. DPS standing in the avoidable bad too much, making healers go OOM. Folks not performing enough CC so tanks would get burst down all the time. And so on.<br /><br />The game had changed, but most people didn't look any deeper than the empty healer mana pools and thus blamed everything on that. The changes exacerbated the difficulty, certainly, but they weren't the *cause* of the difficulty. Blizzard making the content too difficult was the cause of the difficulty.<br /><br />So as folks freak out about these changes, it sounds pretty similar to what was aimed for in Cataclysm, and hence why folks are panicking. Taken in a vacuum, I agree, this would be alarming. But these changes aren't going to occur in a vacuum. Having the lower difficulty content available will ensure that this model is viable for *all* skill levels, and not just the expert players.Talarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-51811557815717291242014-03-10T12:18:55.859-07:002014-03-10T12:18:55.859-07:00Considering the fact that I haven't played sin...Considering the fact that I haven't played since Wrath, my knowledge of the evolution of healing or its current state is supremely limited.<br /><br />That said, these sound like good, well-reasoned changes. I was a little alarmed to see several comments in opposition to them, since they seem like welcome solutions to me.<br /><br />Healing should never give you the feeling of absolute control - that's boring. At the same time, if there isn't enough time to react in a reasonable amount of time, then you lose all possibility of control. It's a tough balance to strike and Blizzard will probably need all the help they can get, but it is a balance WORTH striking.Anonymoushttps://www.blogger.com/profile/00289459451344261371noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-40605307939593268452014-03-10T10:26:56.153-07:002014-03-10T10:26:56.153-07:00To be fair, I was talking Iron Juggernaut 10N. I i...To be fair, I was talking Iron Juggernaut 10N. I imagine it's worse than 3 seconds on heroic :P Dark Shaman on 10N is also a pain. Once a tank is up to 3 stacks of the frost strike debuff, each shot takes about as much damage as you're mentioning, though to be fair I don't think we need as many things lined up for it. Also granted, the warrior tank is squishy as hell compared to the bear tank in our raid, so part of it is probably gearing/skill disparity of our tanks. It would be nice, though, if being bad at Active Mitigation meant you died in 3 hits rather than 4, instead of 2 hits. 50% more time to react would make a world of difference.<br /><br />But yes, perhaps I'm getting old, but I'd rather have tests requiring thought instead of requiring laser precise reactions.Talarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-69014264517033168842014-03-10T10:19:56.396-07:002014-03-10T10:19:56.396-07:00My opinion is that the cause and effect is the oth...My opinion is that the cause and effect is the other way around: content was tuned way too high, making the Cata model punishing rather than freeing. In either case, based on comments from Celestion and Watcher, I think they're well aware of that particular lesson.<br /><br />The bailing of four boats is an apt metaphor. Pretty sure that's how I saw it in Cata, too, at least at first. It takes time to adjust to the new mindset, so I'm willing to bet it'll feel like that at least for raiding. Hopefully the normal dungeons at least it'll only be a couple boats rather than all of them :)<br /><br />As to class self-heals, for hybrid-healers and tanks at least, they're out of control. What little exists for pures could probably be left alone, but for Shaman, Paladins, Druids, Monks, Priests, etc. the amount of off-healing they can pull is pretty nuts. I can manage about 40k HPS on my Enhancement Shaman sacrificing most of my Maelstrom Weapon procs on some fights. That's like half a healer.Talarianhttps://www.blogger.com/profile/17684944568000522986noreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-63638316988545299022014-03-10T09:03:11.384-07:002014-03-10T09:03:11.384-07:00The only two fights I've tanked lately are H D...The only two fights I've tanked lately are H DS and H Naz, which are probably the most insta-death tank fights I've ever tanked going back to Wrath. I envy you and your tank on IJ getting 3 seconds to react to what's happening. :)<br /><br />On H DS, pretty much every ability that hits me, hits me for 51% of my health pool (somewhere between 40-60% but 51% is a useful average). When one hits me, no biggie, I barely notice and I can probably heal myself up. When 2 or 3 hit in succession, though, I'm dead, even if I'm at full health, if I'm not shielded &/or actively using a cooldown. Normally it gets dealt with but it's too easy to do one thing less than perfectly (either by me or the healer) and ending up eating floor as a result.<br /><br />As for H Naz... Execute. Be full health + shielded + use a CD and I'll live. Any two of those? May live but in dire straits. Only one? Outside chance of staying vertical. 2 of those rely on healers who are also busy doing other things, they aren't just worried about me every 15 seconds.<br /><br />Yes, it's probably fair to say that heroic fights should be legitimate tests that require some solid execution but when I read about the incoming changes, I immediately flashed to how much more reasonable those fights could be under that paradigm. Not easier, necessarily, but they should involve less annoying randomness. I'd like to see some of the emphasis moved from instant reaction times and perfect execution requirements to a more controlled "alright, here's the situation, it's ugly but let's deal with it."Rnoreply@blogger.comtag:blogger.com,1999:blog-2814591084344141656.post-42713290010064513462014-03-09T23:27:39.209-07:002014-03-09T23:27:39.209-07:00I'm optimistic about it but I'll want to s...I'm optimistic about it but I'll want to see some of it in practice first. I recall back around Cata that they had the same lofty ideals, but when put into practice it lead to the dreaded difficulty people remember. I think they've probably learned their lesson.<br /><br />The only concern I Have, relative to Cata, was that it often made healing feel like you were bailing four boats at once. I did not feel very in-control of my healing because it often seemed that no choice I could make would lead to a "positive" outcome. What I am hoping happens in WoD is that instead of snapping to my biggest heal I get a moment to ponder which heal to use given my knowledge of the fight, my class, and my stats.<br /><br />So I'm crossing my fingers too, but I really hope they don't completely gut the self-heals some classes had. As a destro warlock, for example, I liked the ability to sacrifice some of my DPS to try and help out the healer in the pinch.Clockworkhttps://www.blogger.com/profile/00565064315360664711noreply@blogger.com