Hands-On Usage
every_army_leader is commonly used to bulk-modify the attributes of all army leaders in a country when a specific event or decision fires — for example, adding a particular trait to every general when a war breaks out, or stripping certain traits after an ideological shift. It is also frequently used in bonus events, such as raising all generals' skill levels during a national holiday event.
# After a decision passes, add a trait and increase skill for all army leaders whose attack skill meets the threshold
GER = {
every_army_leader = {
limit = {
attack_skill_level > 2
NOT = { has_trait = brilliant_strategist }
}
add_trait = { trait = skilled_staffer }
add_skill_level = 1
}
}
Synergy
- has_trait — Filter leaders who already possess a specific trait inside a
limit block, preventing duplicate additions that would cause errors or logical inconsistencies.
- add_unit_leader_trait — Pair with
every_army_leader to bulk-add unit leader traits, ideal for granting all generals a wartime trait in a single pass.
- attack_skill_level — Use inside
limit to select leaders by attack skill value, enabling tiered effects based on capability.
- add_skill_level — Directly increases a leader's skill level; one of the most commonly used sub-effects when rewarding generals in bulk.
Common Pitfalls
- Wrong scope:
every_army_leader can only be called within a COUNTRY scope. Placing it inside a STATE or CHARACTER scope will cause a script error or silent failure. Make sure the enclosing scope is a country scope (e.g. GER = { ... } or ROOT = { ... } where ROOT is a country).
- Missing
limit causes unintended mass changes: Without a limit, the effect applies to every army leader in the country — including reserve generals who have not yet been deployed — which can produce unexpected global attribute changes when the roster is large. It is good practice to always write a limit block; even always = yes makes the intent explicit.