Interaction · Diplomatic actions
Offer Hostage
Send a Hostage to the recipient as an assurance you will not attack them
What you need
You
To send it
None of these
- The character you target: Is at war with you
- The character you target: Is allied to you
- You: Your Government is a Theocratic-type Government
- The character you target: Government is a Theocratic-type Government
- … already has a Hostage from your Court
- Their Hostage is already traveling to … court
One of these
- Is not a landless ruler
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
If
a check the game hides
Then
- The character you send:
is_hostage = no- Is a direct vassal of you
- Is not landed
- Is not a landless ruler
- Is not married
- Is not betrothed
- If imprisoned:
imprisoner = scope:actor
One of these
- Is a child of you
or
Is a grandchild of youor
Is a sibling of youor
is_nibling_of = scope:actor
- You may not offer your Regent as a Hostage
If
a check the game hides
Then
- The war:
- Hostages cannot be exchanged to settle Great Holy Wars
- Hostages cannot be used to settle a …
- The war:
- The character you send:
- This action may not be taken against the Ceremonial Monarch
- If played by the AI:
- The character you target:
character_is_land_realm_neighbor = scope:actor
scope:recipient.current_military_strength >= scope:actor.fifty_percent_of_current_military_strength- The character you target:
has_any_cb_on = scope:actor
None of these
- The character you target:
One of these
One of these
- Has you as potential rival
or
Has you as victimor
Has you as bully
or
Has you as rival
All of these
exists = scope:actor.houseOne of these
- Their house:
this != scope:actor.househas_house_relation_with = scope:actor.house- Any house relation:
has_house_relation_level = feud- Any relation house:
scope:actor.house = this
or
exists = scope:return_feud_as_true_for_debug
- Their house:
- The character you target:
None of these
- The character you send › Any close family member:
- Is played by a person
One of these
- Is a parent of the character you send
or
is_grandparent_of = scope:secondary_actor
this != scope:actor
- Hostage died is scope:recipient
- The character you send › Any close family member:
- The character you target:
To see it in the menu
- Your government is not Adventurer
- If played by the AI: Does not have “conqueror” (a variable the game's script sets)
- The target is not you
scope:recipient.highest_held_title_tier > tier_baronyIf
root.top_liege != scope:actor- Your top liege: Government uses Merit
scope:recipient != scope:actor.top_liege
Then
Not all of these
- You: Your Government uses Merit
- The character you target: Government uses Merit
The character you target
To send it
One of these
- Is not a landless ruler
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
To see it in the menu
- Their government is not Adventurer
- Their government is not unplayable
Which character you can pick
is_hostage = no- Is a direct vassal of you
- Is not landed
- Is not a landless ruler
- Is not married
- Is not betrothed
- If imprisoned:
imprisoner = scope:actor
One of these
- Is a child of you
or
Is a grandchild of youor
Is a sibling of youor
is_nibling_of = scope:actor
- You may not offer your Regent as a Hostage
If
a check the game hides
Then
- The war:
- Hostages cannot be exchanged to settle Great Holy Wars
- Hostages cannot be used to settle a …
- The war:
- Already under negotiation to become someone's Hostage
Offer Hostage is a diplomatic character interaction in Crusader Kings III. You need: This action may not be taken against the Ceremonial Monarch. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include … Culture (+25), … Culture (+25), They is your Friend (+15) and 24 more. Patch 1.20.1.2, from game/common/character_interactions/05_bp2_interactions.txt.
Quick answers (2)
- What are the requirements for Offer Hostage in CK3?
- You: This action may not be taken against the Ceremonial Monarch. (patch 1.20.1.2)
- How do I get the AI to accept Offer 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, Crown Authority makes disobeying Liege dishonorable, The recipient's Rationality, The recipient's Zeal, … Culture +25, … Culture +25, … 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 character you send's value 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. …: …), … 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, The recipient already has a Truce with you -20, Fighting a War +15, You have already taken a Hostage from the recipient +50, Attacked Warden -50 and Conqueror -1,000.
Will they accept?
Accepted automatically when:
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.
| Reason | Amount |
|---|---|
| Base | 0 |
The recipient's Boldnesswhen
| their ai boldness × -0.5 |
The recipient's Compassionwhen
| their ai compassion × -0.5 |
The recipient's Greedwhen
| varies |
The recipient's Honorwhen
| varies |
Crown Authority makes disobeying Liege dishonorablewhen
| their ai honor × 0.5 |
The recipient's Rationalitywhen
| their ai rationality × 0.5 |
The recipient's Zealwhen
| varies |
… Culturewhen
| +25 |
… Culturewhen
| +25 |
| … Opinion of … | varies |
They is your Friendwhen
| +15 |
They is your Best Friendwhen
| +30 |
They is your Loverwhen
| +15 |
They is your Soulmatewhen
| +30 |
They is your Rivalwhen
| -25 |
They is your Nemesiswhen
| -50 |
Intimidated by youwhen
| intimidated_halved_reason_value |
Terrified of youwhen
| cowed_halved_reason_value |
| The character you send's value as a Hostage | interaction_actor_hostage_value |
Difference in Rankwhen
| varies |
Difference in Rankwhen
| varies |
Not neighboring Realmswhen
| -20 |
Distant realmwhen
| -20 |
Has Casus Bellis against youwhen
| -15 |
Has Claims on your Titleswhen
| varies |
Protected by their Liegewhen
| -50 |
You are a mere Vassalwhen
| varies |
Similar Military Strengthwhen
| +10 |
Relative Military Strength (…: … vs. …: …)when
| varies |
Relative Military Strength (…: … vs. …: …)when
| varies |
Allies Military Strength (…: … vs. …: …)when
| varies |
… Cultural Acceptance of …when
| -5 |
… Cultural Acceptance of …when
| -10 |
… Cultural Acceptance of …when
| -15 |
… consider … Evilwhen
| -15 |
… consider … Hostilewhen
| -10 |
… consider … Astraywhen
| -5 |
… Equitable Traditionwhen
| +25 |
… Esteemed Hospitality Traditionwhen
| +25 |
… Loyal Subjects Traditionwhen
| +25 |
The recipient already has a Truce with youwhen
| -20 |
Fighting a Warwhen
| +15 |
You have already taken a Hostage from the recipientwhen
| +50 |
| Attacked Warden | -50 |
Conquerorwhen
| -1,000 |
Acceptance (ai_accept) (96 lines of game script)
base = 0
bp2_hostage_offer_personality_modifier = yes
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
bp2_hostage_relation_modifier = yes
bp2_hostage_dread_modifier = yes
modifier = {
exists = scope:secondary_actor
add = interaction_actor_hostage_value
desc = HOSTAGE_VALUE_ACTOR_REASON
}
bp2_hostage_tier_neighbor_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_claims_casus_bellis_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_vassals_lieges_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
modifier = {
scope:recipient.culture = {
has_cultural_tradition = tradition_equitable
}
add = 25
desc = HOSTAGE_EQUITABLE_TRADITION_REASON
}
modifier = {
scope:recipient.culture = {
has_cultural_tradition = tradition_esteemed_hospitality
}
add = 25
desc = HOSTAGE_ESTEEMED_HOSPITALITY_TRADITION_REASON
}
modifier = {
scope:recipient = {
is_vassal_of = scope:actor
culture = {
has_cultural_tradition = tradition_loyal_soldiers
}
}
add = 25
desc = HOSTAGE_LOYAL_SUBJECTS_TRADITION_REASON
}
modifier = {
scope:recipient ?= {
has_truce = scope:actor
}
desc = HOSTAGE_RECIPIENT_EXISTING_TRUCE_REASON
add = -20
}
modifier = {
scope:recipient ?= {
is_at_war = yes
}
desc = HOSTAGE_AT_WAR_REASON
add = 15
}
modifier = {
scope:actor = {
any_warden_hostage = {
home_court ?= scope:recipient
}
}
desc = HOSTAGE_ALREADY_DEMANDED_REASON
add = 50
}
modifier = {
add = -50
scope:actor = {
has_character_modifier = attacked_warden
}
desc = attacked_warden
}
modifier = {
scope:recipient ?= {
has_variable = conqueror
}
desc = NO_FRIVOLOUS_ACTIVITIES_REASON
add = -1000
}As written in game/common/character_interactions/05_bp2_interactions.txt.
What happens
If they accept
- Hostages must first Travel to the Warden's court
- Wardens at War with Home Courts may freely execute Hostages
- Home Courts and Wardens suffer penalties for attacking each other
- The hostage:
- If any relation › Every relation:
- The current guardian scope:
remove_relation_ward = scope:hostageIf
is_foreign_court_guest = yesNone of these
host = liegeis_playable_character = { }- Any relation:
is_playable_character = { }this = scope:current_guardian_scope.host
Then
return_to_court = yes
- If never › The hostage:
return_ward_travel_effect = { }
- Otherwise:
If
a check the game hides
Then
- The current guardian scope:
If
Then
remove_opinion = { modifier = guardian_of_heir_opinion target = scope:hostage.liege }
Else if
- Has the opinion “Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:hostage.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_opinion target = scope:hostage.liege }
If
Then
remove_opinion = { modifier = guardian_of_heir_parochial_opinion target = scope:hostage.liege }
Else if
- Has the opinion “Parochial Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:hostage.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_parochial_opinion target = scope:hostage.liege }
- The hostage:
If
a check the game hides
Then
var:guardian_liege:If
Then
remove_opinion = { modifier = guardian_of_heir_opinion target = scope:hostage.liege }
Else if
- Has the opinion “Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:hostage.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_opinion target = scope:hostage.liege }
If
Then
remove_opinion = { modifier = guardian_of_heir_parochial_opinion target = scope:hostage.liege }
Else if
- Has the opinion “Parochial Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:hostage.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_parochial_opinion target = scope:hostage.liege }
- The current guardian scope:
- The current guardian scope:
- Else, if any relation › Every relation:
- The hostage:
remove_relation_ward = scope:current_ward_scopeIf
is_foreign_court_guest = yesNone of these
host = liegeis_playable_character = { }- Any relation:
is_playable_character = { }this = scope:hostage.host
Then
return_to_court = yes
If
always = yes
Then
- The current ward scope:
return_ward_travel_effect = { }
Otherwise
If
a check the game hides
Then
- The hostage:
If
Then
remove_opinion = { modifier = guardian_of_heir_opinion target = scope:current_ward_scope.liege }
Else if
- Has the opinion “Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:current_ward_scope.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_opinion target = scope:current_ward_scope.liege }
If
Then
remove_opinion = { modifier = guardian_of_heir_parochial_opinion target = scope:current_ward_scope.liege }
Else if
- Has the opinion “Parochial Guardian of Your Relative”
None of these
- Any relation:
is_close_family_of = scope:current_ward_scope.liege
- Any relation:
Then
remove_opinion = { modifier = guardian_of_relative_parochial_opinion target = scope:current_ward_scope.liege }
- The current ward scope:
- The hostage:
- The hostage:
- … (more in the script below)
- If any relation › Every relation:
- … (more in the script below)
If they refuse
- Event char_interaction.0300
Options when sending
- Use a Hook
Events it fires: char_interaction.0330, char_interaction.0300
• 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) (36 lines of game script)
is_available = NOT = {
government_has_flag = government_is_landless_adventurer
}
trigger_if = {
limit = {
is_ai = yes
}
NOT = {
has_variable = conqueror
}
}
is_shown = scope:recipient != scope:actor
scope:recipient.highest_held_title_tier > tier_barony
scope:recipient = {
NOR = {
government_has_flag = government_is_landless_adventurer
government_has_flag = government_is_herder
}
}
trigger_if = {
limit = {
scope:actor.top_liege != scope:actor
scope:actor.top_liege ?= {
government_has_flag = government_has_merit
}
scope:recipient != scope:actor.top_liege
}
NAND = {
scope:actor = {
government_has_flag = government_has_merit
}
scope:recipient = {
government_has_flag = government_has_merit
}
}
}As written in game/common/character_interactions/05_bp2_interactions.txt.
Can be sent when (is_valid…) (147 lines of game script)
NOR = {
scope:recipient = {
is_at_war_with = scope:actor
}
scope:recipient = {
is_allied_to = scope:actor
}
scope:actor = {
government_has_flag = government_is_theocracy
}
scope:recipient = {
government_has_flag = government_is_theocracy
}
custom_tooltip = {
text = already_has_your_hostage_tt
scope:recipient = {
any_warden_hostage = {
home_court ?= scope:actor
}
}
}
custom_description = {
text = hostage_already_travelling_tt
subject = scope:actor
object = scope:recipient
scope:actor = {
any_close_family_member = {
exists = var:hostage_travelling_to_warden
var:hostage_travelling_to_warden = scope:recipient
}
}
}
}
scope:actor = {
OR = {
is_landless_ruler = no
is_landless_administrative = yes
}
}
scope:recipient = {
OR = {
is_landless_ruler = no
is_landless_administrative = yes
}
}
trigger_if = {
limit = {
scope:actor = {
is_ai = yes
}
exists = scope:secondary_actor
}
NOT = {
scope:secondary_actor = {
has_character_flag = ai_should_not_offer_hostage
}
}
}
trigger_else = {
scope:actor = {
custom_description = {
text = basic_valid_hostage_to_offer
object = scope:recipient
any_close_family_member = {
bp2_valid_to_offer_as_hostage_trigger = {
SENDER = scope:actor
}
}
}
}
}
trigger_if = {
limit = {
exists = scope:secondary_actor
exists = scope:actor
}
scope:secondary_actor = {
bp2_valid_to_offer_as_hostage_trigger = {
SENDER = scope:actor
}
}
}
tgp_blocked_action_against_tenno_trigger = {
ACTOR = scope:actor
TARGET = scope:recipient
}
scope:actor = {
trigger_if = {
limit = {
is_ai = yes
}
bp2_valid_to_offer_hostage_ai_trigger = yes
NOR = {
scope:secondary_actor = {
any_close_family_member = {
is_ai = no
OR = {
is_parent_of = scope:secondary_actor
is_grandparent_of = scope:secondary_actor
}
this != scope:actor
}
}
var:hostage_died ?= scope:recipient
}
}
}
scope:recipient = {
trigger_if = {
limit = {
is_ai = no
}
NOT = {
scope:secondary_actor = {
has_character_flag = ai_should_not_offer_hostage
}
}
}
}
scope:secondary_actor = {
trigger_if = {
limit = {
is_adult = yes
}
OR = {
AND = {
custom_tooltip = {
text = hostage_opinion_too_low_tt
opinion = {
target = scope:actor
value >= -25
}
}
NOT = {
has_trait = disloyal
}
}
has_trait = loyal
}
}
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = {
has_character_flag = under_offer_as_hostage_flag
}
}
}As written in game/common/character_interactions/05_bp2_interactions.txt.
Effects (on_send, on_accept, on_decline) (68 lines of game script)
on_send = scope:secondary_actor = {
add_character_flag = {
flag = under_offer_as_hostage_flag
months = 1
}
}
if = {
limit = {
scope:recipient = {
is_ai = no
}
}
hidden_effect = {
scope:secondary_actor = {
add_character_flag = {
flag = ai_should_not_offer_hostage
years = 3
}
}
}
}
on_accept = scope:actor = {
save_scope_as = hostage_sender
}
scope:secondary_actor = {
save_scope_as = hostage
}
scope:recipient = {
save_scope_as = hostage_taker
}
custom_description_no_bullet = {
text = hostage_pacts_on_arrival_tt
}
custom_description_no_bullet = {
text = hostage_execution_warning_tt
}
custom_description_no_bullet = {
text = hostage_attack_warning_tt
}
hostage_depart_effect = {
HOSTAGE = scope:hostage
WARDEN = scope:hostage_taker
HOME_COURT = scope:hostage_sender
}
scope:actor = {
trigger_event = char_interaction.0330
}
if = {
limit = {
scope:actor = {
government_has_flag = government_is_clan
}
scope:actor.house = scope:recipient.house
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_hostage.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_decline = scope:actor = {
trigger_event = char_interaction.0300
}
scope:secondary_actor = {
remove_character_flag = under_offer_as_hostage_flag
}As written in game/common/character_interactions/05_bp2_interactions.txt.
- Category
- Diplomatic actions
- Again on the same character
- after 3 years
- In the menu
- under More…
- ID
offer_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.