CK3 DatabaseCrusader Kings III · 1.20.1.2 “Crozier” · unofficial
Silk & Silverout Tue, Nov 17What's free, what needs the DLC, price →

Interaction · Diplomatic actions

Declare War

No costAccepted automatically

Use a Casus Belli to declare War on the recipient

What you need

You

To send it

  • If your Government is a Theocratic-type Government: Cannot declare Claim, De Jure, conquest, invasion, Vassalization or subjugation Wars. Only Holy Wars, independence wars, and wars started by events are available.
  • Otherwise:
    • has_any_display_cb_on = scope:recipient
  • You have sworn to not declare any wars!
  • Is not incapable
  • If

    • NOT = { has_cb_on = { target = scope:defender_check casus_belli = pam_humiliation_cb } }

    Then

    • can_attack_in_hierarchy = scope:defender_check
  • If your government does not have the can start war with raised troops flag: Not: Armies are raised
  • NOT = { is_allied_in_war = scope:defender_check }
  • None of these

    • You are currently busy …
    • You are already planning another Activity
    • You are currently busy in a Mandala succession
  • If

    Then

    • Is not allied to the defender check
  • If

    Then

    • NOT = { has_truce = scope:defender_check }
  • The defender check:
    • … is a Herder and cannot be attacked. To get their lands you can either: Use the Demand Pastureland Interaction · Attack their Suzerain to transfer them as a Tributary
    • Is not a tributary of the attacker check or of the attacker check’s suzerains
    • Does not have a Strong Hook on the attacker check
    • If imprisoned: You cannot declare war on your own Prisoner
  • If

    • liege != this

    Then

    • If you has administrative government mechanic:
      • If

        • top_liege = scope:defender_check.top_liege

        Then

        • If

          • The defender check: they has administrative government mechanic
          • top_liege != scope:defender_check

          Then

        Otherwise

        • If

          • Your top liege:
            • has_realm_law_flag = admin_vassal_wars_banned

          Then

          Otherwise

          • If

            • Your top liege:
              • has_realm_law_flag = admin_vassal_wars_restricted

            Then

          • If

            • Your top liege:
              • has_realm_law_flag = admin_vassal_wars_permission_only

            Then

            • You must ask your Liege for permission to declare War
    • Otherwise:
      • If

        • Your liege:
          • has_realm_law_flag = vassal_all_wars_banned_permanent
        • None of these

          • top_participant_group:dynastic_cycle:
            • has_participant_group_parameter = dynastic_cycle_vassal_internal_wars_allowed

        Then

    • If

      • Is an Independent Ruler
      • liege != scope:recipient
      • Not all of these

        • you has administrative government mechanic
        • Your liege: they has administrative government mechanic
      • NOT = { vassal_contract_has_flag = vassal_contract_war_override }
      • One of these

        • All of these

          • liege = scope:recipient.liege
          • Your liege:
            • has_realm_law_flag = vassal_internal_wars_banned
        • or

          Your liege:
          • has_realm_law_flag = vassal_all_wars_banned

      Then

      • has_usable_hook = liege
  • If

    • The defender check:
      • One of these

        • has_subject_contract_group = tributary_celestial
        • or

          has_subject_contract_group = tributary_hegemonic
    • Is not an Independent Ruler

    Then

    • None of these

      • The defender check:
        • is_tributary_of = scope:attacker_check.top_liege
  • The attacker check › If has a Adventurer Government: Your Camp is located in … Realm
  • If

    Then

    • None of these

      • The defender check:
        • is_member_of_confederation = scope:attacker_check.confederation
  • Is not at war with the target
  • Also needed: not imprisoned

To see it in the menu

  • The target is not you
  • The target is not you
  • Is not at war with the target

The character you target

  • Is a ruler
  • One of these

    • Cannot play landless rulers without having an Estate
    • or

      If

      • One of these

        • Is landed
        • or

          Government is a Theocratic-type Government

      Then

    • or

      All of these

      • Their liege:
        • All of these

          • Holds China
          • Government is Celestial
          • Their government has the government uses ministry budget flag
      • One of these

    • or

      Has “laamp transition” (a variable the game's script sets)

Declare War is a diplomatic character interaction in Crusader Kings III. You need: You have sworn to not declare any wars!, Is not incapable, Is not imprisoned and 1 more. Accepted automatically. Patch 1.20.1.2, from game/common/character_interactions/00_war.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Declare War in CK3?
You: You have sworn to not declare any wars!, Is not incapable, Is not imprisoned and Is not at war with the target. (patch 1.20.1.2)
Will the AI accept Declare War?
Yes: it is accepted automatically.

Will they accept?

The other character has no choice: the game accepts it automatically.

What happens

Effects

  • If

    a check the game hides

    Then

  • If

    Then

    • use_hook = liege
  • If

    • Has the target as lover
    • Does not have the target as rival
    • Any character war:
      • casus_belli = { … }

    Then

    • The character you target: Event lover.0103 (after 14–30 days)
  • The character you target:
    • If

      • Any character war:
        • primary_attacker = { … }

      Then

      • Every character war:
        • Where:
          • primary_attacker = { … }
        • end_war = invalidated
        • primary_attacker = { trigger_event = war_event.1001 }
  • The character you target:
    • If

      • Any vassal › Any character war:
        • casus_belli = { … }

      Then

      • Every vassal:
        • Where › Any character war:
          • casus_belli = { … }
        • Declared war on …

Options when sending

  • Use a Hook

Events it fires: vassal.2610, lover.0103

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

Who can use it and sees it (is_available, is_shown) (10 lines of game script)
is_shown = scope:recipient != scope:puppet_or_actor
scope:recipient != scope:actor
scope:recipient = {
	is_playable_character = yes
}
scope:puppet_or_actor ?= {
	NOT = {
		is_at_war_with = scope:recipient
	}
}

As written in game/common/character_interactions/00_war.txt.

Can be sent when (is_valid…) (17 lines of game script)
scope:puppet_or_actor = {
	trigger_if = {
		limit = {
			government_has_flag = government_is_theocracy
		}
		custom_tooltip = {
			text = theocratic_government_war_restriction
			has_any_display_cb_on = scope:recipient
		}
	}
	trigger_else = {
		has_any_display_cb_on = scope:recipient
	}
	allows_declaring_war_against_target_trigger = {
		TARGET = scope:recipient
	}
}

As written in game/common/character_interactions/00_war.txt.

Effects (on_send, on_accept, on_decline) (174 lines of game script)
on_accept = scope:puppet_or_actor = {
	hidden_effect = {
		send_interface_toast = {
			type = event_toast_effect_neutral
			title = declare_war_interaction_notification
			left_icon = scope:puppet_or_actor
			right_icon = scope:recipient
			custom_tooltip = declare_war_interaction_notification_tooltip
			show_as_tooltip = {
				if = {
					limit = {
						always = scope:hook
					}
					use_hook = liege
				}
			}
		}
	}
	if = {
		limit = {
			exists = var:promised_war
			var:promised_war = {
				is_alive = yes
				this != scope:recipient
			}
		}
		trigger_event = {
			id = vassal.2610
			days = { 7 10 }
		}
	}
	if = {
		limit = {
			always = scope:hook
		}
		use_hook = liege
	}
	if = {
		limit = {
			has_relation_lover = scope:recipient
			NOT = {
				has_relation_rival = scope:recipient
			}
			any_character_war = {
				casus_belli = {
					primary_attacker = scope:puppet_or_actor
					primary_defender = scope:recipient
					any_target_title = { }
				}
			}
		}
		scope:recipient = {
			trigger_event = {
				id = lover.0103
				days = { 14 30 }
			}
		}
	}
	scope:recipient = {
		if = {
			limit = {
				any_character_war = {
					primary_attacker = {
						is_vassal_or_below_of = scope:puppet_or_actor
						trigger_if = {
							limit = {
								this = {
									is_ai = no
								}
							}
							scope:actor = {
								is_ai = no
							}
						}
					}
				}
			}
			every_character_war = {
				limit = {
					primary_attacker = {
						is_vassal_or_below_of = scope:puppet_or_actor
						trigger_if = {
							limit = {
								this = {
									is_ai = no
								}
							}
							scope:actor = {
								is_ai = no
							}
						}
					}
				}
				show_as_tooltip = {
					end_war = invalidated
				}
				primary_attacker = {
					trigger_event = war_event.1001
				}
			}
		}
	}
	scope:recipient = {
		if = {
			limit = {
				any_vassal = {
					save_temporary_scope_as = attacked_vassal
					any_character_war = {
						casus_belli = {
							primary_attacker = scope:puppet_or_actor
							primary_defender = scope:recipient
							any_target_title = {
								holder = {
									OR = {
										this = scope:attacked_vassal
										is_vassal_or_below_of = scope:attacked_vassal
									}
								}
							}
						}
					}
				}
			}
			every_vassal = {
				save_temporary_scope_as = attacked_vassal
				limit = {
					any_character_war = {
						casus_belli = {
							primary_attacker = scope:puppet_or_actor
							primary_defender = scope:recipient
							any_target_title = {
								holder = {
									OR = {
										this = scope:attacked_vassal
										is_vassal_or_below_of = scope:attacked_vassal
									}
								}
							}
						}
					}
				}
				send_interface_toast = {
					type = msg_war_declared_on_liege
					title = declare_war_interaction_notification
					left_icon = scope:puppet_or_actor
					right_icon = scope:recipient
					custom_tooltip = declare_war_interaction_notification_tooltip
				}
			}
		}
	}
	if = {
		limit = {
			has_variable = admin_permission_to_declare_war
		}
		remove_variable = admin_permission_to_declare_war
	}
}
hidden_effect = {
	if = {
		limit = {
			scope:is_puppet_action ?= yes
		}
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_neutral
				title = declare_war_interaction_notification
				left_icon = scope:puppet_or_actor
				right_icon = scope:recipient
				custom_tooltip = declare_war_interaction_notification_tooltip
			}
		}
	}
}

As written in game/common/character_interactions/00_war.txt.

Category
Diplomatic actions
In the menu
main list
ID
declare_war_interaction

Source: game/common/character_interactions/00_war.txt and the English localisation, Crusader Kings III 1.20.1.2. “You” is the character who sends it (scope:actor, or a puppet acting for you); “the character you target” is the recipient.

Spotted a mistake on this page?