Enemy design is an immunity budget

Measured from the client's own unit blueprints — logic/units.jsonl (6,136 unit definitions) and logic/unit-resistances.jsonl (3,011 units with resistance wiring) — build 20212986, patch 2.7.0x.

Every enemy you fight is a blueprint with a challenge rating, a pile of hit points, and — increasingly as you level — a wall of immunities. We dumped all of them and counted. The pattern that falls out is simple: the game budgets immunities the way other games budget hit points.

The census

6,136 unit blueprints ship in the client; 5,784 of them are real content (the rest are test rigs like TestTroll, who carries 32,000,000 hit points — the largest HP value in the game, and mercifully unkillable-by- design rather than killable). Of the real ones:

| CR band | Units | |---|---:| | 0–4 | 1,477 | | 5–9 | 1,051 | | 10–14 | 711 | | 15–19 | 598 | | 20–24 | 403 | | 25+ | 248 |

Challenge tops out at CR 40 — Nahyndri and Balor — while the bulk of the file is low-CR filler: a third of all enemies sit at CR 4 or below. (A lone test blueprint reaches CR 99 wearing a real demon's display name — TutorialTestISpellResistance, alias "Vavakia" — which is why every number here filters test rigs by path and name.)

Speed is nearly always 30 ft (3,760 units); 40 ft is the mounted-and- monstrous minority (1,065). The 60-ft club holds just 198 units.

The immunity budget

3,011 units carry at least one damage-reduction, energy-immunity, or spell-resistance entry. Counting every entry across every unit: 11,025 immunities, 4,052 damage reductions, 1,367 spell resistances.

Now join each unit's immunity count to its CR and average per band:

| CR band | Units | Mean immunities | |---|---:|---:| | 0–4 | 469 | 2.2 | | 5–9 | 534 | 2.9 | | 10–14 | 527 | 3.4 | | 15–19 | 532 | 3.6 | | 20–24 | 347 | 5.3 | | 25+ | 239 | 6.2 |

Perfectly monotonic. A CR-27 boss carries triple the immunity load of a CR-1 mook — long before hit dice enter the picture, high-level enemies are defined by what simply doesn't work on them.

What the walls are made of

Energy defenses, all units (immunity or resistance entries): Cold (804) edges Fire (751), then Acid (353), Electricity (323), Negative (147), Sonic (69). Holy, Unholy, Divine, and Positive defenses exist but only in single digits each — the game knows which damage types players actually bring. Counted strictly as full immunity, Cold still leads (399) over Fire (228) and Acid (198).

Among the 203 boss-flagged units, Cold and Negative tie at 35 each, ahead of Fire's 22. If your caster's plan was scorching ray, the data is telling you something.

Condition immunities are the real wall. Paralyzed leads everywhere (314 units), then Prone (286), Difficult Terrain (269), Entangled / Slowed / Can't-Move (193 each), Frightened (178), Petrified (153). 74 boss-flagged units are immune to five or more conditions at once. The record holder, the Devourer Overseer, no-sells eleven: Can't-Move, Difficult Terrain, Entangled, Exhausted, Fatigued, Frightened, Nauseated, Paralyzed, Shaken, Sickened, Slowed. That's not a stat block, it's an anti-crowd-control insurance policy.

Spell resistance has one formula: 1,345 of the 1,367 SR entries are the same shipped asset — SR = 11 + CR, scaled by challenge rating. Three stubborn units carry flat SR 30 instead.

Oddities worth knowing

  • Damage reduction comes mostly in physical flavor (2,630 entries) and energy resistance (1,320); 69 units use swarm-style DR (weapon immunity), and 33 are objects wearing hardness.
  • The highest honest HP belongs to generic "Enemy Leader" units at 1,000; Urgathoa, goddess of undeath, sits at 999 next to the Pillar of Skulls. Several immortal story entities are literally named Storage.
  • 170 blueprints carry the story-companion flag — the party roster plus its many variants and cut content.

Browse the full census per creature in our Bestiary.

Sources

  • logic/units.jsonl — all 6,136 unit blueprints with CR, HP, speed, skills, and component lists.
  • logic/unit-resistances.jsonl — 3,011 units' DR/immunity/SR wiring, each entry pinned to its source fact path.
  • Build: 20212986 (patch 2.7.0x).