Thursday, February 21, 2013

5 bugs that have overstayed their welcome

I want to say from the outset that I don't presume to be a dota 2 developer, I don't work for Valve, and I [thus] have exactly no information about the inner workings of the bug-fixing process. In light of this, this post is only intended to be as prescriptive as is reasonable for it to be. All of the bugs I discuss below are bugs which I think are serious enough that they should be addressed more urgently than they are currently being addressed. Some are much more serious than others – and I will discuss them in a roughly descending order of urgency – but each of them poses a problem which makes it the ‘bad’ kind of bug. Now, of course I need to explain what I mean by ‘bad’ here. And to do that, perhaps it would be best to briefly dip into the name of my blog.


The reason I named this blog ‘gameishard’ - aside from good names being difficult to think of, and the phrase being a popular wehsingism at the time - is that this blog is primarily a place to discuss various parts of a game which i am deeply passionate about, a game which I love, but also one which is simply very very hard.  Here I use the word ‘hard’ as a compliment. I celebrate the difficulty of dota by treating it as a subject worthy of intense philosophical scrutiny. However, there are ways in which a game can be difficult which are not cause for celebration. One such way often results from bugs. Bugs are essentially facts which exist within the game which are not actually intended to be facts in that game. And yet, even though bugs do typically make the game harder or more complicated in an unintended way, this is not always undesirable. Consider, for example, way back in the early dota 1 days, the buggy interaction between Tiny’s Avalanche and Toss which was deliberately left the way it was and ultimately came to define the hero [and arguably is the difference between Tiny being very useful rather than very useless in the early game]. Sometimes, a bug arises and it is decided that the bug is not problematic, or perhaps even adds something positive to the game. So then, the bugs we have a problem with are those which are both unintended and undesirable.These are the bad kind of bugs. Naturally then, they will usually be undesirable precisely because we think they make the game hard in ways they shouldn't, because the added difficulty is of a type which rewards things we don’t think worthy of reward - like sheer luck or, worse yet, bad decision-making.

So as to avoid needless debate about whether these bugs are ‘intended’ or not, I have made sure that all 5 of the bugs I discuss here are flagged as ‘confirmed’ on the Known Bugs List on the dev forums. I don’t mean to say that these are the 5 most serious ones that exist, and in fact they probably aren't. I’m sure there are several very serious bugs that I don’t know about, and even more that the public in general doesn't know about. My aim is merely to put a case forward for why the the five which I present should be more urgently addressed – all of them have been lingering in the ‘confirmed bugs’ section for a while now but none have been fixed.

Free Bottle refills [confirmation and discussion]

This first bug is one which I initially considered not posting on the basis that it is simply poor form to publicize certain kinds of bugs, given that this will lead to their further exploitation. Fortunately, in this case, round the same time that I was doing the final brainstorming about what to include in this post, someone else did exactly that. In fact, I need hardly spend much time explaining this bug, given that Na’Vi’s Youtube channel has so generously shared a video of it in their youtube channel.




As you can see in the video, the bug appears to work based on the way in which the fountain regen is programmed in dota 2. In dota 1, there is a fountain regen buff which stays on your hero for a few seconds after leaving the fountain area. There is also some kind of fountain ‘sensor’ which tells your Bottle it is close enough to be automatically refilled. dota 2 seems to have taken a shortcut and lumped this censor and buff together. So now we have a situation where Bottles will refill whenever they are in the inventory of a unit still affected by the fountain regen buff. This is not the case in dota 1 and is surely not intended to be the case in dota 2. Perhaps one reason it has been overlooked for a while on the dev forums is that it was originally posted as a concern about a hero tp’ing to a lane and using their Bottle once without having to waste a charge. But, as the video rightly suggests, the strength of abusing this bug is in abusing it with a teammate [or a Spiritbear]. If deliberately utilized to its full effect, we get a situation where any hero with a Bottle gains three extra charges every time an ally teleports to their lane from base. This is obviously absurd and is a very serious concern. In fact, I was a little astounded to find that someone at Na’Vi felt it appropriate to post this as a ‘cool trick’ when it is very obviously a bug, and very obviously a problematic one.

I have anticipated two obvious responses that a skeptic might have to my claims about the seriousness of this bug. First, one might argue that this is simply not the kind of thing that will happen that often, practically speaking, and thus is more of a fringe bug. While this may be true for pub games, I’m not especially interested in pub games for the purposes of discussing game balance. I don’t think this requires motivation. Meanwhile, in competitive games, lets consider the fact that a comnon strategy involves players couriering their Bottle to their hero in cases where they miss a refill from a rune or are unable to contest runes in general. One down side of this strategy is that it often adds quite a backlog of item transfers for the courier. That is to say, if the courier has to prioritize going back and forth between fountain and mid, it is unable to carry other items to other lanes. Sometimes this will mean heroes running back to base, but usually it just means that various heroes get their items late. In the competitive game, this is a very serious disadvantage. Of course, it doesn’t always happen and a very efficient team can manage their courier well, even when it is couriering the Bottle to mid a lot. But then they would be doing something which is praiseworthy, and allowing them an option which resulted in the same outcome, without the praiseworthy work, removes a skill from the game. Another downside of Bottle couriering is that you are forced to use your Bottle in very specific ways, usually to support the spamming of nukes for harassment or farming purposes, because the regen you gain has a timer on it [it must be used while the courier is hanging around]. Now here’s the important part. Rune control is a vital part of laning mid and teams which pick a mid hero which is unable to control runes on its own are forced to adapt in other ways, be it with Bottle couriering, roaming supports or some other creative maneuver. While allowing players to teleport to the lane to refill the mid player’s Bottle might not entirely remove the need for bottle couriering, it will certainly relax it considerably. Instead of supports roaming to control runes constantly and the Bottle being couriered to mid constantly, we can get the best of both worlds. Every few minutes [about as often as your opponent is getting a Bottle refill from a rune, anyway] a support can return to base, or quite plausibly will have died and will be there already. That support can tp mid for its own purposes – to gang, to apply pressure, to set up new wards – and in the process also happen to fill up the mid player’s Bottle. Essentially, at exactly no cost, you are receiving the same benefit as the opposing player whose team have picked certain heroes, placed certain wards, and played a certain way just to make sure that player received that exact benefit.

The second response I anticipate is one which argues that this information is freely available to everyone and thus does not create unfairness. Na’Vi’s video has over 100 000 views. It’s a known bug on the dev forums and, look, some guy is even blogging about it now! Surely any competitive team has easy access to the information? To this, I say: So what? If next patch brought with it a bug which made 6 Ironwood Branches combine into a Divine Rapier, I’m sure every competitive team would know about that pretty soon but this would not make it a bug which we embrace [not competitively, anyway]. Why? Because bugs can be undesirable even if their effect does not prejudice one team over another. In this particular case, I think that widespread knowledge of this Bottle refill bug could quite plausibly lead to pressure on teams to abuse it, in case other teams abuse it and they don’t. This has the potential to dramatically affect early decision-making in games in a way that we don’t want it to. We don’t want supports running to base when they don’t need to, just so they can refill a teammate’s Bottle. Or, perhaps more plausibly, we don't want to see supports that are already in base tp'ing to a less optimal place simply to refill someone's bottle. We certainly don’t want players to suicide neuts in order to die and tp mid to refill a Bottle. Meanwhile, this bug actually can prejudice one team over another, depending on which heroes each team gets. Lets not forget that only one team can have, say, Syllabear. And the Spiritbear version of this abuse can be particularly pernicious. It’s not that unreasonable to imagine a Spiritbear returning to the Syllabear during a push to find 3 or 4 heroes putting empty Bottles on it immediately for a free refill. But this is obviously a move we should not be rewarding.

These kinds of free Bottle refills are unwanted and unfair. This bug needs to go now.

Melee heroes attacking from range [confirmation and discussion]

The title of this bug speaks for itself. And while there is much speculation in various dev forum posts, to my knowledge it does not seem like anybody really knows why this happens. What we do know is that sometimes melee heroes can attack enemies which are far from within melee range. Observation also suggests that this usually occurs when the enemy has just jumped away using a blink or leap type spell but has been slowed round the same time. Here’s a clip of this happening:





What is especially troubling for me about this kind of bug is that it does the exact opposite of rewarding people for being good at the game. This bug takes one of the most basic fundamental assumptions about the game that a good player will rightfully make and turns it into a weakness. How would a good player, knowing about this bug, play around it? It appears that the only truly safe risk mitigation strategy would involve treating melee heroes as if they are always ranged. But this is absurd. Melee heroes are melee for a reason. If they really did have ranged attacks, most of them would immediately be overpowered, especially relative to the actual ranged heroes, whose range is often one of the major reasons for picking them in the first place. So, we don’t have an effective risk mitigation strategy. What else can we do? Well, one moderator response on the dev forums suggests that we should simply ignore it. We don’t know what causes this and it doesn't happen very often. So who cares. Right? There’s more important things to focus our attention on.
I have three problems with this type of thinking. Firstly, not knowing what causes the bug is reason to commit more time to thinking about it, not less. What an odd suggestion it is, in fact, to say that not understanding the source of a problem is reason to ignore the problem itself. Conceding that the problem exists is reason to exactly not ignore it. Recognizing that we don’t understand it is reason to research it, not push it aside. Of course I would never advocate endlessly experimenting to discover the source of the bug if it came at the cost of dev staff doing other work with tangible benefit. But I doubt whether there is such a direct trade-off. Perhaps there are even dev staff members looking at this problem as we speak, but I have no access to that sort of information and thus I can only respond to this moderator’s take on the situation here. 
My second problem with this moderator’s response is that I believe the lack of regularity at which this bug arises is counterbalanced quite neatly by the seriousness of its effects when it does. Consider that we seem to see it arise mostly when a hero has just escaped a melee hero and is fleeing for their life. This being the case, it means that this bug will very often result in a hero being killed when, in fact, it should not have been. I’m not sure how much more serious a bug can be [barring the obvious game-crashing or server-crashing bugs] than changing whether or not a hero lives or dies. Here’s another case which, by sheer chance, happened to me in CM pub a few weeks ago:



You will notice that naix hits me once while I’m mid-timewalk and then again after the timewalk is complete. This was my only death in a game which was mostly quite one-sided, and one which we easily ended up winning anyway. But what if this had happened later in the game? What if I couldn’t buy back? This kind of bug could decide an important match in an important tournament – it probably has already done so for someone, somewhere in the world. However, I don’t think we even need to go that far. I don’t think bugs need to manifest in their worst case scenarios in order for us to be worried about them. It’s really as simple as this. A bug which makes a hero die when it should live is very very serious. It wholly undermines the value in player skill and decision-making and dangerously unsettles our trust in a basic intuition about the game which we should be rewarded, not punished, for having.

My third and last problem with this mod’s response is quick and straightforward. Even if not knowing the cause of the bug and not observing it occurring often were reasons to not prioritize it, this bug is uniquely placed in the sense that it is a bug relating to a very basic concept in the game. It would be a very serious bug if ranged heroes suddenly only attacked at melee range sometimes, or if towers suddenly attacked their allies for a second or two, or runes suddenly spawned in base instead of in the river. But all of these things are on the same level of conceptual basis as this bug. Bugs make the game do unexpected things. But we don’t just have the ‘expected’ and the ‘unexpected’ but rather a continuum between the two, including the extremes. There are some things that we absolutely always should be able to take for granted, and possibilities that we should never even have to consider expecting. Like a melee hero suddenly attacking with range.

Phantom Douchebag [confirmation and discussion]

I will discuss the next two bugs together, as both of them relate to Phantom Lancer and both are serious mostly in the sense that Phantom Lancer is already a very strong hero at the moment, without having bugs to help him out. I call PL a douchebag because both of these bugs allow him to do very douchey things. First, sometimes PL’s Doppelwalk creates an image at full hp, regardless of his own hp, as shown below:




However, this video doesn't demonstrate just why this is such a douchey move. Well, quite simply, fights involving Phantom Lancer are often very messy. There are a lot of images and a lot of spells being casts and thus a lot of animations to track. Meanwhile, when ganging a Phantom Lancer, it takes concentration to maintain focus on which PL is real and even one second looking away can result in one losing sight of the real hero and ending up mistaking an image for it. However, luckily for PL hunters, there are some useful heuristics that we can learn to use. We know, for example, that if see a bunch of Phantom Lancers, and then suddenly one more which has more hitpoints than all the others, that that one MUST be real. Why? Because the images’ life cannot go up. While it is possible that the real guy was invis and has now just revealed himself or that the real guy is regenning from Heart or lifesteal, neither of these possibilities work for the images. So when you’re looking at a bunch of Phantom Lancers and suddenly see one with a whole lot more hitpoints appear, it is very reasonable to assume that that’s the real one. But, given the bug, following this heuristic will sometimes lead to initiation on an illusion. This grants Phantom Lancer further misdirection than he already has and, crucially, this misdirection is the kind which don’t want to reward. Why? Because a player who follows the above mentioned heuristic was playing well. They should not be punished for making good decisions.

Also, in the lategame when Phantom Lancer has a lot of items, creating a full hp illusion as opposed to, perhaps, a low hp illusion is a very big deal. That illusion will spawn more illusions as well and since their only major weakness is their ability to tank, having a lot more hitpoints is a huge advantage for an army of illusions.

3.2 [confirmation and discussion]

The second Phantom Lancer bug is one which will happen a lot less often because it relates specifically to its interaction with certain heroes. In particular this is a problem to do with PL's interaction with Morphling – though I suspect it could occur with a few other heroes too. Unfortunately I don’t have video footage of this one and will thus have to talk you through how it works. I came across this bug when I lost a competitive game in my local league partially as a result of it. My team wasn’t performing so well on the day so we hardly deserved to win anyway and I didn’t make a fuss about it. However, the time for not making a fuss is over. Bullies like PL prey on their victims keeping quiet. 


Here’s how it goes. First, the other team drafts PL. Okay, common enough pick at the moment. It's pretty good, I suppose. No surprises yet. As my team’s drafter, I decide that it’s time to test a secret counter I've been working through in my head for several weeks. Morphling. Why? Well, we've all seen how Shadow Demon causes big problems for late game Phantom Lancers. Simply by creating copies of PL for a few seconds, Shadow Demon can sometimes spawn an entire PL army for his own team. But Morphling’s Replicate ability can create a copy of an enemy hero for up to 60 seconds. This could spawn ranks of PL armies, not just one. And the Replicate image will tank as well the PL itself, meaning that if the other team is not able to hex it, it’s going to be a thorn in their side for quite some time. In fact, since the cooldown is only 20 seconds more than the duration, an efficient Morphling player could almost permanently have his or her own PL army available. Of course, if it does get hexed, well, then a hex has been used and it wasn’t on a hero so that’s also great.

Someone in my team even remarks about how Morphling’s split push can help to counter PL's split push and an early Eth Blade could potentially be devastating for the weak supports which characteristically cover PL in the safe lane. Morphling seems like a great idea. So I pick it. The game proceeds as normal until we get to the point where Morphling copies PL for the first time. And immediately the bug is upon us. Morphling’s Replicate image does spawn Juxtapose Images, just as intended. In fact, there's tons of them and at first it seems like a dream come true. However, the Morphling is unable to control these images. But wait, it gets worse. PL himself has control over them.

So then, Morphling, which in theory might be a great counter to PL [would require further testing once the bug is sorted] is unable to do anything against PL. Any attempt to create an army of your own PL s results in the immediate mutiny and subsequent turncoating of your army. If this isn't a douchey move, I don’t know what is. Phantom Lancer is already a very very strong hero. With an agility gain which is through the roof, it hardly needs bugs to be helping it out. And really, all I’m asking for here is for his spells to do what they say they do. Doppelwalk needs to create an illusion of PL and not some other imaginary full hp PL and this needs to happen always. And Juxtapose needs to give images to the controller of the unit with Juxtapose.

Juggernaut's boredom: Omnislashing just isn't what it used to be
[confirmation and discussion]

So the first bug discussed here was one which I see as very relevant, the second is one I describe as being fundamental, and the third and fourth are very unfortunate given the 
PL-enriched state that many metagames worldwide find themselves in at the moment. This last bug is probably closest to the previous two in that its importance originates in its weakening of a hero who is not a particularly popular pick in any metagame right now, but perhaps could be. I will admit that part of the reason I’ve included this one is because of my affinity for the hero and especially my affinity for playing it with a very aggressive early-gank mid-game carry style.

So here’s the bug: Juggernaut can’t use items during Omnislash. A couple of years ago, dota 1 Juggernaut was buffed by allowing him to use items during his Omnislash. This was useful in various ways, ranging from using a Dust of Appearance when an invis hero joins the fight and you’re already Omnislashing to using Blink Dagger to manipulate your Omnislash’s position [a risky move sometimes] or Force Staff to push unwanted tanks out of the way of your kills. You might even want to use BKB or Satanic right before your Omnislash is about to end so that you will be slightly less fragile in your post-Omnislash state. Significantly, in dota 1, you can use Lothars mid Omnislash and stay invisible when the Omnislash ends for the rest of the Windwalk duration. And perhaps most relevant is the fact that being able to use items in Omnislash means being able to purge off ghost scepter, an item which otherwise can shut down your ulti completely. Unfortunately, in dota 2, as it stands, Juggernaut cannot use any items during Omnislash. This makes the ulti much more one dimensional and allows the hero a lot less build options. This is especially the case given that Juggernaut does not really match up well against the hardest of the conventional carries. Which is to say, it’s not at all uncommon for a Juggernaut to be reduced to just his Omnislash when a game gets to the lategame. Given that you will be building yourself to output damage and the fact that your natural survivability is entirely dependent on your spinning, which will not help you against physical dps later on, it is vital that a Juggernaut be able to contribute in a major way to fights with its ultimate. This is even more emphasized by the recent buff which made its Omnislash kill creeps in 1 hit. Clearly, Juggernaut is expected to dish out beatings to enemy heroes with its ultimate. But with so much pressure on the hero to Omnislash well, and frankly, a lot of pressure to do so before being disabled and shut down, it is a serious disadvantage to not be able to use items while in the process of Omnislashing. While you are using your ultimate, you are invulnerable and thus there is plenty of time to decide to use items like Dust, Diffusal Blade, or even BKB. Contrast this to a situation where you need to decide whether or not to use these items only before or after you ultimate. Afterwards may be too late, but before you don’t really want to be concerning yourself with secondary worries – you need to be focused on your timing and positioning, making sure you get a good ulti off in the first place.

All in all, the ability to use items mid-Omnislash allows for Juggernauts to be more creative, more sneaky, and more maneuverable  It increases a player’s options and opens room for complicated decision-making which, if made well, would be a nice thing for the game to reward.

Final notes

I'd like to reiterate that I am fully aware of my own vast ignorance with regards to the technical side of bug fixing and game developing in general. There may very well be good reasons for why all 5 of these bugs have not yet been prioritized. With the given information, however, I feel that all 5 of them have gone unnoticed for far too long.

Thanks to everyone has continued to provide positive feedback, by way of praise, criticism and suggestions. This is the first post in which I've not included any explicit sort of TL:DR plan. If this is a problem for anyone, I'd like to hear about that. Thanks for reading!