Hands-On Usage
has_completed_subdoctrine is commonly used in national focuses, decisions, or events to detect whether the player or AI has ever researched a specific subdoctrine branch, thereby unlocking subsequent content or granting reward bonuses. Even if the player later switches doctrine paths, this trigger will still return true, making it ideal for tracking "historical progress" rather than "current state."
# If the mobile infantry subdoctrine was ever completed, allow activation of a special decision
available = {
has_completed_subdoctrine = mobile_infantry
}
Synergy
[has_completed_focus](/wiki/trigger/has_completed_focus): Similar logic to this trigger; commonly used together in available blocks to require both completion of a national focus and progression through a specific doctrine path before unlocking advanced content.
[has_doctrine](/wiki/trigger/has_doctrine): has_doctrine checks the currently active doctrine. Combined with has_completed_subdoctrine, it allows you to distinguish between "researched in the past but switched away" and "currently still in use," enabling more precise logic.
[add_doctrine_cost_reduction](/wiki/effect/add_doctrine_cost_reduction): During focus/event reward phases, after confirming the player has progressed through a certain doctrine branch, grant subsequent doctrine cost reductions, creating a "deeper research = lower costs" design pattern.
[add_tech_bonus](/wiki/effect/add_tech_bonus): Similarly serves as a research reward; based on completed subdoctrines, grant specific technology bonuses to strengthen the synergy between doctrine paths and the tech tree narrative.
Common Pitfalls
- Mistaking it for checking the "current" doctrine: This trigger only records "whether it was ever completed," regardless of which path the player currently uses. If you need to determine the currently active doctrine, use
[has_doctrine](/wiki/trigger/has_doctrine) instead; otherwise you'll encounter unexpected situations where "the condition remains satisfied even though the player has switched away."
- Subdoctrine name misspellings causing permanent false returns: The subdoctrine token name must exactly match the corresponding technology/doctrine definition under
\common\technologies\, and is case-sensitive. It's recommended to copy-paste directly from the source file to avoid silent failures from typos with no error messages.