Hands-On Usage
faction_goal_fulfillment is commonly used in faction system mods to check whether the completion progress of a faction goal has reached a threshold, thereby unlocking rewards, triggering events, or opening new decisions. For example, in a cooperative victory condition mod, when faction goal completion exceeds a certain threshold, it allows declarations of war or triggers special focuses:
available = {
faction_goal_fulfillment = {
goal = conquer_europe
value > 0.75
}
}
Synergy
[has_completed_faction_goal](/wiki/trigger/has_completed_faction_goal): Often used in parallel with this trigger. First use has_completed_faction_goal to check if the goal is fully completed, then use this trigger to detect intermediate progress, forming a multi-tier conditional gate.
[add_faction_goal](/wiki/effect/add_faction_goal): After dynamically adding faction goals in an effect block, subsequently track their progress in the corresponding trigger block using this trigger, forming a "create → detect" feedback loop.
[faction_manifest_fulfillment](/wiki/trigger/faction_manifest_fulfillment): Semantically similar to this trigger and commonly appears together in the same limit block, respectively checking the completion of faction goals and faction manifestos to ensure more comprehensive condition evaluation.
[add_faction_goal_slot](/wiki/effect/add_faction_goal_slot): After expanding faction goal slots, use this trigger in conjunction to monitor progress on new slot goals and ensure script logic integrity.
Common Pitfalls
- Forgetting that scope must be a country that owns a faction: If the current country is not in any faction, or the specified
goal does not belong to the faction the country is in, the trigger will silently return false without error, easily leading to unmet conditions that are difficult to debug.
- Incorrect or missing
value comparison operator: This trigger's value supports > and < comparisons. Beginners often mistakenly write value = X (using assignment syntax with equals), which doesn't cause a script error but completely breaks the logic. Always ensure you use > or <.