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

Recall Hostage

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

Ask the recipient's to return one of your Hostages

What you need

You

To send it

  • None of these

    • The character you target: Is at war with you
    • You: Your Government is a Theocratic-type Government
    • The character you target: Government is a Theocratic-type Government
  • None of these

    • You: Is at war with the target

To see it in the menu

  • Is played by a person
  • The target is not you
  • One of these

    • You › Any home court hostage:
      • warden ?= scope:recipient
    • or

      scope:recipient.home_court ?= scope:actor

Recall Hostage is a diplomatic character interaction in Crusader Kings III. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include … Equitable Tradition (+25), … Esteemed Hospitality Tradition (+25), … Loyal Subjects Tradition (+25) and 32 more. Patch 1.20.1.2, from game/common/character_interactions/05_bp2_interactions.txt.

for a guide, post or blog
Quick answers (1)
How do I get the AI to accept Recall Hostage?
Accepted automatically in some cases; otherwise the AI weighs it. Its reasons: The recipient's Boldness, The recipient's Compassion, The recipient's Greed, The recipient's Honor, The recipient's Rationality, The recipient's Zeal, … Equitable Tradition +25, … Esteemed Hospitality Tradition +25, … Loyal Subjects Tradition +25, … Opinion of …, … Opinion of …, They is your Friend +15, They is your Best Friend +30, They is your Lover +15, They is your Soulmate +30, They is your Rival -25, They is your Nemesis -50, Intimidated by you, Terrified of you, The other character's value as a Hostage, Hostage is an adult +25, Held Hostage for less than a year -25, Years spent as a Hostage, Difference in Rank, Difference in Rank, Not neighboring Realms +20, Distant realm +20, Has Casus Bellis against you -15, Has Claims on your Titles, Protected by their Liege +50, You are a mere Vassal, Similar Military Strength +10, Relative Military Strength (…: … vs. …: …), Relative Military Strength (…: … vs. …: …), Allies Military Strength (…: … vs. …: …), Twice as strong and valid Casus Belli against the recipient -25, … Cultural Acceptance of … -5, … Cultural Acceptance of … -10, … Cultural Acceptance of … -15, … consider … Evil -15, … consider … Hostile -10, … consider … Astray -5, … Equitable Tradition +25, … Esteemed Hospitality Tradition +25, … Loyal Subjects Tradition +25, Allowed a Hostage to die -25, Allowed my Hostage to die -100, Killed my Hostage -200, You already made a Truce with the recipient +20, Fighting a War -25, Attacked Home Court -50, Weak Hook used +40, Has my Hostage -50 and Crusader War for Imperial Claim -5,000.

Will they accept?

Accepted automatically when:

  • If

    Then

    • They use their Hook on …

    Otherwise

    • Never

Otherwise the AI adds these up and accepts above zero. Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base0
The recipient's Boldness
when
  • scope:recipient.ai_boldness < 0
their ai boldness × -0.25
The recipient's Compassion
when
  • scope:recipient.ai_compassion > 0
their ai compassion × 0.25
The recipient's Greed
when
  • scope:recipient.ai_greed != 0
varies
The recipient's Honor
when
  • scope:recipient.ai_honor != 0
their ai honor × 0.25
The recipient's Rationality
when
  • scope:recipient.ai_rationality != 0
their ai rationality × 0.25
The recipient's Zeal
when
  • scope:recipient.ai_zeal > 0
  • The target’s rite:
    • rite_hostility_level = { target = scope:actor.rite value >= faith_hostile_level }
varies
… Equitable Tradition
when
  • The target’s culture: Their culture has the tradition Equitable
+25
… Esteemed Hospitality Tradition
when
+25
… Loyal Subjects Tradition
when
  • The character you target:
    • Is a vassal of you
    • Their culture: The culture has the tradition Loyal Subjects
+25
… Opinion of …varies
… Opinion of …varies
They is your Friend
when
  • The character you target:
    • Has you as friend
    • Does not have you as best friend
+15
They is your Best Friend
when
  • The character you target: Has you as best friend
+30
They is your Lover
when
  • The character you target:
    • Has you as lover
    • Does not have you as soulmate
+15
They is your Soulmate
when
  • The character you target: Has you as soulmate
+30
They is your Rival
when
  • The character you target:
    • Has you as rival
    • Does not have you as nemesis
-25
They is your Nemesis
when
  • The character you target: Has you as nemesis
-50
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
The other character's value as a Hostageinteraction_recipient_hostage_value
Hostage is an adult
when
  • The other character: Is an Adult
+25
Held Hostage for less than a year
when
  • The other character:
    • hostage_duration = { years < 1 }
-25
Years spent as a Hostage
when
  • The other character:
    • hostage_duration = { years >= 2 }
varies
Difference in Rank
when
  • scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier
varies
Difference in Rank
when
  • scope:recipient.highest_held_title_tier > scope:actor.highest_held_title_tier
varies
Not neighboring Realms
when
  • Your top liege is not the target’s
  • None of these

    • You:
      • character_is_land_realm_neighbor = scope:recipient
    • The character you target:
      • character_is_land_realm_neighbor = scope:actor
+20
Distant realm
when
  • NOT = { character_is_realm_neighbor = scope:recipient }
  • NOT = { top_liege = scope:recipient.top_liege }
  • The character you target:
    • None of these

      • character_is_land_realm_neighbor = scope:actor
      • Their capital province:
        • squared_distance = { target = scope:actor.capital_province value < 200000 }
+20
Has Casus Bellis against you
when
  • The character you target:
    • has_any_cb_on = scope:actor
-15
Has Claims on your Titles
when
  • Any held title: Title tier at least County
  • The character you target:
    • has_claim_on = scope:title_temp
varies
Protected by their Liege
when
  • Is an Independent Ruler
  • NOT = { scope:recipient.liege ?= scope:actor }
  • NOT = { root.liege ?= scope:recipient.liege }
+50
You are a mere Vassal
when
varies
Similar Military Strength
when
  • NOT = { scope:recipient.current_strength_ninety_percent_value > scope:actor.current_military_strength }
  • NOT = { scope:recipient.current_military_strength < scope:actor.current_strength_ninety_percent_value }
+10
Relative Military Strength (…: … vs. …: …)
when
  • scope:recipient.current_strength_ninety_percent_value > scope:actor.current_military_strength
varies
Relative Military Strength (…: … vs. …: …)
when
  • scope:recipient.current_military_strength < scope:actor.current_strength_ninety_percent_value
varies
Allies Military Strength (…: … vs. …: …)
when
  • One of these

    • The character you target › Any ally:
      • exists = this
    • or

      You › Any ally:
      • exists = this
  • One of these

    • scope:recipient.current_strength_with_allies_value >= scope:actor.current_strength_ninety_percent_value
    • or

      root.current_strength_with_allies_value >= scope:recipient.current_strength_ninety_percent_value
varies
Twice as strong and valid Casus Belli against the recipient
when
  • has_any_cb_on = scope:recipient
  • root.current_strength_with_allies_fifty_percent_value > scope:recipient.current_strength_with_allies_value
-25
… Cultural Acceptance of …
when
  • The target’s culture:
    • cultural_acceptance = { target = scope:actor.culture value < 75 }
    • cultural_acceptance = { target = scope:actor.culture value >= 50 }
-5
… Cultural Acceptance of …
when
  • The target’s culture:
    • cultural_acceptance = { target = scope:actor.culture value < 50 }
    • cultural_acceptance = { target = scope:actor.culture value >= 25 }
-10
… Cultural Acceptance of …
when
  • The target’s culture:
    • cultural_acceptance = { target = scope:actor.culture value < 25 }
-15
… consider … Evil
when
  • The target’s rite:
    • rite_hostility_level = { target = scope:actor.rite value = faith_evil_level }
-15
… consider … Hostile
when
  • The target’s rite:
    • rite_hostility_level = { target = scope:actor.rite value = faith_hostile_level }
-10
… consider … Astray
when
  • The target’s rite:
    • rite_hostility_level = { target = scope:actor.rite value = faith_astray_level }
-5
… Equitable Tradition
when
  • The character you target:
    • Their culture: The culture has the tradition Equitable
    • None of these

      • Any home court hostage:
        • warden = scope:actor
  • The other character:
    • hostage_duration = { years >= 2 }
+25
… Esteemed Hospitality Tradition
when
  • The character you target:
    • Their culture: The culture has the tradition Esteemed Hospitality
    • None of these

      • Any home court hostage:
        • warden = scope:actor
  • The other character:
    • hostage_duration = { years >= 2 }
+25
… Loyal Subjects Tradition
when
  • The character you target:
    • Is a vassal of you
    • Their culture: The culture has the tradition Loyal Subjects
  • The other character:
    • hostage_duration = { years >= 2 }
+25
Allowed a Hostage to die
when
  • The character you target:
    • Let my hostage die is not scope:actor
    • NOT = { has_opinion_modifier = { target = scope:actor modifier = killed_hostage_opinion } }
-25
Allowed my Hostage to die
when
  • The character you target:
    • Let my hostage die is scope:actor
    • NOT = { has_opinion_modifier = { target = scope:actor modifier = killed_hostage_opinion } }
-100
Killed my Hostage
when
  • The character you target: Has the opinion “Killed Hostage” of you
-200
You already made a Truce with the recipient
when
  • has_truce = scope:recipient
+20
Fighting a War
when
  • The character you target: Is at War
-25
Attacked Home Court
when
-50
Weak Hook used
when
+40
Has my Hostage
when
  • The character you target › Any home court hostage:
    • warden = scope:actor
-50
Crusader War for Imperial Claim-5,000
Acceptance (ai_accept) (292 lines of game script)
base = 0
bp2_hostage_return_personality_modifier = {
	HOME_COURT = scope:actor
	WARDEN = scope:recipient
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = 0.5
	desc = AI_OPINION_REASON
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:secondary_recipient
	multiplier = -0.1
	desc = AI_OPINION_REASON
}
bp2_hostage_relation_modifier = yes
modifier = {
	add = intimidated_halved_reason_value
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 1
		}
	}
	desc = INTIMIDATED_REASON
}
modifier = {
	add = cowed_halved_reason_value
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 2
		}
	}
	desc = COWED_REASON
}
modifier = {
	exists = scope:secondary_recipient
	add = interaction_recipient_hostage_value
	desc = HOSTAGE_VALUE_RECIPIENT_REASON
}
modifier = {
	add = 25
	scope:secondary_recipient = {
		is_adult = yes
	}
	desc = HOSTAGE_ADULT_REASON
}
modifier = {
	add = -25
	scope:secondary_recipient = {
		hostage_duration = {
			years < 1
		}
	}
	desc = HOSTAGE_MINIMUM_STAY_REASON
}
modifier = {
	add = {
		value = 10
		scope:secondary_recipient = {
			if = {
				limit = {
					hostage_duration = {
						years >= 3
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 4
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 5
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 6
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 7
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 8
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 9
					}
				}
				add = 10
			}
			if = {
				limit = {
					hostage_duration = {
						years >= 10
					}
				}
				add = 10
			}
		}
	}
	scope:secondary_recipient = {
		hostage_duration = {
			years >= 2
		}
	}
	desc = HOSTAGE_DURATION_REASON
}
bp2_hostage_recall_tier_neighbor_modifier = {
	RECALLER = scope:actor
	WARDEN = scope:recipient
}
bp2_hostage_claims_casus_bellis_modifier = {
	SENDER = scope:actor
	RECEIVER = scope:recipient
}
bp2_hostage_recall_vassals_lieges_modifier = {
	RECALLER = scope:actor
	WARDEN = scope:recipient
}
bp2_hostage_relative_strength_modifier = {
	SENDER = scope:recipient
	RECEIVER = scope:actor
}
modifier = {
	desc = HOSTAGE_IMMINENT_THREAT_REASON
	scope:actor = {
		has_any_cb_on = scope:recipient
	}
	scope:actor.current_strength_with_allies_fifty_percent_value > scope:recipient.current_strength_with_allies_value
	add = -25
}
bp2_hostage_culture_faith_modifier = {
	SENDER = scope:actor
	RECEIVER = scope:recipient
}
modifier = {
	scope:recipient = {
		culture = {
			has_cultural_tradition = tradition_equitable
		}
		NOT = {
			any_home_court_hostage = {
				warden = scope:actor
			}
		}
	}
	scope:secondary_recipient = {
		hostage_duration = {
			years >= 2
		}
	}
	add = 25
	desc = HOSTAGE_EQUITABLE_TRADITION_REASON
}
modifier = {
	scope:recipient = {
		culture = {
			has_cultural_tradition = tradition_esteemed_hospitality
		}
		NOT = {
			any_home_court_hostage = {
				warden = scope:actor
			}
		}
	}
	scope:secondary_recipient = {
		hostage_duration = {
			years >= 2
		}
	}
	add = 25
	desc = HOSTAGE_ESTEEMED_HOSPITALITY_TRADITION_REASON
}
modifier = {
	scope:recipient = {
		is_vassal_of = scope:actor
		culture = {
			has_cultural_tradition = tradition_loyal_soldiers
		}
	}
	scope:secondary_recipient = {
		hostage_duration = {
			years >= 2
		}
	}
	add = 25
	desc = HOSTAGE_LOYAL_SUBJECTS_TRADITION_REASON
}
modifier = {
	exists = scope:actor.var:hostage_died
	scope:recipient = {
		NOR = {
			var:let_my_hostage_die ?= scope:actor
			has_opinion_modifier = {
				target = scope:actor
				modifier = killed_hostage_opinion
			}
		}
	}
	desc = HOSTAGE_PREVIOUSLY_DIED_REASON
	add = -25
}
modifier = {
	scope:recipient = {
		var:let_my_hostage_die ?= scope:actor
		NOT = {
			has_opinion_modifier = {
				target = scope:actor
				modifier = killed_hostage_opinion
			}
		}
	}
	desc = HOSTAGE_PREVIOUSLY_DIED_HOME_COURT_REASON
	add = -100
}
modifier = {
	scope:recipient = {
		has_opinion_modifier = {
			target = scope:actor
			modifier = killed_hostage_opinion
		}
	}
	desc = HOSTAGE_KILLED_REASON
	add = -200
}
modifier = {
	scope:actor ?= {
		has_truce = scope:recipient
	}
	desc = HOSTAGE_ACTOR_EXISTING_TRUCE_REASON
	add = 20
}
modifier = {
	scope:recipient ?= {
		is_at_war = yes
	}
	desc = HOSTAGE_AT_WAR_REASON
	add = -25
}
modifier = {
	add = -50
	scope:actor = {
		has_character_modifier = attacked_home_court
	}
	desc = attacked_home_court
}
modifier = {
	scope:hook = yes
	add = 40
	desc = SCHEME_WEAK_HOOK_USED
}
modifier = {
	add = -50
	scope:recipient = {
		any_home_court_hostage = {
			warden = scope:actor
		}
	}
	desc = HOSTAGE_HAS_MINE_REASON
}
modifier = {
	desc = crusading_claim_cb_rea
# … (cut here; the rest is in the file)

As written in game/common/character_interactions/05_bp2_interactions.txt.

What happens

If they accept

  • The home court:
    • The hostage:
      • return_hostage = yes
    • The hostage’s warden:
      • If

        • One of these

          • bp2_warden_title_tier_lower_trigger = { WARDEN = scope:hostage.warden HOME_COURT = scope:hostage.home_court }
          • or

            bp2_warden_dynasty_renown_lower_trigger = { WARDEN = scope:hostage.warden HOME_COURT = scope:hostage.home_court }

        Then

        • If

          • The hostage’s warden’s faith:
            • faith_hostility_level = { target = scope:hostage.home_court.faith value >= faith_hostile_level }

          Then

          Otherwise

        Otherwise

      • If

        • The hostage’s home court:
          • None of these

            • Any warden hostage:
              • home_court = scope:hostage.warden
            • One of these

              • has_truce = scope:hostage.warden
              • or

                is_allied_to = scope:hostage.warden

        Then

        • … and … may freely attack one another
  • The home court: Event char_interaction.0340

If they refuse

Options when sending

  • Use a Hook

Events it fires: char_interaction.0340, char_interaction.0341

• 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) (12 lines of game script)
is_shown = scope:actor = {
	is_ai = no
}
scope:recipient != scope:actor
OR = {
	scope:actor = {
		any_home_court_hostage = {
			warden ?= scope:recipient
		}
	}
	scope:recipient.home_court ?= scope:actor
}

As written in game/common/character_interactions/05_bp2_interactions.txt.

Can be sent when (is_valid…) (16 lines of game script)
NOR = {
	scope:recipient = {
		is_at_war_with = scope:actor
	}
	scope:actor = {
		government_has_flag = government_is_theocracy
	}
	scope:recipient = {
		government_has_flag = government_is_theocracy
	}
}
NOT = {
	scope:actor = {
		is_at_war_with = scope:recipient
	}
}

As written in game/common/character_interactions/05_bp2_interactions.txt.

Effects (on_send, on_accept, on_decline) (50 lines of game script)
on_send = 
on_accept = scope:actor = {
	save_scope_as = home_court
}
scope:recipient = {
	save_scope_as = warden
}
scope:secondary_recipient = {
	save_scope_as = hostage
}
scope:warden = {
	hidden_effect = {
		send_interface_toast = {
			type = event_toast_effect_neutral
			title = recall_hostage_interaction_notification
			left_icon = scope:hostage
			right_icon = scope:home_court
			show_as_tooltip = {
				bp2_return_hostage_effect = {
					HOSTAGE = scope:hostage
				}
			}
		}
	}
}
scope:home_court = {
	send_interface_toast = {
		type = event_toast_effect_good
		title = recall_hostage_interaction_notification
		left_icon = scope:hostage
		right_icon = scope:warden
		show_as_tooltip = {
			bp2_return_hostage_effect = {
				HOSTAGE = scope:hostage
			}
		}
	}
	if = {
		limit = {
			has_character_flag = flag_hostile_actions_disabled_delay
		}
		remove_character_flag = flag_hostile_actions_disabled_delay
	}
}
scope:home_court = {
	trigger_event = char_interaction.0340
}
on_decline = scope:actor = {
	trigger_event = char_interaction.0341
}

As written in game/common/character_interactions/05_bp2_interactions.txt.

Category
Diplomatic actions
In the menu
under More…
ID
recall_hostage_interaction

Source: game/common/character_interactions/05_bp2_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.

Spotted a mistake on this page?