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

Interaction · Diarch

… Retract Vassal

No costAccepted automatically in some cases; otherwise the AI weighs it

Take a Vassal from the recipient, despite not being … Liege This will incur Strife with your fellow Vassals!

What you need

You

To send it

  • None of these

    • You: Is at war with the target
  • The character you target: Does not have a Strong Hook on you
  • They … too preoccupied to act as … right now
  • Your Liege is not in an Entrenched Regency
  • If

    • You:
      • is_diarch = yes

    Then

    • Your liege:
      • has_diarchy_active_parameter = unlock_diarch_retract_vassal_interaction
  • None of these

    • You:
      • is_at_war_with = scope:actor.liege

To see it in the menu

  • If played by the AI:
    • has_realm_law_flag = title_revocation_allowed
    • is_diarch = yes
    • Loyalty less than 75
    • primary_title.tier > tier_county
  • One of these

    • Is landed
    • or

      All of these

      • you has administrative government mechanic
      • Is not landed
      • If

        a check the game hides

        Then

        • Your house: Has the house check as house head
      • You have a domicile
    • or

      All of these

      • Your liege:
        • All of these

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

    • or

      All of these

      • Is a ruler
      • Your Government is a Theocratic-type Government
  • Your liege:
    • has_diarchy_parameter = unlock_diarch_retract_vassal_interaction
  • One of these

    • is_designated_diarch = yes
    • or

      All of these

      • is_diarch_of_target = liege
      • exists = liege

The character you target

  • liege ?= scope:actor.liege
  • One of these

    • Is landed
    • or

      All of these

      • they has administrative government mechanic
      • Is not landed
      • If

        a check the game hides

        Then

        • Their house: Has the house check as house head
      • Has a domicile
    • 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

      All of these

      • Is a ruler
      • Government is a Theocratic-type Government
  • scope:recipient.highest_held_title_tier >= tier_duchy

… Retract Vassal is a diarch character interaction in Crusader Kings III. You need: They … too preoccupied to act as … right now and Your Liege is not in an Entrenched Regency. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include Weak Hook used (+40), Refusal is Treason (+25), Vassal holds your Realm Capital (or De Jure Duchy) (+50) and 2 more. Patch 1.20.1.2, from game/common/character_interactions/00_diarch_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for … Retract Vassal in CK3?
You: They … too preoccupied to act as … right now and Your Liege is not in an Entrenched Regency. (patch 1.20.1.2)
How do I get the AI to accept … Retract Vassal?
Accepted automatically in some cases; otherwise the AI weighs it. Its reasons: Weak Hook used +40, … Opinion of …, Refusal is Treason +25, Vassal holds your Realm Capital (or De Jure Duchy) +50, The other character is not a De Jure Vassal +25, Vassal rightfully belongs under you +15, Intimidated by you, Terrified of you, Difference in your Military Strength (max +20) and Infidel splitting the faithful.

Will they accept?

Accepted automatically when:

  • One of these

    • The character you target: Is imprisoned by you
    • or

      They use their Hook on …

Otherwise the AI adds these up and accepts above zero; near zero the answer is partly random (ai_maybe). Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base0
Weak Hook used
when
+40
… Opinion of …varies
Refusal is Treason
when
  • has_realm_law_flag = vassal_refusal_is_treason
+25
Their personality (AI values: greed (scripted), honor (scripted))varies
Vassal holds your Realm Capital (or De Jure Duchy)
when
  • The other character:
    • One of these

      • Any sub realm county:
        • this = scope:actor.primary_title.title_capital_county
      • or

        Any sub realm duchy:
        • this = scope:actor.primary_title.title_capital_county.de_jure_liege
+50
The other character is not a De Jure Vassal
when
  • None of these

    • The character you target › Any held title:
      • is_de_jure_liege_or_above_target = scope:secondary_recipient.primary_title
+25
Vassal rightfully belongs under you
when
  • Any held title:
+15
Intimidated by you
when
  • The character you target:
    • has_dread_level_towards = { target = scope:actor level = 1 }
intimidated_halved_reason_value
Terrified of you
when
  • The character you target:
    • has_dread_level_towards = { target = scope:actor level = 2 }
cowed_halved_reason_value
Difference in your Military Strength (max +20)varies
Infidel splitting the faithful
when
  • Your faith is the other character’s
  • None of these

    • Your faith is the same as that of recipient
    • Your rite: Has the Pluralist Doctrine
varies
Acceptance (ai_accept) (153 lines of game script)
base = 0
modifier = {
	add = 40
	desc = SCHEME_WEAK_HOOK_USED
	scope:hook = yes
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = 1.0
	desc = AI_OPINION_REASON
}
modifier = {
	add = 25
	desc = AI_REFUSAL_IS_TREASON
	scope:actor = {
		has_realm_law_flag = vassal_refusal_is_treason
	}
}
ai_value_modifier = {
	who = scope:recipient
	ai_greed = {
		if = {
			limit = {
				scope:recipient = {
					NOT = {
						ai_greed = 0
					}
				}
			}
			value = -0.25
		}
	}
	ai_honor = {
		if = {
			limit = {
				scope:recipient = {
					ai_honor > 0
				}
				scope:actor = {
					has_realm_law_flag = vassal_refusal_is_treason
				}
			}
			value = 0.75
		}
	}
}
modifier = {
	add = 50
	desc = AI_VASSAL_HOLDS_REALM_CAPITAL
	exists = scope:actor.primary_title.title_capital_county
	scope:secondary_recipient = {
		OR = {
			any_sub_realm_county = {
				this = scope:actor.primary_title.title_capital_county
			}
			any_sub_realm_duchy = {
				this = scope:actor.primary_title.title_capital_county.de_jure_liege
			}
		}
	}
}
modifier = {
	add = 25
	desc = AI_REFUSAL_IS_NOT_DE_JURE_LIEGE
	NOT = {
		scope:recipient = {
			any_held_title = {
				is_de_jure_liege_or_above_target = scope:secondary_recipient.primary_title
			}
		}
	}
}
modifier = {
	add = 15
	desc = AI_REFUSAL_IS_DE_JURE_LIEGE
	scope:actor = {
		any_held_title = {
			this = scope:secondary_recipient.primary_title.de_jure_liege
		}
	}
}
modifier = {
	add = intimidated_halved_reason_value
	desc = INTIMIDATED_REASON
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 1
		}
	}
}
modifier = {
	add = cowed_halved_reason_value
	desc = COWED_REASON
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 2
		}
	}
}
modifier = {
	add = {
		value = 1
		subtract = {
			value = scope:recipient.max_military_strength
			divide = {
				value = scope:actor.max_military_strength
				min = 1
			}
		}
		multiply = 100
	}
	desc = offer_vassalization_interaction_aibehavior_power_tt
}
modifier = {
	add = {
		value = -25
		if = {
			limit = {
				scope:actor.faith = {
					faith_hostility_level = {
						target = scope:recipient.faith
						value >= faith_hostile_level
					}
				}
			}
			add = -10
		}
		if = {
			limit = {
				scope:actor.faith = {
					faith_hostility_level = {
						target = scope:recipient.faith
						value >= faith_evil_level
					}
				}
			}
			add = -25
		}
	}
	desc = AI_REFUSAL_SPLITTING_SAME_FAITH_VASSALS
	scope:actor.faith = scope:secondary_recipient.faith
	scope:actor = {
		NOR = {
			faith = scope:recipient.faith
			rite = {
				rite_has_doctrine = doctrine_pluralism_pluralistic
			}
		}
	}
}

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

What happens

If they accept

  • You:
    • If

      a check the game hides

      Then

      • If

        • has_revoke_title_reason = scope:recipient

        Then

        • consume_revoke_title_reason = scope:recipient

        Otherwise

        • change_strife_opinion = major_strife_gain

      Else if

      • None of these

        • exists = scope:administrative_revocation
        • All of these

          • they has administrative government mechanic
          • The character you target: they has administrative government mechanic
        • has_revoke_title_reason = scope:recipient
        • One of these

          • All of these

            • Their rite: The rite has Can revoke landed titles from Evil infidels without incurring Tyranny
            • Their faith:
              • faith_hostility_level = { target = scope:recipient.faith value = faith_evil_level }
          • or

            All of these

            • Their rite: The rite has Can revoke landed titles from Hostile and Evil infidels without incurring Tyranny
            • Their faith:
              • faith_hostility_level = { target = scope:recipient.faith value >= faith_hostile_level }

      Then

      Else if

      • has_revoke_title_reason = scope:recipient

      Then

      Else if

      • Their rite:
        • One of these

          • The rite has Can revoke landed titles from Evil infidels without incurring Tyranny
          • or

            The rite has Can revoke landed titles from Hostile and Evil infidels without incurring Tyranny
      • Their faith:
        • faith_hostility_level = { target = scope:recipient.faith value >= faith_hostile_level }

      Then

      • If

        • Their rite: The rite has Can revoke landed titles from Hostile and Evil infidels without incurring Tyranny
        • Their faith:
          • faith_hostility_level = { target = scope:recipient.faith value = faith_hostile_level }

        Then

        • Because you consider ⟨faith⟩ to be Hostile, you can revoke … vassals without being viewed as a Tyrant

        Otherwise

        • Because you consider ⟨faith⟩ to be Evil, you can revoke … vassals without being viewed as a Tyrant
      • Every ⟨faith⟩ vassal:
        • Where: Their faith is the same as that of recipient
        • Opinion: Angry (-5)
    • If

      • None of these

        • exists = scope:administrative_revocation
        • All of these

          • they has administrative government mechanic
          • The character you target: they has administrative government mechanic
        • has_revoke_title_reason = scope:recipient
        • One of these

          • All of these

            • Their rite: The rite has Can revoke landed titles from Evil infidels without incurring Tyranny
            • Their faith:
              • faith_hostility_level = { target = scope:recipient.faith value = faith_evil_level }
          • or

            All of these

            • Their rite: The rite has Can revoke landed titles from Hostile and Evil infidels without incurring Tyranny
            • Their faith:
              • faith_hostility_level = { target = scope:recipient.faith value >= faith_hostile_level }

      Then

      • Stress and fulfillment impact: by trait: Generous +40, Just +40

      Otherwise

      • Stress and fulfillment impact: by trait: Generous +40, Forgiving +20
    • consume_revoke_title_reason = scope:recipient
  • The other character:
    • change_liege = { liege = scope:puppet_or_actor change = scope:change }
  • The character you target: Opinion: Retracted My Vassal
  • If

    • Never
    • You: Has a Hook on the target

    Then

    • You: Use a Hook on the target
  • Event char_interaction.0272

When it is accepted automatically

If they refuse

  • Event char_interaction.0273
  • 1 of 2 things will happen:
    • 50% – If … … down › You:
      • If played by a person: Crime — You are allowed to rightfully imprison …, if the opportunity presents itself
      • Otherwise: Opinion: Refused Borrowed Power Demand
      • Their liege:
        • If played by a person: Crime — You are allowed to rightfully imprison …
        • Otherwise: Opinion: Refused Borrowed Power Demand
    • 50% – If … … the claim:
      • start_war = { casus_belli = diarch_vassalisation_cb target = scope:recipient target_title = scope:secondary_recipient.primary_title }
  • The character you target: Opinion: Retracted My Vassal

Options when sending

  • Use a Hook

Events it fires: char_interaction.0272, char_interaction.0273, char_interaction.0271

• 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) (27 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	has_realm_law_flag = title_revocation_allowed
	is_diarch = yes
	diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	primary_title.tier > tier_county
}
is_landed_or_landless_administrative_or_theocratic = yes
liege ?= {
	has_diarchy_parameter = unlock_diarch_retract_vassal_interaction
}
OR = {
	is_designated_diarch = yes
	AND = {
		is_diarch_of_target = liege
		exists = liege
	}
}
is_shown = scope:actor != scope:recipient
scope:recipient = {
	liege ?= scope:actor.liege
	this != scope:actor.liege
	is_landed_or_landless_administrative_or_theocratic = yes
	scope:recipient.highest_held_title_tier >= tier_duchy
}

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

Can be sent when (is_valid…) (69 lines of game script)
vassal_retraction_standard_valid_showing_failures_only_trigger = yes
diarch_cannot_be_disabled_trigger = {
	DIARCH = scope:actor
}
scope:actor = {
	custom_description = {
		text = you_must_have_a_de_jure_vassal_to_retract
		object = scope:recipient
		any_held_title = {
			title_tier >= duchy
			any_direct_de_jure_vassal_title = {
				exists = holder
				holder.liege = scope:recipient
			}
		}
	}
}
scope:actor.liege = {
	trigger_if = {
		limit = {
			government_has_flag = government_is_tribal
		}
		custom_description = {
			text = liege_has_law_allowing_vassal_retraction_tribal
			has_realm_law_flag = vassal_retraction_allowed
		}
	}
	trigger_if = {
		limit = {
			NOT = {
				government_has_flag = government_is_tribal
			}
		}
		custom_description = {
			text = liege_has_law_allowing_vassal_retraction_crown
			has_realm_law_flag = vassal_retraction_allowed
		}
	}
}
custom_tooltip = {
	text = diarch_interactions.tt.you_must_be_in_an_entrenched_regency_to_access
	scope:actor = {
		is_diarch = yes
	}
}
trigger_if = {
	limit = {
		scope:actor = {
			is_diarch = yes
		}
	}
	scope:actor.liege = {
		has_diarchy_active_parameter = unlock_diarch_retract_vassal_interaction
	}
}
NOT = {
	scope:actor = {
		is_at_war_with = scope:actor.liege
	}
}
scope:actor != scope:intermediary
scope:actor = {
	custom_description = {
		text = character_interactions_hostile_actions_disabled_delay
		NOT = {
			has_character_flag = flag_hostile_actions_disabled_delay
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (80 lines of game script)
on_send = scope:actor = {
	add_character_flag = {
		flag = flag_hostile_actions_disabled_delay
		days = 10
	}
}
on_accept = save_scope_value_as = {
	name = use_strife_not_tyranny
	value = yes
}
retract_vassal_interaction_effect = yes
scope:actor = {
	trigger_event = char_interaction.0272
	clear_hostile_actions_lock_flag_effect = yes
}
debug_log = debug_log.diarch_retract_vassal.accepted
scope:actor = {
	diarch_interaction_set_or_update_global_variable_effect = {
		VARIABLE = di_track_retract_accept
	}
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_accept_actor_list
	}
}
scope:recipient = {
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_accept_recipient_list
	}
}
scope:intermediary = {
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_accept_intermediary_list
	}
}
on_decline = scope:actor = {
	trigger_event = char_interaction.0273
	show_as_tooltip = {
		random_list = {
			50 = {
				show_chance = no
				desc = char_interaction.0273.result.criminal
				diarch_declare_recipient_criminal_effect = yes
			}
			50 = {
				show_chance = no
				desc = char_interaction.0273.result.war
				diarch_declare_vassalisation_war_effect = yes
			}
		}
	}
	clear_hostile_actions_lock_flag_effect = yes
}
scope:recipient = {
	add_opinion = {
		target = scope:actor
		modifier = retracted_vassal
	}
}
debug_log = debug_log.diarch_retract_vassal.rejected
scope:actor = {
	diarch_interaction_set_or_update_global_variable_effect = {
		VARIABLE = di_track_retract_decline
	}
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_decline_actor_list
	}
}
scope:recipient = {
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_decline_recipient_list
	}
}
scope:intermediary = {
	diarch_interaction_add_to_global_list_effect = {
		VARIABLE_LIST = di_track_retract_decline_intermediary_list
	}
}
on_auto_accept = scope:recipient = {
	trigger_event = char_interaction.0271
}

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

Category
Diarch
Cooldown
1 year
Again on the same character
after 3 years
In the menu
under More…
ID
diarch_retract_vassal_interaction

Source: game/common/character_interactions/00_diarch_interactions.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. “…” marks words the game fills in at play time (a name, a title).

Spotted a mistake on this page?