Combat Width & Terrain: Data Analysis EN (v1.19) 07/2026

Hearts of Iron IV106 views5 favorites7 min readby ZesasUpdated 21 JulView on Steam ↗

Why this guide is different

Thanks to u/lillelur and u/Emzatin from Reddit — if it weren't for them, I wouldn't have put in this much effort!

https://steamcommunity.com/sharedfiles/filedetails/?id=3766078597

Almost every division guide hands you a ready-made "meta": copy this template, use this width, done. The problem is that nothing in HOI4 is exact — what exists is what performs well or badly in each situation. This guide doesn't give you a single answer; it gives you the numbers so you can decide.

Everything here was extracted straight from the game files (Operation Postern, v1.19) — combat width, each unit's terrain modifiers, attrition, supply. It's not guesswork or a wiki copy: every value comes from a game file and can be checked. On top of that, I built views that answer practical questions:

  • Which division width fits best in each terrain (and why 14, 15, 18 or 25 show up so often).
  • How each unit type performs in each terrain — why armor struggles in the mountains and a mountaineer shines there.
  • The cost of operating in each terrain outside of combat — attrition and supply, the logistics side almost nobody looks at.

Where the data comes from

The idea here is simple: give you (or anyone) a base to build divisions however you want, looking at what's good and what's bad in each situation — not to follow an exact meta. Nothing in the game is exact; the difference is in the effectiveness.

Every number comes straight from the game files (not from a wiki, not from memory), on version Operation Postern v1.19.1. Every value is traceable by file:line. Three files do the heavy lifting:

File
What came from it
common/terrain/00_terrain.txt
Combat width and support width per terrain; and the attributes: movement_cost, attrition, units attack, enemy air-sup factor, supply flow penalty, truck attrition and sickness.
common/defines/00_defines.lua
Overstack (excess width) and stacking (piling up divisions) constants.
common/units/*.txt
Terrain modifiers of each unit type (attack / defense / movement) — infantry, cavalry, armor, support, etc.

This data was placed into a star model (dimensions + facts). With it, I refined the data into separate tables:

Table
What it's for
Dim_Terrain
8 terrains + 3 cross-terrain (river/amphibious/fort), with all the terrain attributes.
Dim_WidthGroup
The 4 groups that share the same width (e.g. mountain and marsh = 50/25).
Dim_Unit
Unit types + category and base modifiers.
Dim_Direction / Dim_Width
Attack directions (1–4, with weight) and the width axis (5–50).
Dim_Constants
The overstack/stacking defines, for reference.
Fact_UnitTerrainMod
The heart of it: each row = unit × terrain → atk/def/mov.
Fact_BattleWidth / Fact_FitPenalty
Battle width per group×direction, and the fit penalty per width×group×direction.

A rule that applies to everything in the views: separate FACT from INDEX
  • Fact = raw number extracted from the game (width, attrition, unit modifier). Those numbers point to a reality — that's why it's called a fact: "This costs 5 horses; if I buy it, I'll spend 5 horses!"
  • Index = a calculation I built on top of that (Effective Score, Logistics Index). Where it's an index, it's marked as such — it's a model, not the game's absolute truth. "Right now it costs 5 horses, but two weeks ago it cost 3 — that's 20% inflation per week!"
Effective Score and Logistics Index are decision indexes (a model), not facts nor exact game measurements.

Calculations, formulas and visions

2.1 Combat width fit
A battle's front has a width. For 1 direction it's the terrain's base width; each extra attack direction adds the support width:
battle width = base + (number of directions − 1) × support
Your divisions fill up that width. If it doesn't fit evenly, you lose efficiency in two ways:
  • Overstack (excess): −1% per point of width that goes over, up to a −33% cap. Beyond that no more divisions join (reinforcement stops at 1.33× the width).
  • Stacking (piling up): starting at 5 divisions in the combat, −2% per extra division, with +3 slack per attack direction.
The fit penalty combines the two: it's how much you waste by picking a width that doesn't close cleanly in that terrain. 0% = perfect fit. To read it as "higher is better", I flipped it into a measure: Fit Efficiency = 100 − penalty.


2.2 Terrain suitability (atk / def / mov)
It's how well/badly each unit fights in a terrain. Take the unit's real modifier (from its own file) and add it to 1:
Suitability = 1 + (unit's modifier in the terrain)
1.0 = neutral; above = bonus; below = penalty. A terrain with no modifier comes in as 1.0. In the total it becomes an average (not a sum) — that way you get a "beacon/thermometer" of how well that unit type does in each type of terrain.


2.3 Effective Score
It joins the two halves above into a single number — "for THIS unit, in this terrain, which width delivers the most real power?":
Score = Suitability × (1 − penalty/100) × 100
100 = neutral terrain + perfect fit. Above = the unit shines there; below = it's losing power (bad terrain, bad width, or both). It's a decision index: great for comparing and ranking, but the number is not "% of damage" — it fuses two different mechanics (terrain power × frontage efficiency).

This vision became HUGE, but very rich
I filtered to show the most used divisions, I can add the others in the future! And I put it to show only the Attack Index of the units, but I can filter and show it by Defense and Movement Index too!

Infantry, Motorized and Mechanized


Armored



Cavalry


Special Forces



2.4 Divisions that fit
A whole number, 100% exact: how many divisions of that width enter the battle (per terrain and direction). It's not "good or bad", it's just density — useful for deciding width from another angle (more divisions on the front vs. a perfect fit). "I think Leonidas was pretty good at calculating this."


2.5 Terrain logistics
Three terrain numbers almost nobody looks at, from a player's view:
  • Attrition — passive wear on the troops just from being/moving in that terrain (losing equipment without combat).
  • Supply flow penalty — how much the terrain chokes the supply passing through it (negative = it helps, as with urban).
  • Truck attrition — wear specific to the supply trucks; bad terrain burns your trucks (marsh/jungle are brutal).
Summary: attrition wears down the troops, truck attrition wears down the trucks that supply them, and supply penalty is how good the supply delivery/flow is in that terrain.



2.6 Logistics Index (normalized)
Adding the three straight up would be unfair: truck attrition (reaching 4.0) would crush attrition (0.35). The statistical solution is to normalize by the mean — divide each indicator by its own average across the terrains, which brings them all to the same order of magnitude (they become "how many times the average", dimensionless):
Index = Attr/avg(Attr) + Supply/avg(Supply) + Truck/avg(Truck)
  • The higher, the worse — more logistical pain. Marsh and jungle at the top; plains at the bottom.
  • Urban goes negative (supply is a bonus there) — negative = terrain that helps logistics.

END

I'm Brazilian and I reworked this guide by putting it in English. So I might have translated something wrong.

And I only have around 117 hours played in HOI IV. It's not my intention to say what's right or wrong — it was never about that. I just got intrigued by how much division-building gets discussed in the community: "Which division is best?", "What's the 2026 META?"

Anyway, I had a lot of fun using my passion for Data Science — the same one I've used to survive in the world since 2020 — working on this game I'm so addicted to. I hope something good came out of this "guide": something you used to do without understanding why and now get, a question answered, or data and feelings carried into a more abstract world.

If a discussion comes up that makes sense, I'd love to bring more views and/or more data that hasn't been looked at/extracted from the game yet.

(I'll try to keep the numbers updated if anything changes in a future update!)

This guide was created by its original author on the Steam Community. Are you the author and want it removed? Request removal.