We're seeing some capacity limits, so parts of the site may be slow or briefly unavailable while we work on an upgrade. Please try again later, or join our Discord for updates.
Discord
Dev blog
Release notes

Making draft counters actually bite

Dota Captain
5 min read

The story of turning draft counters from decorative labels into a real force that swings fights, plus giving the solo enemy captain a mean streak aimed at the heroes you actually spam.

For the first few weeks, the counter badges on the draft screen were a lie I told myself. You could hover a hero, see that it countered another, feel clever about the pick, and then watch the match play out as if none of it had happened. The label said one thing and the engine did nothing. I kept staring at drafts where I had made the textbook counter pick and lost the fight anyway, and it bothered me for weeks, because a counter you cannot feel is just decoration. This is the story of making those counters bite, and of teaching the solo enemy captain to fight back like it actually knows who you are.

The badge that meant nothing

When I first added counters to the draft, I told myself the display was step one and the simulation would catch up later. Later took a while. In the meantime you had a screen that promised something the match never delivered. You would pick a silence into their caster, the badge would light up, and then the sim would resolve the fight on net worth and roles alone as though the two heroes had never met. The intel was honest about what real Dota does. The engine just ignored it.

That gap is the worst kind of bug because nothing crashes and nothing looks wrong. It quietly teaches players the wrong lesson. If drafting the counter changes nothing, then the drafting screen is a costume, not a decision. A few of you told me as much, politely, and you were right. I had built a scout that could read the matchup and a simulator that refused to listen to it.

Making the matchup swing the fight

The first real fix landed in 0.4.0. Hero-vs-hero counters finally started affecting the match simulation. A good draft matchup now gives your team an edge in fights, and getting countered puts you at a disadvantage. It was not subtle, and it was not meant to be. I wanted the pick you agonised over to leave a fingerprint on the result, so that a clean counter felt like it earned something and a bad matchup felt like a tax you were paying every teamfight.

Around the same change I added a few things to make the draft itself less lonely. Role filters on the hero grid let you narrow the pool by combat role while you draft, which sounds small until you are twelve picks deep and trying to find a position four. There is a coaching sidebar now with scout reads and step nudges, a Help toggle for when you want it out of the way, and a Vs indicator that shows up once the counter matchup intel is ready. And the pregame lobby got redesigned into a compact command deck that shows faction, pick order, and an enemy scout brief before a single hero is banned, so you walk into the draft already knowing something.

Giving the enemy captain a grudge

A counter system only matters if there is someone across the table making choices. The solo enemy captain used to draft in a vacuum, indifferent to who you were. In 0.4.1 I taught it to read your lobby most-played heroes. Its two opening bans are now weighted-random from that pool, so the targets shift every draft instead of hitting the same hero on rails. Spam one hero and expect to see it removed. Spread your comfort around and the bans get less predictable.

It can also deny-pick one of your comfort heroes right before your next pick, which is a genuinely annoying move in the best way, because that is exactly what a human captain does when they have watched your history. To keep it fair rather than mysterious, the pregame scout briefing shows your own comfort pool on file, the hero counts and what the enemy might target. I would rather you see the knife coming than feel cheated by it. The point was never to make the AI cruel. It was to make it feel like it had actually done its homework on you.

When counters finally started to bite

The version I am proudest of is 0.6.0, because that is where counters stopped being a soft nudge and started to hurt. A countered hero now fights measurably weaker and gets focused down first. Draft a silence into a caster, or Doom into a farmed core, and it actually swings the lane and the fight the way it should. The countering hero is not just winning on paper, it is dragging the enemy priority target to the front of the queue and deleting it.

Here is the part I care about most, because it is the real Dota idea underneath all of this. A counter is conditional and reversible. It only bites while the countering hero is alive. Kill that hero and the countered one is freed again, back to full strength. That is why in real games you do not just accept being countered, you go hunt the answer. Your Doom is only a problem for their carry until your team catches Doom out of position. The sim now respects that loop, so a counter is a lever you have to keep holding down, not a permanent debuff you slap on and forget.

Enough coverage to matter, and the honest limits

A counter system that only knows a handful of heroes is a party trick. So alongside the biting behaviour I expanded coverage from 62 heroes to 113. That is a mix of curated mechanical counters, the ability-driven matchups I could hand-verify, and statistical matchup edges for the rest. The two are not equal in quality and I will not pretend they are. The hand-picked mechanical ones are the ones I trust most. The statistical edges are a decent approximation that fills the gaps until I can curate them properly.

I want to be clear that the match engine is still an approximation and it gets things wrong. It reasons about counters as fight-strength edges and focus priority, not as the full texture of a real Dota game, so it will sometimes over-reward a matchup that a good player would neutralise with positioning, or miss a counter that lives entirely in one ability interaction I have not encoded yet. I am one person building this in my spare time, and I am figuring out the balance as I go. But the core lie is finally gone. The badge on the draft screen and the result of the match are pointing at the same thing now, and killing the right hero at the right time actually changes the game. That is the version of this I always wanted to ship.

Release notesDraft