Most Age of Empires IV players learn counters as a diagram: spears beat horses, crossbows beat armor, archers beat the unarmored. That diagram is a summary of two data fields, and the game’s official support site publishes both — not in a strategy guide, but in the tuning-pack documentation it maintains for modders. This piece assembles the model from that documentation and cross-checks the vocabulary against the official release notes, so a fight can be read instead of memorised.
It is deliberately not a build order. If you want the English opener, the site already has the Council Hall longbow build; if you want what changed in the current patch, there is the Update 17.0 preview. This is the machinery underneath both, with every figure attributed to the page that prints it.
What this covers: how a hit is assembled in Age of Empires IV — the weapon that deals it, the per-damage-type armor that resists it, the flat bonus that decides matchups, and the timing and geometry that decide whether the bonus ever lands. Why it matters: the counter chart players memorise is generated by flags in the game’s data, so when a “correct” counter loses, the explanation is usually one of five checkable things rather than a mystery. Who should care: new and returning players who can build an army but cannot explain a lost fight, and anyone reading patch notes who wants to know why one line of a note matters more than another.
The pipeline, as the documentation names it
Every damage event starts at a hardpoint. The support documentation is explicit about the direction of causality: damage requires a weapon assigned to one of the unit’s hardpoints, because “it is this weapon that deals damage, not the unit”. Units can possess “up to 4 weapons”, and a weapon’s stats live in a shared blueprint file that multiple units can reference — which is why two very different units can hit for identical damage.
That single sentence explains a class of confusion. You are not fighting a knight; you are fighting whatever weapon the knight’s hardpoint points at, and the knight’s defensive stats are a separate node entirely.
| Layer | Name in the game data | What it actually decides | Documented in |
|---|---|---|---|
| Delivery | combat_ext → hardpoints → 1.hardpoint → weapon_table | Which weapon a unit swings, throws or fires | “5) Hardpoints and Damage” |
| Mitigation | health_ext → armor_scaler_by_damage_type | Resistance against fire, melee and ranged damage separately | “4) Modifying Unit Stats” |
| Matchup | target_type_table → base_damage_multiplier + unit_type | Flat bonus damage against a flagged unit class | “6) Weapons Masterclass” |
| Cadence | aim, wind_up, wind_down, then cooldown (melee) or reload (ranged) | When the damage lands and how often it can land | “6) Weapons Masterclass” |
| Geometry | range min/max, area_effect distance zones, outer_radius | How far away it works, and how much it does at the edge | “6) Weapons Masterclass” |
Four of those five layers are things a player can watch happen. The second one is where most arguments about counters actually live.
Armor is filed by damage type, not by unit
The support article on unit stats describes armor as three separate resistances rather than one number: “Armor allows you to individually tune a unit’s resistance vs fire, melee, and ranged damage under armor_scaler_by_damage_type.”
Patch notes then print those as pairs, which is the tell. In the 13.1.4420 notes, the Elite Hospitaller Knight’s armor moves from “5 melee 6 ranged” to “4 melee 5 ranged”, and the Condottiero’s from “1 melee and 1 ranged” to “2 melee and 3 ranged”. Two values, adjusted together but not identically. A unit is not armored; it is armored against particular things, and the numbers diverge.
Armor also arrives in class-scoped upgrades, not as a universal buff. Patch 15.3.8338 names three Macedonian Dynasty technologies in a single line — “Butted Chainmail (Ranged), Lamellar Armor (Melee Infantry), and Scale Barding (Cavalry)” — with the parenthetical naming the class each one upgrades. Elsewhere armor is a temporary grant: the same notes fix an issue that stopped the Khan from giving nearby units “+2 armor with the Defense Arrow ability”.
There is a second, separate mitigation channel that is easy to conflate with armor. The Condottiero line in 13.1.4420 also includes “Damage reduction from gunpowder sources increased from 20% → 33%” — a source-category resistance that sits alongside its melee and ranged armor values.
What the documentation does not state is the arithmetic that combines an armor value with an incoming hit. The field is named a scaler, which is not the same claim as flat subtraction, and none of the pages fetched for this piece prints the formula. Treat “armor subtracts X from every hit” as unconfirmed for this build.
Bonus damage is a flag match, and it is additive
Here is the mechanism the chart is generated from. Weapons carry a table of bonus values keyed to target types, and the support documentation describes the operation in one sentence: “Bonus damage is calculated by an additive value.” A value of 5, it explains, adds 5 damage to each attack against the specified unit type.
It then gives a worked example that names a real unit class and a real unit: archers deal “5 extra damage per shot to any targets flagged with light_melee_infantry (ie: the spearman)”. That is the whole of “archers counter spearmen”. Not a bespoke rule — a flat five, applied per shot, to anything carrying that flag.
Two consequences follow, and both are useful at the table.
First, the bonus is per attack, so its value scales with cadence rather than with the size of the fight. If an attack cycle shortens, the counter gets stronger without any note mentioning it.
Second, the target is a flag, so the interaction depends on what the game thinks a unit is. Official notes use that vocabulary directly. Update 17.0.12182 fixed a bug that had “prevented the Condottiero from taking damage as a heavy unit” — a defensive interaction keyed to a class label, corrected as a bug. When a counter underperforms, the flag is a legitimate suspect.
The publisher also states matchups in plain language where it wants to. The Malians page describes the Javelin Thrower as replacing the crossbowman and, “as an excellent counter to ranged units”, dealing “bonus damage” with “additional range when compared to archers”, and calls the Donso “the anti-cavalry hunter-warrior of the Malians”. The Donso is also the clearest illustration of the hardpoint layer: it carries a spear and a javelin, and the page says the javelin is “automatically thrown at their target when not in melee combat”. Its counter profile is different depending on how far away you are standing.
The labels official notes actually print
The counter chart is a summary of target flags, so it is worth seeing which labels the developers themselves write down. Every row below is quoted from the page named in the right-hand column.
| Target label | Where it is printed | The value change |
|---|---|---|
| Cavalry | Update 17.0.12182, Ottoman Janissary | Bonus damage vs Cavalry reduced from 11 → 10; elite 13 → 12 |
| melee infantry | Update 17.0.12182, Jin Dynasty Bed Crossbow | 4 → 6 (Feudal, Veteran), 5 → 7 (Elite) |
| Heavy | Update 17.0.12182 (appended post-launch section of the 17.0 notes), Skåne Crossbowman | Bonus damage vs Heavy reduced from 10/12 → 9/11 |
| buildings | Update 17.0.12182, Sengoku Daimyo Early Ozutsu | Bonus damage vs buildings increased from 70 → 80 |
| elephants | Patch 13.1.4420, Knights Templar | Heavy Spearman bonus vs elephants 5 → 8 (III), 6 → 10 (IV) |
| Incendiary Ships | Patch 15.2.7380, Byzantine Dromon | Added +3 bonus damage vs Incendiary Ships |
light_melee_infantry | Weapons Masterclass | Archers: 5 extra damage per shot |
Read the third row and the fifth together. “Heavy” and “elephants” are different kinds of label: one is a broad class that many units share, the other is a narrow target that only some weapons have an answer for. A note that says “vs Heavy” changes a wide swathe of matchups; a note about elephants changes the handful of fights that involve them. Same-looking lines, very different blast radius.
Damage arrives late, and cadence is a stat
The most common way a correct counter loses is not arithmetic but scheduling. The documentation separates the parts of an attack: wind_up controls “the amount of time between when a unit begins it’s attack animation and when it deals its damage (melee), or launches its projectile (ranged)”, and wind_down covers the recovery after it.
Melee units then pay a cooldown between attacks — the guide gives the spearman as “a .75 second period between attacks”. Ranged units instead pay an aim stage and a reload stage; the archer’s aim is “.25 seconds” and its reload “.75 seconds”. Aim also gates movement: “any value above 0 will prevent the unit firing while moving”, with Mongolian horse archers cited as the exception because their aim time is 0, “allowing them to move and shoot simultaneously”.
So a melee counter that walks into a ranged unit has to survive the walk, and a ranged counter that is chasing cannot fire while it chases. Pulling a unit back mid-animation cancels the damage it was about to deal, because the damage happens at the end of the wind-up rather than on the click.
Geometry: minimum range, tiles and falloff
Range is not a single maximum. Weapons can carry both: the guide’s trebuchet lists a “Maximum range of 64 metres” and a “Minimum range of 11 metres”, the minimum being the zone it cannot attack into. With “each tile is 4 meters across”, the minimum reach is 2.75 tiles, so the dead zone is about five and a half tiles across — small on a screenshot, decisive when something is standing on top of the trebuchet.
Area damage has the same shape of surprise. The area_effect distance field sets three zones — Near, Mid and Far — whose values are multipliers on the weapon’s damage. For the trebuchet example those are 100% of damage out to 0.4 metres, 25% between 0.4 and 0.8 metres, and 10% between 0.8 and 1.2 metres, with outer_radius acting as a master cutoff. An area attack that looks like the answer to a clump is doing a tenth of its damage to the outside of that clump.
Buffs move the numbers mid-match
The chart is also not static within a game. Update 17.0.12182 carries two lines that show how far a modifier can reach into this pipeline. In The Crucible balance list of the same notes, “Quality over Quantity bonus increased from 150% → 200%”, with the addition that it “Also now applies to bonus damage” — a boon that reaches into the matchup layer rather than the base hit. And “Boggy Ground now only applies its debuff to enemy units. Armor corrosion of -1 armor added.” — an effect that edits the mitigation layer directly.
Both appear in The Crucible’s balance list rather than the standard technology tree, but they demonstrate the structure: bonus damage and armor are fields, and fields can be modified by something other than a patch.
How to read a fight in ten seconds
- What dealt the damage? The weapon, not the unit — check whether the counter unit was even in range of the thing it counters.
- Which damage type? Melee, ranged or fire. A target with high ranged armor says nothing about its melee armor.
- Is the target flagged? If the bonus line reads “vs Cavalry” or “vs Heavy”, confirm the unit in front of you is in that class, and remember class bugs get patched.
- Did the attack land? Look for cancelled wind-ups, a ranged unit that was chasing, or a siegesiege. A timed, large-scale attack on a settlement — attackers try to destroy it, defenders try to hold it. unit inside its minimum range.
- Was the hit at the centre? For area damage, position decides whether you applied the full multiplier or the outer one.
That is the whole method. The chart is a lookup table over two fields; the fields are cheaper to remember than the chart, and they survive the patch that rewrites it.
What remains unconfirmed
The exact combination of armor with incoming damage is not printed anywhere in the material fetched here, and the field name suggests a scaler rather than a subtraction. The full list of target flags is also not published — the labels in the table above are the ones the notes happen to print, not a complete enumeration. For units no patch note touches, no absolute damage value is published — notes print changes, and a change is only visible where one happened.
One further caveat on timing: the 17.0 notes were published on 22 October 2026, and the launch-day post on 29 October says the team added “additional fixes and changes that were not part of our 17.0 Preview”. The values quoted here are the ones the notes print; check them in the client before building an argument on any single number.