trigger · has_terrain
Definition
- Supported scope:
COUNTRY - Supported target:
none
Description
Checks if a country has any province of the specified terrain type.
Example: has_terrain = mountain
has_terrainCOUNTRYnoneChecks if a country has any province of the specified terrain type.
Example: has_terrain = mountain
Hands-on notes are AI-generated and checked against the vanilla command vocabulary — treat them as a starting point, not authoritative reference. The definition above is the game's own documentation.
has_terrain is commonly used in geography-themed mods to unlock exclusive decisions, national focuses, or advisors based on whether a country owns provinces with specific terrain types—for example, only "mountainous nations" can research particular mountain warfare doctrines, or desert nations can gain certain logistics bonuses. It can also be used in available blocks to dynamically restrict certain content from being visible to countries lacking that terrain.
# Only countries owning mountain provinces can activate this decision
available = {
has_terrain = mountain
}
[any_owned_state](/wiki/trigger/any_owned_state) — If you need to check more granular terrain conditions (such as a state satisfying both terrain and resource requirements simultaneously), you can use has_terrain at different scope levels to complement each other.[controls_state](/wiki/trigger/controls_state) — Using them together can distinguish between "owns" and "controls," preventing players from accidentally triggering faction-exclusive content by occupying enemy mountain provinces.[add_ideas](/wiki/effect/add_ideas) — Once the has_terrain condition is met, it is commonly used to grant national spirits matching that terrain's style (such as mountain combat bonuses).[add_tech_bonus](/wiki/effect/add_tech_bonus) — Pair terrain checks with specific technology discounts; for example, countries with desert terrain gain accelerated infantry equipment research.has_terrain can only be used under COUNTRY scope. Beginners sometimes mistakenly place it within STATE scope (such as inside any_owned_state sub-blocks), causing script errors or silent failures. To check terrain at state level, you should use state-level terrain-related syntax instead.