Skip to content
All posts

Hard counters, soft counters, and how to pick the numbers

·by Rene Wang·5 min read

Why rock-paper-scissors is the backbone of every RTS, what breaks when a counter is absolute, and how a two-axis damage matrix keeps 26 units all worth building.

Every real-time strategy game has to answer one question before it has a design at all: why would you ever build the cheap unit?

If damage is damage and hit points are hit points, the answer is that you would not. Cost efficiency collapses into a single ranking, the best unit per metal wins, and the strategy in your strategy game reduces to executing one build order slightly faster than the other player. Counters exist to stop that happening — and how you implement them decides how a game feels for its entire life.

Hard counters: the absolute kind

A hard counter is a rule, not a number. Anti-air weapons cannot shoot ground units. Ground weapons cannot shoot aircraft. A submarine is invisible to anything without sonar. In each case the damage is not reduced, it is zero, and no quantity of the wrong unit fixes it.

Hard counters are wonderful for legibility. A player who has learned one has learned it permanently: bring anti-air or lose your army to aircraft, full stop. They also create the genre's best moments, the ones where a scouting report changes what you build for the next three minutes.

And they are dangerous, because they are unforgiving. A roster made entirely of hard counters plays like a guessing game — you either brought the answer or the fight was over before it started, and the skill on display is mostly whether you scouted in time. Worse, hard counters make units dead weight. A unit that literally cannot participate in the current fight is metal you wish you had spent elsewhere.

So Steel Tide uses them exactly where the fiction demands them and nowhere else: the air/ground divide, and submarines. Everything else is soft.

Soft counters: multipliers

A soft counter says a matchup is bad, not impossible. A machine gun does 1.5× damage to a light vehicle and 0.4× to heavy armour; a shaped-charge anti-tank missile does 1.8× to heavy armour and 0.4× to a light vehicle. Bring the wrong one and you still fight — you just pay about three times as much metal for the same result.

This is a better default for three reasons.

Nothing you built is wasted. A unit caught in a bad matchup is inefficient, not inert. It still shoots, still soaks damage, still holds ground while the right unit arrives.

Mistakes are recoverable. Getting the composition wrong costs you a trade, not the match. That is a much better learning curve — the game tells you that you were wrong without ending the conversation.

Mixed armies become correct. If every matchup is a multiplier, the optimal army is almost never one unit type. It is a spread, weighted by what you have scouted. That is the decision an RTS actually wants you to be making.

Two axes instead of a pile of exceptions

The obvious way to build this is a per-unit table: for each attacker, a damage number against each defender. With 26 units that is a 26×26 grid — 676 numbers, none of which explain themselves, all of which have to be re-tuned whenever a unit changes.

Steel Tide uses two axes instead. Every weapon belongs to a weapon class — what it was built to kill: machine gun, autocannon, tank cannon, anti-tank missile, high explosive, rocket pod, naval gun, anti-ship missile, torpedo, anti-air. Every unit has exactly one armor class: light, medium, heavy, structure, ship, submarine, aircraft.

One matrix of ten rows by seven columns says how much each weapon class does to each armor class. Seventy numbers, each of which means something you can say out loud:

  • Machine guns shred soft skins (×1.5 light) and ping off plate (×0.4 heavy).
  • Tank cannons are built for armoured duels (×1.3 medium) and over-penetrate soft targets (×0.6 light).
  • Anti-tank missiles are the extreme case in both directions: ×1.8 against heavy armour, ×0.4 against anything light. A shaped charge punches through plate and passes through a jeep.
  • High explosive is the siege row: ×1.6 against structures, ×0.75 against heavy plate. Artillery flattens bases and disappoints against tanks.

A new unit inherits sensible behaviour the moment it is given a weapon class and an armor class, without anyone deciding what it does to twenty-five other units. Where a specific weapon genuinely needs to break the rule — a static turret that should not be as good at demolition as a tank is — it overrides a single cell, and the override is visible on the unit's own page.

The full table, rendered from the game's definition file rather than transcribed, is on the wiki.

Why the numbers stop at 0.4 and 1.8

The tempting move is to make counters dramatic: ×0.1 here, ×3 there. It reads well in a design document and plays badly.

At ×0.1 you have re-invented the hard counter without the clarity of one — the unit is technically able to fight and practically useless, which is the worst of both. At ×3 the counter unit stops being a counter and becomes an auto-win button: whoever scouts first simply deletes the other army, and the actual game is the scouting.

The range from roughly 0.4 to 1.8 keeps a bad matchup expensive rather than fatal. A three-to-one metal advantage is decisive without being instant — enough that composition matters more than micro, not so much that a single wrong guess ends the match.

What the multiplier does not tell you

A counter has to arrive. This is where a table stops being the whole story, and where most of the actual play lives:

  • Range. A unit that out-ranges its counter never fights it on equal terms. Rocket artillery is soft, slow and dies to a single raid — but only if the raid gets there.
  • Speed. The correct answer that arrives ninety seconds late is the wrong answer.
  • Vision. Long-range weapons cannot shoot what nobody has seen. A siege unit without a spotter is firing at memories.
  • Cost. Multipliers stack with price. A cheap unit with ×1.8 out-trades an expensive one with ×0.4 twice over, and that is the single most useful sentence on the subject.

So the matrix is the floor, not the ceiling. It guarantees that every unit in the game has something it is genuinely the right answer to. What you do about getting it to the right place at the right time is the game.

Want to see it applied? The counter web has the whole table and the per-unit results; every unit page shows what it preys on and what preys on it.

rtsdesigncombat