Hands-On Usage
has_doctrine is commonly used to activate different rewards, events, or decisions based on the nation's currently selected combat doctrine—for example, unlocking exclusive advisors for players who choose the "Mobile Warfare" doctrine, or providing differentiated tech bonuses for different doctrine paths. Combined with focus tree or event scripts, it enables the implementation of doctrine-aware dynamic reward systems.
# In a focus's available block, only available when the nation has selected Mobile Warfare grand doctrine
focus = {
id = ger_mechanized_push
...
available = {
has_doctrine = mobile_warfare
}
}
# In an event option, differentiate rewards by subdoctrine
option = {
name = myevent.1.a
trigger = {
has_doctrine = mobile_infantry # Mobile Warfare - Infantry subdoctrine
}
add_manpower = 5000
}
Synergy
[has_completed_focus](/wiki/trigger/has_completed_focus): First check whether a certain focus is completed, then combine with has_doctrine for dual restriction, ensuring the player has both completed the corresponding focus and selected the matching doctrine before triggering content.
[has_any_grand_doctrine](/wiki/trigger/has_any_grand_doctrine): Serves as a lenient preliminary check before has_doctrine, first confirming the nation has unlocked any grand doctrine, then use has_doctrine to refine judgment on specific paths.
[has_completed_subdoctrine](/wiki/trigger/has_completed_subdoctrine): The two are often used in parallel; has_doctrine checks the currently active state, while has_completed_subdoctrine checks whether research is completed. The combination can distinguish between "currently in use" and "researched but not active" situations.
[add_doctrine_cost_reduction](/wiki/effect/add_doctrine_cost_reduction): After the has_doctrine condition is satisfied, grant doctrine research discounts, forming a positive feedback design of "selecting a certain path makes subsequent research on that path cheaper."
Common Pitfalls
- Confusion between active state and research state:
has_doctrine checks the currently active doctrine (the grand/subdoctrine the player has selected), not "whether it has been researched." If a player researches a certain subdoctrine but later switches to another line, this trigger will return false. Beginners often make logic errors here; it should be distinguished from has_completed_subdoctrine.
- Scope written in the wrong location: This trigger is only valid within
COUNTRY scope. If mistakenly written within STATE or CHARACTER scopes, it will cause script errors or silent failures. Always confirm that the outer scope is a country tag or ROOT/FROM pointing to a country.