Hands-On Usage
puppet is commonly used in peace events, post-war settlements, or upon focus tree completion to establish puppet relationships. For example, after a player completes a diplomatic focus, you can make the target nation a puppet. When dealing with civil war scenarios, you can use end_civil_wars = no to preserve the civil war state, preventing puppetization from forcibly ending an ongoing civil war.
# Britain converts Egypt to a puppet via focus, but preserves the civil war
focus = {
id = ENG_puppet_egypt
...
completion_reward = {
ENG = {
puppet = {
target = EGY
end_wars = yes
end_civil_wars = no
}
}
}
}
Synergy
[diplomatic_relation](/wiki/effect/diplomatic_relation) — After establishing a puppet relationship, you can further use this command to set up military access, guarantees, and other diplomatic statuses to complete the suzerain-puppet diplomatic framework.
[add_autonomy_score](/wiki/effect/add_autonomy_score) / [add_autonomy_ratio](/wiki/effect/add_autonomy_ratio) — Immediately adjust autonomy scores after puppetization to precisely control the puppet's initial autonomy level and avoid it starting in a marginal state.
[end_puppet](/wiki/effect/end_puppet) — Forms the opposite operation to puppet and is often used together in the same event chain to handle diplomatic reorganization logic like "remove old puppet relationship then rebuild."
[has_autonomy_state](/wiki/trigger/has_autonomy_state) — Trigger a check before executing puppet to confirm the target nation is not already in a certain autonomy state, preventing duplicate puppetization from causing script logic confusion.
Common Pitfalls
- Wrong host scope:
puppet must be called within the suzerain's scope, not written as puppet = SELF in the puppet nation's scope—that would cause the puppet nation to puppet itself, which is logically invalid and prone to errors.
- Forgetting the default behavior of
end_wars: The default end_wars = yes automatically cancels wars related to puppetization. If your scenario needs to preserve ongoing wars for the suzerain (for example, continuing joint operations after puppetization), you must explicitly write end_wars = no. Otherwise, the war will be silently ended without any error messages.