N3OW/common/character_interactions/05_bp2_interactions.txt

4999 lines
110 KiB
Text
Raw Normal View History

#Interactions relating to hostages
### Offer hostage - unilateral
# actor = offerer
# recipient = receiver
# secondary_actor = hostage
offer_hostage_interaction = {
category = interaction_category_diplomacy
common_interaction = no
interface_priority = 11
ai_min_reply_days = 4
ai_max_reply_days = 9
popup_on_receive = yes
pause_on_receive = yes
icon = icon_hostage
populate_actor_list = {
scope:actor = {
every_close_family_member = {
limit = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:actor }
}
add_to_list = characters
}
}
}
desc = offer_hostage_interaction_desc
prompt = OFFER_HOSTAGE_SELECT_HOSTAGE_TO_TRANSFER
notification_text = OFFER_HOSTAGE_PROPOSAL
cooldown_against_recipient = { years = 3 }
is_shown = {
scope:recipient != scope:actor
# Cannot exchange hostages with a herder
# Only significant rulers use hostages
scope:recipient.highest_held_title_tier > tier_barony
# Laamps can't do anything with hostages but return/recall them.
scope:recipient = {
NOR = {
government_has_flag = government_is_landless_adventurer
government_has_flag = government_is_true_herder
}
}
#Inside a merit realm vassals won't offer hostages except to your top liege.
trigger_if = {
limit = {
scope:actor.top_liege = { government_has_flag = government_has_merit }
scope:actor.top_liege != scope:actor
scope:recipient != scope:actor.top_liege
}
NAND = {
scope:actor = { government_has_flag = government_has_merit }
scope:recipient = { government_has_flag = government_has_merit }
}
}
}
is_valid_showing_failures_only = {
NOR = {
# Must be at peace
scope:recipient = { is_at_war_with = scope:actor }
# Allies don't need hostages
scope:recipient = { is_allied_to = scope:actor }
# Only family oriented governments use hostages
scope:actor = {
government_has_flag = government_is_theocracy
}
scope:recipient = {
government_has_flag = government_is_theocracy
}
# 1 hostage per home court
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 = {
2026-03-23 23:17:50 +00:00
government_has_flag = government_is_urepublic
government_has_flag = government_is_prepublic
is_landless_ruler = no
is_landless_administrative = yes
}
}
scope:recipient = {
OR = {
2026-03-23 23:17:50 +00:00
government_has_flag = government_is_urepublic
government_has_flag = government_is_prepublic
is_landless_ruler = no
is_landless_administrative = yes
}
}
# Stop AI spamming hostage offers
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
exists = scope:secondary_actor
}
NOT = {
scope:secondary_actor = { has_character_flag = ai_should_not_offer_hostage }
}
}
# Tooltip for players in case of no valid hostages to offer
trigger_else = {
scope:actor = {
custom_description = {
text = "basic_valid_hostage_to_offer"
object = scope:recipient
any_close_family_member = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:actor }
}
}
}
}
# Hostages still valid
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
}
}
can_be_picked = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:actor }
# Under offer
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { exists = var:hostage_travelling_to_warden }
}
}
can_send = {
scope:actor = { # AI only offer to more powerful neighbors
trigger_if = {
limit = { is_ai = yes }
bp2_valid_to_offer_hostage_ai_trigger = yes
# AI should not offer close family of players without their consent
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
}
}
# A hostage died on their watch
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 }
}
}
}
# Adult hostages must be loyal enough to go along with it
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
}
}
# Under offer
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
}
}
cost = {}
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 = {
# Save scopes for clarity
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 we're of the same clan this interaction affects unity
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 }
}
auto_accept = {
trigger_if = {
limit = {
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
trigger_else = { always = no }
}
can_be_blocked = {
custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook.
text = "spending_hook"
subject = scope:recipient
object = scope:actor
scope:recipient = { has_hook = scope:actor }
NAND = {
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
}
on_blocked_effect = {
scope:recipient = {
remove_hook = { target = scope:actor }
}
}
#Use hook
send_option = {
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
}
flag = hook
localization = SCHEME_HOOK
}
should_use_extra_icon = {
scope:actor = { has_usable_hook = scope:recipient }
}
extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"
send_options_exclusive = no
# AI
ai_accept = {
base = 0 # Try to make it 0 for most interactions
######### PERSONALITY
bp2_hostage_offer_personality_modifier = yes
######### OPINION
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
######### RELATIONS
bp2_hostage_relation_modifier = yes
######### DREAD
bp2_hostage_dread_modifier = yes
######### HOSTAGE IMPORTANCE
# Hostages
modifier = {
exists = scope:secondary_actor
add = interaction_actor_hostage_value
desc = HOSTAGE_VALUE_ACTOR_REASON
}
######### RELATIVE POWER
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 = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
######### CULTURAL DIFFERENCES
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
######### CULTURAL TRADITIONS
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
}
######### OTHER
modifier = { # Already have a truce
scope:recipient ?= { has_truce = scope:actor }
desc = HOSTAGE_RECIPIENT_EXISTING_TRUCE_REASON
add = -20
}
modifier = { # Already fighting a war
scope:recipient ?= { is_at_war = yes }
desc = HOSTAGE_AT_WAR_REASON
add = 15
}
modifier = { # Already have their hostage
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 = { # Conqueror
scope:recipient ?= {
has_variable = conqueror
}
desc = NO_FRIVOLOUS_ACTIVITIES_REASON
add = -1000
}
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = vassals
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_frequency_by_tier = {
barony = 0
county = 120
duchy = 120
kingdom = 360
empire = 0
hegemony = 0
}
is_available = {
trigger_if = {
limit = {
is_ai = yes
}
NOT = { has_variable = conqueror }
}
NOT = {
government_has_flag = government_is_landless_adventurer
}
}
ai_will_do = {
base = 0
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion Factor
who = scope:actor
opinion_target = scope:secondary_actor
multiplier = -0.1
desc = AI_OPINION_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 = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
modifier = { # The AI will only use a Hook if they couldn't otherwise do this
scope:hook = yes
add = -1
}
modifier = { # Attacked a hostage's home court
add = -50
scope:recipient = { has_character_modifier = attacked_home_court }
desc = attacked_home_court
}
modifier = { # Hostage died on their watch
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 = { # MY Hostage died on their watch
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 = { # Killed my hostage!!!
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = killed_hostage_opinion
}
}
desc = HOSTAGE_KILLED_REASON
add = -200
}
modifier = { # Not neighboring
NOR = {
scope:recipient = {
character_is_land_realm_neighbor = scope:actor
top_liege = scope:actor.top_liege
}
}
add = -50
}
modifier = {
scope:recipient = { has_character_flag = halved_hostage_prestige_income }
desc = HOSTAGE_RETAINED_ADULTHOOD_REASON
add = -25
}
# Cultural traditions
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_equitable }
add = 25
}
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_esteemed_hospitality }
add = 25
}
modifier = {
scope:actor = {
is_vassal_of = scope:recipient
culture = { has_cultural_tradition = tradition_loyal_soldiers }
}
add = 25
desc = HOSTAGE_CULTURAL_TRADITION_REASON
}
}
}
### Demand hostage - unilateral
# actor = receiver
# recipient = offerer
# secondary_recipient = hostage
demand_hostage_interaction = {
category = interaction_category_diplomacy
common_interaction = no
ai_min_reply_days = 4
ai_max_reply_days = 9
popup_on_receive = yes
pause_on_receive = yes
icon = icon_hostage
interface_priority = 13
desc = demand_hostage_interaction_desc
prompt = DEMAND_HOSTAGE_SELECT_HOSTAGE_TO_OFFER
notification_text = DEMAND_HOSTAGE_PROPOSAL
populate_recipient_list = {
scope:recipient = {
every_close_family_member = {
limit = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
add_to_list = characters
}
}
}
cooldown_against_recipient = { years = 3 }
is_shown = {
# Cannot exchange hostages with self
scope:recipient != scope:actor
# Cannot exchange hostages with a herder
NOT = { scope:recipient = { government_has_flag = government_is_true_herder } }
# Only significant rulers use hostages
scope:actor.highest_held_title_tier > tier_barony
OR = {
scope:recipient.highest_held_title_tier > tier_barony
scope:recipient.liege ?= {
highest_held_title_tier > tier_barony
any_close_family_member = {
this = scope:recipient
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient.liege }
}
}
}
# Laamps can't do anything with hostages but return/recall them.
NOR = {
scope:actor = { government_has_flag = government_is_landless_adventurer }
scope:recipient = { government_has_flag = government_is_landless_adventurer }
}
#Inside a merit realm vassals won't demand hostages.
trigger_if = {
limit = {
scope:actor.top_liege = { government_has_flag = government_has_merit }
scope:actor.top_liege != scope:actor
}
NAND = {
scope:actor = { government_has_flag = government_has_merit }
scope:recipient = { government_has_flag = government_has_merit }
}
NOT = { scope:recipient = scope:actor.top_liege }
}
}
redirect = {
if = {
limit = {
scope:recipient ?= {
is_playable_character = no
is_landless_ruler = no
}
}
scope:recipient ?= { save_scope_as = secondary_recipient }
scope:secondary_recipient.liege ?= { save_scope_as = recipient }
}
}
is_valid_showing_failures_only = {
# Must be approachable
scope:recipient = {
NOT = { has_strong_hook = scope:actor }
}
scope:actor = {
OR = {
2026-03-23 23:17:50 +00:00
government_has_flag = government_is_urepublic
government_has_flag = government_is_prepublic
is_landless_ruler = no
is_landless_administrative = yes
}
}
scope:recipient = {
OR = {
2026-03-23 23:17:50 +00:00
government_has_flag = government_is_urepublic
government_has_flag = government_is_prepublic
is_landless_ruler = no
is_landless_administrative = yes
}
}
NOR = {
# Must be at peace
scope:recipient = { is_at_war_with = scope:actor }
# Allies don't need hostages
scope:recipient = { is_allied_to = scope:actor }
# Only family oriented governments use hostages
scope:actor = {
government_has_flag = government_is_theocracy
}
scope:recipient = {
government_has_flag = government_is_theocracy
}
# 1 hostage per court
custom_tooltip = {
text = "already_have_their_hostage_tt"
scope:actor = {
any_warden_hostage = { home_court ?= scope:recipient }
}
}
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
}
}
}
}
# Stop AI spamming hostage offers
trigger_if = {
limit = {
scope:recipient = { is_ai = yes }
exists = scope:secondary_recipient
}
NOT = {
scope:secondary_recipient = { has_character_flag = ai_should_not_demand_hostage }
}
}
# Tooltip for players in case of no valid hostages to demand
# Make sure this exactly matches "can_be_picked" section below
trigger_else = {
scope:recipient = {
custom_description = {
text = "basic_valid_hostage_to_demand"
subject = scope:actor
object = scope:recipient
any_close_family_member = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
}
}
}
# Hostages still valid
trigger_if = {
limit = {
exists = scope:secondary_recipient
exists = scope:recipient
}
scope:secondary_recipient = {
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
}
tgp_blocked_action_against_tenno_trigger = {
ACTOR = scope:actor
TARGET = scope:recipient
}
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
trigger_if = { # AI only demand from less powerful neighbors
limit = { is_ai = yes }
bp2_valid_to_demand_hostage_ai_trigger = yes
NOR = {
scope:secondary_recipient ?= { has_character_flag = ai_should_not_demand_hostage }
# AI should not demand close family of players without their consent
scope:secondary_recipient = {
any_close_family_member = {
is_ai = no
OR = {
is_parent_of = scope:secondary_recipient
is_grandparent_of = scope:secondary_recipient
}
this != scope:recipient
}
}
# A hostage died on their watch
var:hostage_died ?= scope:recipient
}
}
}
# Adult hostages must be loyal enough to go along with it
scope:secondary_recipient = {
trigger_if = {
limit = { is_adult = yes }
OR = {
AND = {
custom_tooltip = {
text = hostage_opinion_too_low_tt
opinion = {
target = scope:recipient
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 }
}
}
}
can_be_picked = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { exists = var:hostage_travelling_to_warden }
}
}
cost = {}
on_send = {
scope:secondary_recipient = {
add_character_flag = {
flag = under_offer_as_hostage_flag
months = 1
}
}
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
if = {
limit = {
scope:recipient = { is_ai = no }
}
scope:secondary_recipient = {
add_character_flag = {
flag = ai_should_not_demand_hostage
years = 3
}
}
}
}
on_accept = {
# Save scopes for clarity
scope:actor = { save_scope_as = hostage_taker }
scope:recipient = { save_scope_as = hostage_sender }
scope:secondary_recipient = { save_scope_as = hostage }
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
}
show_as_tooltip = {
if = {
limit = {
scope:recipient = { is_vassal_of = scope:actor }
}
scope:recipient = {
if = {
limit = { is_ai = yes }
add_opinion = {
modifier = liege_demanded_hostage_opinion
target = scope:actor
}
}
}
scope:actor = {
# Tyranny for demanding from vassals
add_tyranny = minor_tyranny_gain
}
}
}
scope:actor = { trigger_event = char_interaction.0331 }
# If we're of the same clan this interaction affects unity
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 = minor_unity_loss
DESC = clan_unity_hostage.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
on_decline = {
show_as_tooltip = {
if = { # Effects for refusing demand from liege
limit = {
scope:recipient = { is_vassal_of = scope:actor }
}
scope:recipient = {
if = {
limit = { is_ai = yes }
add_opinion = {
modifier = liege_demanded_hostage_opinion
target = scope:actor
}
}
}
scope:actor = {
# Tyranny for demanding from vassals
add_tyranny = minor_tyranny_gain
if = {
limit = { is_ai = yes }
add_opinion = {
modifier = vassal_refused_hostage_demand_opinion
target = scope:recipient
}
}
}
}
}
scope:actor = {
trigger_event = char_interaction.0301
}
scope:secondary_recipient = { remove_character_flag = under_offer_as_hostage_flag }
}
auto_accept = {
trigger_if = {
limit = {
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
trigger_else = { always = no }
}
can_be_blocked = {
custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook.
text = "spending_hook"
subject = scope:recipient
object = scope:actor
scope:recipient = { has_hook = scope:actor }
NAND = {
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
}
on_blocked_effect = {
scope:recipient = {
remove_hook = { target = scope:actor }
}
}
send_option = {
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
}
flag = hook
localization = SCHEME_HOOK
}
should_use_extra_icon = {
scope:actor = { has_usable_hook = scope:recipient }
}
extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"
send_options_exclusive = no
# AI
ai_accept = {
base = 0
######### PERSONALITY
bp2_hostage_demand_personality_modifier = yes
######### OPINION
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:secondary_recipient
multiplier = -0.1
desc = AI_OPINION_REASON
}
######### RELATIONS
bp2_hostage_relation_modifier = yes
######### DREAD
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
}
######### HOSTAGE IMPORTANCE
modifier = {
exists = scope:secondary_recipient
add = interaction_recipient_hostage_value
desc = HOSTAGE_VALUE_RECIPIENT_REASON
}
######### RELATIVE POWER
bp2_hostage_tier_neighbor_modifier = { # Realm relative position
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_claims_casus_bellis_modifier = { # Desire for land/war
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_vassals_lieges_modifier = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
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
}
######### CULTURAL DIFFERENCES
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
######### CULTURAL TRADITIONS
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
}
######### OTHER
modifier = { # Hostage died on their watch
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 = { # MY Hostage died on their watch
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 = { # Killed my hostage!!!
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = killed_hostage_opinion
}
}
desc = HOSTAGE_KILLED_REASON
add = -200
}
modifier = { # Already have a truce
scope:actor ?= { has_truce = scope:recipient }
desc = HOSTAGE_ACTOR_EXISTING_TRUCE_REASON
add = -20
}
modifier = { # Already fighting a war
scope:recipient ?= { is_at_war = yes }
desc = HOSTAGE_AT_WAR_REASON
add = 15
}
modifier = { # Already have your hostage
scope:recipient = {
any_warden_hostage = { home_court ?= scope:actor }
}
desc = HOSTAGE_ALREADY_OFFERED_REASON
add = 50
}
modifier = { # Attacked a hostage's home court
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 = {
scope:secondary_recipient ?= { is_adult = no }
scope:actor = { has_character_flag = halved_hostage_prestige_income }
desc = HOSTAGE_RETAINED_ADULTHOOD_REASON
add = -25
}
modifier = { # Conqueror
scope:recipient ?= {
has_variable = conqueror
}
desc = NO_FRIVOLOUS_ACTIVITIES_REASON
add = -1000
}
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = vassals
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 0
kingdom = 36
empire = 36
hegemony = 36
}
ai_potential = {
highest_held_title_tier >= tier_county
NOT = { has_variable = conqueror }
}
ai_will_do = {
base = 0
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_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 = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
modifier = {
add = -50
scope:recipient = { has_character_modifier = attacked_warden }
desc = attacked_warden
}
modifier = { # The AI will only use a Hook if they couldn't otherwise do this
scope:hook = yes
add = -1
}
modifier = { # Not neighboring
NOR = {
scope:recipient = {
character_is_land_realm_neighbor = scope:actor
top_liege = scope:actor.top_liege
}
}
add = -50
}
# Cultural traditions
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_equitable }
add = 25
}
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_esteemed_hospitality }
add = 25
}
modifier = {
scope:actor = {
is_vassal_of = scope:recipient
culture = { has_cultural_tradition = tradition_loyal_soldiers }
}
add = 25
desc = HOSTAGE_CULTURAL_TRADITION_REASON
}
}
}
### Exchange hostages - bilateral
# actor = receiver
# recipient = offerer
# secondary_actor = hostage
# secondary_recipient = hostage
exchange_hostage_interaction = {
category = interaction_category_diplomacy
common_interaction = no
ai_min_reply_days = 4
ai_max_reply_days = 9
popup_on_receive = yes
pause_on_receive = yes
icon = icon_hostage
interface_priority = 12
desc = exchange_hostage_interaction_desc
prompt = EXCHANGE_HOSTAGE_SELECT_HOSTAGE_TO_OFFER
notification_text = EXCHANGE_HOSTAGE_PROPOSAL
populate_actor_list = {
scope:actor = {
every_close_family_member = {
limit = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:actor }
}
add_to_list = characters
}
}
}
populate_recipient_list = {
scope:recipient = {
every_close_family_member = {
limit = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
add_to_list = characters
}
}
}
cost = {}
cooldown_against_recipient = { years = 3 }
is_shown = {
# Cannot exchange hostages with self
scope:recipient != scope:actor
# Cannot exchange hostages with a herder
NOT = { scope:recipient = { government_has_flag = government_is_true_herder } }
# Only significant rulers use hostages
scope:actor.highest_held_title_tier > tier_barony
OR = {
scope:recipient.highest_held_title_tier > tier_barony
scope:recipient.liege ?= {
highest_held_title_tier > tier_barony
any_close_family_member = {
this = scope:recipient
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient.liege }
}
}
}
# Laamps can't do anything with hostages but return/recall them.
NOR = {
scope:actor = { government_has_flag = government_is_landless_adventurer }
scope:recipient = { government_has_flag = government_is_landless_adventurer }
}
#Inside a merit realm vassals won't exchange hostages.
trigger_if = {
limit = {
scope:actor.top_liege = { government_has_flag = government_has_merit }
scope:actor.top_liege != scope:actor
}
NAND = {
scope:actor = { government_has_flag = government_has_merit }
scope:recipient = { government_has_flag = government_has_merit }
}
NOT = { scope:recipient = scope:actor.top_liege }
}
}
redirect = {
if = {
limit = {
scope:recipient ?= {
is_playable_character = no
is_landless_ruler = no
}
}
scope:recipient ?= { save_scope_as = secondary_recipient }
scope:secondary_recipient.liege ?= { save_scope_as = recipient }
}
}
is_valid_showing_failures_only = {
scope:actor = {
NOR = {
# Must be at peace
is_at_war_with = scope:recipient
# Allies don't need hostages
is_allied_to = scope:recipient
# Only family oriented governments use hostages
government_has_flag = government_is_theocracy
scope:recipient = {
government_has_flag = government_is_theocracy
}
# 1 hostage per court
custom_tooltip = {
text = "already_has_your_hostage_tt"
scope:recipient = {
any_warden_hostage = { home_court ?= scope:actor }
}
}
custom_tooltip = {
text = "already_have_their_hostage_tt"
any_warden_hostage = { home_court ?= scope:recipient }
}
custom_description = {
text = "hostage_already_travelling_tt"
subject = scope:recipient
object = scope:actor
any_close_family_member = {
exists = var:hostage_travelling_to_warden
var:hostage_travelling_to_warden = scope:recipient
}
}
custom_description = {
text = "hostage_already_travelling_tt"
subject = scope:actor
object = scope:recipient
scope:recipient = {
any_close_family_member = {
exists = var:hostage_travelling_to_warden
var:hostage_travelling_to_warden = scope:actor
}
}
}
}
OR = {
2026-03-23 23:17:50 +00:00
government_has_flag = government_is_urepublic
government_has_flag = government_is_prepublic
is_landless_ruler = no
is_landless_administrative = yes
}
# Stop AI spamming hostage offers
trigger_if = {
limit = {
is_ai = yes
exists = scope:secondary_actor
}
NOT = {
scope:secondary_actor = { has_character_flag = ai_should_not_demand_hostage }
}
}
# Tooltip for players in case of no valid hostages to demand
# Make sure this exactly matches "can_be_picked" section below
trigger_else = {
scope:recipient = {
custom_description = {
text = "basic_valid_hostage_to_demand"
subject = scope:actor
object = scope:recipient
any_close_family_member = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
}
}
}
# Stop AI spamming hostage offers
trigger_if = {
limit = {
is_ai = yes
exists = scope:secondary_actor
}
NOT = {
scope:secondary_actor = { has_character_flag = ai_should_not_offer_hostage }
}
}
# Tooltip for players in case of no valid hostages to offer
trigger_else = {
custom_description = {
text = "basic_valid_hostage_to_offer"
object = scope:recipient
subject = scope:actor
any_close_family_member = {
# Unlanded, at sender's court, child/sibling/nibling/grandchild
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:actor }
}
}
}
}
scope:recipient = {
OR = {
is_landless_ruler = no
is_landless_administrative = yes
}
}
# Hostages still valid
trigger_if = {
limit = {
exists = scope:secondary_recipient
exists = scope:recipient
}
scope:secondary_recipient = {
bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:recipient }
}
}
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
}
}
on_send = {
scope:secondary_actor = {
add_character_flag = {
flag = under_offer_as_hostage_flag
months = 1
}
}
scope:secondary_recipient = {
add_character_flag = {
flag = under_offer_as_hostage_flag
months = 1
}
}
}
can_send = {
scope:actor = {
trigger_if = {
limit = { is_ai = yes }
bp2_valid_to_exchange_hostage_ai_trigger = yes
# AI should not demand close family of players without their consent
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
}
}
scope:secondary_recipient = {
any_close_family_member = {
is_ai = no
OR = {
is_parent_of = scope:secondary_recipient
is_grandparent_of = scope:secondary_recipient
}
this != scope:recipient
}
}
# A hostage died on their watch
var:hostage_died ?= scope:recipient
}
}
}
scope:secondary_actor = {
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
# Adult hostages must be loyal enough to go along with it
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
}
}
}
scope:secondary_recipient = {
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
# Adult hostages must be loyal enough to go along with it
trigger_if = {
limit = { is_adult = yes }
OR = {
AND = {
custom_tooltip = {
text = hostage_opinion_too_low_tt
opinion = {
target = scope:recipient
value >= -25
}
NOT = { has_trait = disloyal }
}
}
has_trait = loyal
}
}
}
}
# whether a character can be picked for the interaction, interface only (e.g. picking the first character in the marriage interaction)
# in character scope, actor and recipient event targets can be used, but not the secondary characters (because none exist yet)
can_be_picked = {
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { has_character_flag = under_offer_as_hostage_flag }
}
# Already offered
custom_tooltip = {
text = hostage_already_offered_awaiting_response_tt
NOT = { exists = var:hostage_travelling_to_warden }
}
}
on_accept = {
# Save scopes for clarity
scope:actor = { save_scope_as = hostage_sender_1 }
scope:secondary_actor = { save_scope_as = hostage_1 }
scope:recipient = { save_scope_as = hostage_sender_2 }
scope:secondary_recipient = { save_scope_as = hostage_2 }
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_1
WARDEN = scope:hostage_sender_2
HOME_COURT = scope:hostage_sender_1
}
hostage_depart_effect = {
HOSTAGE = scope:hostage_2
WARDEN = scope:hostage_sender_1
HOME_COURT = scope:hostage_sender_2
}
scope:actor = { trigger_event = char_interaction.0332 }
# If we're of the same clan this interaction affects unity
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
}
}
scope:actor.house = {
change_house_relation_effect = {
HOUSE = scope:recipient.house
VALUE = house_relation_improve_medium_value
REASON = hostage_exchange
CHAR = scope:actor
TARGET_CHAR = scope:recipient
TITLE = scope:dummy_gender
}
}
}
on_decline = {
scope:actor = {
trigger_event = char_interaction.0311
}
scope:secondary_actor = { remove_character_flag = under_offer_as_hostage_flag }
scope:secondary_recipient = { remove_character_flag = under_offer_as_hostage_flag }
}
# AI
ai_accept = {
base = -25
######## PERSONALITY
bp2_hostage_exchange_personality_modifier = yes
######### OPINION
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:secondary_recipient
multiplier = -0.1
desc = AI_OPINION_REASON
}
######### RELATIONS
bp2_hostage_relation_modifier = yes
######### DREAD
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
}
######### HOSTAGE IMPORTANCE
modifier = {
exists = scope:secondary_actor
NOT = { exists = scope:secondary_recipient }
add = interaction_actor_hostage_value
desc = HOSTAGE_VALUE_ACTOR_REASON
}
modifier = {
NOT = { exists = scope:secondary_actor }
exists = scope:secondary_recipient
add = interaction_recipient_hostage_value # already negative
desc = HOSTAGE_VALUE_RECIPIENT_REASON
}
######### RELATIVE POWER
bp2_hostage_tier_neighbor_modifier = { # Realm relative position
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_claims_casus_bellis_modifier = { # Desire for land/war
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_vassals_lieges_modifier = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
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
}
######### CULTURAL DIFFERENCES
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
######### CULTURAL TRADITIONS
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
}
######### OTHER
modifier = { # Hostage died on their watch
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 = { # MY Hostage died on their watch
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 = { # Killed my hostage!!!
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = killed_hostage_opinion
}
}
desc = HOSTAGE_KILLED_REASON
add = -200
}
modifier = { # Already have a truce
scope:actor ?= { has_truce = scope:recipient }
desc = HOSTAGE_ACTOR_EXISTING_TRUCE_REASON
add = -20
}
modifier = { # Already fighting a war
scope:recipient ?= { is_at_war = yes }
desc = HOSTAGE_AT_WAR_REASON
add = 15
}
modifier = { # Already have your hostage
scope:recipient = {
any_warden_hostage = { home_court ?= scope:actor }
}
desc = HOSTAGE_ALREADY_OFFERED_REASON
add = 50
}
modifier = {
add = -50
scope:actor = { has_character_modifier = attacked_warden }
desc = attacked_warden
}
modifier = { # Attacked a hostage's home court
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 = {
scope:secondary_recipient ?= { is_adult = no }
scope:actor = { has_character_flag = halved_hostage_prestige_income }
desc = HOSTAGE_RETAINED_ADULTHOOD_REASON
add = -25
}
modifier = { # Conqueror
scope:recipient ?= {
has_variable = conqueror
}
desc = NO_FRIVOLOUS_ACTIVITIES_REASON
add = -1000
}
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = vassals
max = 10
}
ai_targets = {
ai_recipients = liege
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 360
kingdom = 120
empire = 36
hegemony = 36
}
ai_potential = {
is_adult = yes
highest_held_title_tier >= tier_county
NOT = { has_variable = conqueror }
}
ai_will_do = {
base = 0
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion Factor
who = scope:actor
opinion_target = scope:secondary_actor
multiplier = -0.1
desc = AI_OPINION_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 = { # Political situation
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
modifier = { # The AI will only use a Hook if they couldn't otherwise do this
scope:hook = yes
add = -1
}
modifier = { # Attacked a hostage's warden
add = -50
scope:recipient = { has_character_modifier = attacked_warden }
desc = attacked_warden
}
modifier = { # Attacked a hostage's home court
add = -50
scope:recipient = { has_character_modifier = attacked_home_court }
desc = attacked_home_court
}
modifier = { # Hostage died on their watch
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 = { # MY Hostage died on their watch
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 = { # Killed my hostage!!!
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = killed_hostage_opinion
}
}
desc = HOSTAGE_KILLED_REASON
add = -200
}
modifier = { # Not neighboring
NOR = {
scope:recipient = {
character_is_land_realm_neighbor = scope:actor
top_liege = scope:actor.top_liege
}
}
add = -50
}
modifier = {
scope:recipient = { has_character_flag = halved_hostage_prestige_income }
desc = HOSTAGE_RETAINED_ADULTHOOD_REASON
add = -25
}
# Cultural traditions
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_equitable }
add = 25
}
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_esteemed_hospitality }
add = 25
}
modifier = {
scope:actor = {
is_vassal_of = scope:recipient
culture = { has_cultural_tradition = tradition_loyal_soldiers }
}
add = 25
desc = HOSTAGE_CULTURAL_TRADITION_REASON
}
}
#Use hook
send_option = {
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
}
flag = hook
localization = SCHEME_HOOK
}
should_use_extra_icon = {
scope:actor = { has_usable_hook = scope:recipient }
}
extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"
send_options_exclusive = no
greeting = positive
}
### Return hostage - unilateral
# actor = warden
# recipient = home_court
# secondary_actor = hostage
return_hostage_interaction = {
category = interaction_category_diplomacy
common_interaction = no
popup_on_receive = yes
pause_on_receive = yes
icon = icon_hostage
desc = return_hostage_interaction_desc
populate_recipient_list = {
scope:actor = {
every_warden_hostage = {
limit = { home_court ?= scope:recipient }
add_to_list = characters
}
}
}
cost = {}
is_shown = {
# Cannot return hostages to self
scope:recipient != scope:actor
# Must have a hostage
OR = {
scope:actor = {
any_warden_hostage = { home_court ?= scope:recipient }
}
scope:recipient.warden ?= scope:actor
}
}
redirect = {
if = {
limit = {
scope:recipient.warden ?= scope:actor
}
scope:recipient = { save_scope_as = secondary_recipient }
scope:recipient.home_court = { save_scope_as = recipient }
}
}
is_valid_showing_failures_only = {
NOR = {
# Must be at peace
scope:recipient = { is_at_war_with = scope:actor }
# Only family oriented governments use hostages
scope:actor = {
OR = {
government_has_flag = government_is_theocracy
government_has_flag = government_is_landless_adventurer
}
}
scope:recipient = {
OR = {
government_has_flag = government_is_theocracy
government_has_flag = government_is_landless_adventurer
}
}
}
}
# whether a character can be picked for the interaction, interface only (e.g. picking the first character in the marriage interaction)
# in character scope, actor and recipient event targets can be used, but not the secondary characters (because none exist yet)
can_be_picked = {}
can_send = {
NOT = {
scope:actor = { is_at_war_with = scope:recipient }
}
}
on_send = {}
auto_accept = yes
on_accept = {
# Save scopes for clarity
scope:actor = { save_scope_as = warden }
scope:recipient = { save_scope_as = home_court }
scope:secondary_recipient = { save_scope_as = hostage }
# Send toast informing sender of acceptance
scope:home_court = {
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = return_hostage_interaction_notification
left_icon = scope:hostage
right_icon = scope:warden
show_as_tooltip = {
bp2_return_hostage_effect = { HOSTAGE = scope:hostage }
}
}
}
}
scope:warden = {
send_interface_toast = {
type = event_toast_effect_neutral
title = return_hostage_interaction_notification
left_icon = scope:hostage
right_icon = scope:home_court
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
}
}
# Notify home court with letter event
scope:home_court = {
trigger_event = { id = char_interaction.0320 }
}
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = vassals
ai_recipients = liege
ai_recipients = family # Redirects
}
ai_frequency_by_tier = {
barony = 0
county = 60
duchy = 36
kingdom = 36
empire = 36
hegemony = 36
}
ai_will_do = {
base = 0
modifier = {
NOR = {
# Alliances
is_allied_to = scope:recipient
is_spouse_of = scope:recipient
# Protected by liege
AND = {
OR = {
top_liege != this
scope:recipient = { top_liege != this }
}
top_liege != scope:recipient.top_liege
}
# Adult hostage been here awhile and we are not in immiment danger
AND = {
any_warden_hostage = {
age >= 20
hostage_duration = { years >= 5 }
}
NOT = {
scope:recipient = {
has_any_cb_on = scope:actor
scope:recipient.current_strength_with_allies_fifty_percent_value > scope:actor.current_strength_with_allies_value
}
}
}
}
factor = 0
}
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
modifier = {
add = 25
scope:actor = {
has_any_cb_on = scope:recipient
scope:actor.current_strength_with_allies_fifty_percent_value > scope:recipient.current_strength_with_allies_value
}
}
modifier = {
scope:recipient = {
OR = {
is_allied_to = scope:actor
is_spouse_of = scope:recipient
}
}
add = 50
}
modifier = {
scope:recipient = {
has_any_cb_on = scope:actor
scope:recipient.current_strength_with_allies_fifty_percent_value > scope:actor.current_strength_with_allies_value
}
add = -50
}
bp2_hostage_return_personality_modifier = {
WARDEN = scope:actor
HOME_COURT = scope:recipient
}
# Cultural traditions
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_equitable }
add = 25
}
modifier = {
scope:actor.culture = { has_cultural_tradition = tradition_esteemed_hospitality }
add = 25
}
modifier = {
scope:actor = {
is_vassal_of = scope:recipient
culture = { has_cultural_tradition = tradition_loyal_soldiers }
}
add = 25
desc = HOSTAGE_CULTURAL_TRADITION_REASON
}
#DO NOT SEND BACK FRANKOKRATIA CLAIMANT
modifier = {
scope:hostage ?= {
has_character_flag = byz_claimant_flag
}
exists = global_var:byz_claimant_champion
factor = 0
}
}
send_options_exclusive = no
show_effects_in_notification = no
greeting = positive
notification_text = {
}
}
### Recall hostage - bilateral
# actor = home_court
# recipient = warden
# secondary_recipient = hostage
recall_hostage_interaction = {
category = interaction_category_diplomacy
common_interaction = no
popup_on_receive = yes
pause_on_receive = yes
icon = icon_hostage
desc = recall_hostage_interaction_desc
populate_recipient_list = {
scope:actor = {
every_home_court_hostage = {
limit = { warden ?= scope:recipient }
add_to_list = characters
}
}
}
cost = {}
is_shown = {
# AI don't use this interaction at all
scope:actor = { is_ai = no }
# Cannot recall hostages from self
scope:recipient != scope:actor
# Must have a hostage
OR = {
scope:actor = {
any_home_court_hostage = { warden ?= scope:recipient }
}
scope:recipient.home_court ?= scope:actor
}
}
redirect = {
if = {
limit = {
scope:recipient.home_court ?= scope:actor
}
scope:recipient = { save_scope_as = secondary_recipient }
scope:recipient.warden = { save_scope_as = recipient }
}
}
is_valid_showing_failures_only = {
NOR = {
# Must be at peace
scope:recipient = { is_at_war_with = scope:actor }
# Only family oriented governments use hostages
scope:actor = { government_has_flag = government_is_theocracy }
scope:recipient = { government_has_flag = government_is_theocracy }
}
}
# whether a character can be picked for the interaction, interface only (e.g. picking the first character in the marriage interaction)
# in character scope, actor and recipient event targets can be used, but not the secondary characters (because none exist yet)
can_be_picked = {}
can_send = {
NOT = {
scope:actor = { is_at_war_with = scope:recipient }
}
}
on_send = {}
on_accept = {
# Save scopes for clarity
scope:actor = { save_scope_as = home_court }
scope:recipient = { save_scope_as = warden }
scope:secondary_recipient = { save_scope_as = hostage }
# Send toast informing sender of acceptance
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
}
}
# Notify home court with letter event
scope:home_court = { trigger_event = char_interaction.0340 }
}
on_decline = {
scope:actor = {
trigger_event = char_interaction.0341
}
}
ai_accept = {
base = 0
######### PERSONALITY
bp2_hostage_return_personality_modifier = {
HOME_COURT = scope:actor
WARDEN = scope:recipient
}
######### OPINION
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:secondary_recipient
multiplier = -0.1
desc = AI_OPINION_REASON
}
######### RELATIONS
bp2_hostage_relation_modifier = yes
######### DREAD
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
}
######### HOSTAGE IMPORTANCE
modifier = {
exists = scope:secondary_recipient
add = interaction_recipient_hostage_value
desc = HOSTAGE_VALUE_RECIPIENT_REASON
}
######### HOSTAGE TIME
modifier = { # Hostage is grown up
add = 25
scope:secondary_recipient = { is_adult = yes }
desc = HOSTAGE_ADULT_REASON
}
modifier = { # Time as a hostage
add = -25
scope:secondary_recipient = {
hostage_duration = { years < 1 }
}
desc = HOSTAGE_MINIMUM_STAY_REASON
}
modifier = { # Time as a hostage
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
}
######### RELATIVE POWER
bp2_hostage_recall_tier_neighbor_modifier = { # Realm relative position
RECALLER = scope:actor
WARDEN = scope:recipient
}
bp2_hostage_claims_casus_bellis_modifier = { # Desire for land/war
SENDER = scope:actor
RECEIVER = scope:recipient
}
bp2_hostage_recall_vassals_lieges_modifier = { # Political situation
RECALLER = scope:actor
WARDEN = scope:recipient
}
bp2_hostage_relative_strength_modifier = { # Relative military strength
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
}
######### CULTURAL DIFFERENCES
bp2_hostage_culture_faith_modifier = {
SENDER = scope:actor
RECEIVER = scope:recipient
}
######### CULTURAL TRADITIONS
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
}
######### OTHER
modifier = { # Hostage died on their watch
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 = { # MY Hostage died on their watch
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 = { # Killed my hostage!!!
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = killed_hostage_opinion
}
}
desc = HOSTAGE_KILLED_REASON
add = -200
}
modifier = { # Already have a truce
scope:actor ?= { has_truce = scope:recipient }
desc = HOSTAGE_ACTOR_EXISTING_TRUCE_REASON
add = 20
}
modifier = { # Already fighting a war
scope:recipient ?= { is_at_war = yes }
desc = HOSTAGE_AT_WAR_REASON
add = -25
}
modifier = { # Attacked a hostage's home court
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 = { # Has my hostage
add = -50
scope:recipient = {
any_home_court_hostage = { warden = scope:actor }
}
desc = HOSTAGE_HAS_MINE_REASON
}
#DO NOT SEND BACK FRANKOKRATIA CLAIMANT
modifier = {
desc = crusading_claim_cb_reason
scope:hostage = {
has_character_flag = byz_claimant_flag
}
exists = global_var:byz_claimant_champion
add = -5000
}
}
auto_accept = {
trigger_if = {
limit = {
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook ?= yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
trigger_else = { always = no }
}
can_be_blocked = {
custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook.
text = "spending_hook"
subject = scope:recipient
object = scope:actor
scope:recipient = { has_hook = scope:actor }
NAND = {
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
}
on_blocked_effect = {
scope:recipient = {
remove_hook = { target = scope:actor }
}
}
send_option = {
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
}
flag = hook
localization = SCHEME_HOOK
}
should_use_extra_icon = {
scope:actor = { has_usable_hook = scope:recipient }
}
extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"
send_options_exclusive = no
show_effects_in_notification = yes
greeting = positive
notification_text = RECALL_HOSTAGE_PROPOSAL
}
### Trait interaction for guardians
# actor = guardian
# recipient = ward/hostage
# This has to be update every time a new trait is added to the game, otherwise you won't be able to pass it down
influence_child_personality_interaction = {
category = interaction_category_friendly
common_interaction = yes
interface_priority = 60
icon = child
ai_maybe = yes
ai_min_reply_days = 4
ai_max_reply_days = 9
can_send_despite_rejection = yes
popup_on_receive = yes
pause_on_receive = yes
pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED
pre_answer_no_key = ANSWER_CANT_SUCCEED
pre_answer_yes_key = ANSWER_WILL_SUCCEED
pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE
desc = influence_child_personality_interaction_desc
is_shown = { #any ai ward/hostage
has_bp2_dlc_trigger = yes
scope:recipient = {
is_ai = yes
is_adult = no
OR = {
scope:actor = { has_relation_ward = scope:recipient }
is_hostage_of = scope:actor
}
}
}
is_valid_showing_failures_only = {
scope:recipient = { #be old enough to talk and have some room for new personlaity traits
age >= 4
custom_description = {
text = influence_child_personality_interaction_trait_limit
number_of_personality_traits < 4
}
#checking all trait individually through the set scope in order to catch if all of your traits are either the same or opposite
custom_description = {
text = influence_child_personality_interaction_all_same_traits
switch = {
trigger = yes
scope:lustful = {
scope:recipient = { NOT = { has_trait = lustful } }
}
scope:chaste = {
scope:recipient = { NOT = { has_trait = chaste } }
}
scope:gluttonous = {
scope:recipient = { NOT = { has_trait = gluttonous } }
}
scope:temperate = {
scope:recipient = { NOT = { has_trait = temperate } }
}
scope:greedy = {
scope:recipient = { NOT = { has_trait = greedy } }
}
scope:generous = {
scope:recipient = { NOT = { has_trait = generous } }
}
scope:lazy = {
scope:recipient = { NOT = { has_trait = lazy } }
}
scope:diligent = {
scope:recipient = { NOT = { has_trait = diligent } }
}
scope:wrathful = {
scope:recipient = { NOT = { has_trait = wrathful } }
}
scope:calm = {
scope:recipient = { NOT = { has_trait = calm } }
}
scope:patient = {
scope:recipient = { NOT = { has_trait = patient } }
}
scope:impatient = {
scope:recipient = { NOT = { has_trait = impatient } }
}
scope:arrogant = {
scope:recipient = { NOT = { has_trait = arrogant } }
}
scope:humble = {
scope:recipient = { NOT = { has_trait = humble } }
}
scope:deceitful = {
scope:recipient = { NOT = { has_trait = deceitful } }
}
scope:honest = {
scope:recipient = { NOT = { has_trait = honest } }
}
scope:craven = {
scope:recipient = { NOT = { has_trait = craven } }
}
scope:brave = {
scope:recipient = { NOT = { has_trait = brave } }
}
scope:shy = {
scope:recipient = { NOT = { has_trait = shy } }
}
scope:gregarious = {
scope:recipient = { NOT = { has_trait = gregarious } }
}
scope:ambitious = {
scope:recipient = { NOT = { has_trait = ambitious } }
}
scope:content = {
scope:recipient = { NOT = { has_trait = content } }
}
scope:arbitrary = {
scope:recipient = { NOT = { has_trait = arbitrary } }
}
scope:just = {
scope:recipient = { NOT = { has_trait = just } }
}
scope:cynical = {
scope:recipient = { NOT = { has_trait = cynical } }
}
scope:zealous = {
scope:recipient = { NOT = { has_trait = zealous } }
}
scope:paranoid = {
scope:recipient = { NOT = { has_trait = paranoid } }
}
scope:trusting = {
scope:recipient = { NOT = { has_trait = trusting } }
}
scope:compassionate = {
scope:recipient = { NOT = { has_trait = compassionate } }
}
scope:callous = {
scope:recipient = { NOT = { has_trait = callous } }
}
scope:sadistic = {
scope:recipient = { NOT = { has_trait = sadistic } }
}
scope:stubborn = {
scope:recipient = { NOT = { has_trait = stubborn } }
}
scope:fickle = {
scope:recipient = { NOT = { has_trait = fickle } }
}
scope:eccentric = {
scope:recipient = { NOT = { has_trait = eccentric } }
}
scope:vengeful = {
scope:recipient = { NOT = { has_trait = vengeful } }
}
scope:forgiving = {
scope:recipient = { NOT = { has_trait = forgiving } }
}
}
}
}
scope:actor = {
is_adult = yes
number_of_personality_traits >= 1 #just in case you have to have at least some personality
}
}
cooldown_against_recipient = { years = 3 }
can_send = {
}
#each option is shown if the actor has the corresponding trait and valid if recipient don't have it yet or don't have an opposite trait
send_option = {
is_shown = {
scope:actor = { has_trait = lustful }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = lustful
trait:lustful = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
has_sexuality = none
has_sexuality = asexual
}
}
}
flag = lustful
localization = trait_lustful
}
send_option = {
is_shown = {
scope:actor = { has_trait = chaste }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = chaste
trait:chaste = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
has_sexuality = none
has_sexuality = asexual
}
}
}
flag = chaste
localization = trait_chaste
}
send_option = {
is_shown = {
scope:actor = { has_trait = gluttonous }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = gluttonous
trait:gluttonous = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = gluttonous
localization = trait_gluttonous
}
send_option = {
is_shown = {
scope:actor = { has_trait = temperate }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = temperate
trait:temperate = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = temperate
localization = trait_temperate
}
send_option = {
is_shown = {
scope:actor = { has_trait = greedy }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = greedy
trait:greedy = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = greedy
localization = trait_greedy
}
send_option = {
is_shown = {
scope:actor = { has_trait = generous }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = generous
trait:generous = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = generous
localization = trait_generous
}
send_option = {
is_shown = {
scope:actor = { has_trait = lazy }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = lazy
trait:lazy = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = lazy
localization = trait_lazy
}
send_option = {
is_shown = {
scope:actor = { has_trait = diligent }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = diligent
trait:diligent = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = diligent
localization = trait_diligent
}
send_option = {
is_shown = {
scope:actor = { has_trait = wrathful }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = wrathful
trait:wrathful = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = wrathful
localization = trait_wrathful
}
send_option = {
is_shown = {
scope:actor = { has_trait = calm }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = calm
trait:calm = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = calm
localization = trait_calm
}
send_option = {
is_shown = {
scope:actor = { has_trait = patient }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = patient
trait:patient = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = patient
localization = trait_patient
}
send_option = {
is_shown = {
scope:actor = { has_trait = impatient }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = impatient
trait:impatient = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = impatient
localization = trait_impatient
}
send_option = {
is_shown = {
scope:actor = { has_trait = arrogant }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = arrogant
trait:arrogant = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = arrogant
localization = trait_arrogant
}
send_option = {
is_shown = {
scope:actor = { has_trait = humble }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = humble
trait:humble = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = humble
localization = trait_humble
}
send_option = {
is_shown = {
scope:actor = { has_trait = deceitful }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = deceitful
trait:deceitful = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = deceitful
localization = trait_deceitful
}
send_option = {
is_shown = {
scope:actor = { has_trait = honest }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = honest
trait:honest = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = honest
localization = trait_honest
}
send_option = {
is_shown = {
scope:actor = { has_trait = craven }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = craven
trait:craven = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = craven
localization = trait_craven
}
send_option = {
is_shown = {
scope:actor = { has_trait = brave }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = brave
trait:brave = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = brave
localization = trait_brave
}
send_option = {
is_shown = {
scope:actor = { has_trait = shy }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = shy
trait:shy = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = shy
localization = trait_shy
}
send_option = {
is_shown = {
scope:actor = { has_trait = gregarious }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = gregarious
trait:gregarious = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = gregarious
localization = trait_gregarious
}
send_option = {
is_shown = {
scope:actor = { has_trait = ambitious }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = ambitious
trait:ambitious = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = ambitious
localization = trait_ambitious
}
send_option = {
is_shown = {
scope:actor = { has_trait = content }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = content
trait:content = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = content
localization = trait_content
}
send_option = {
is_shown = {
scope:actor = { has_trait = arbitrary }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = arbitrary
trait:arbitrary = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = arbitrary
localization = trait_arbitrary
}
send_option = {
is_shown = {
scope:actor = { has_trait = just }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = just
trait:just = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = just
localization = trait_just
}
send_option = {
is_shown = {
scope:actor = { has_trait = cynical }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = cynical
trait:cynical = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = cynical
localization = trait_cynical
}
send_option = {
is_shown = {
scope:actor = { has_trait = zealous }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = zealous
trait:zealous = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = zealous
localization = trait_zealous
}
send_option = {
is_shown = {
scope:actor = { has_trait = paranoid }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = paranoid
trait:paranoid = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = paranoid
localization = trait_paranoid
}
send_option = {
is_shown = {
scope:actor = { has_trait = trusting }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = trusting
trait:trusting = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = trusting
localization = trait_trusting
}
send_option = {
is_shown = {
scope:actor = { has_trait = compassionate }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = compassionate
trait:compassionate = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = compassionate
localization = trait_compassionate
}
send_option = {
is_shown = {
scope:actor = { has_trait = callous }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = callous
trait:callous = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = callous
localization = trait_callous
}
send_option = {
is_shown = {
scope:actor = { has_trait = sadistic }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = sadistic
trait:sadistic = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = sadistic
localization = trait_sadistic
}
send_option = {
is_shown = {
scope:actor = { has_trait = stubborn }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = stubborn
trait:stubborn = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = stubborn
localization = trait_stubborn
}
send_option = {
is_shown = {
scope:actor = { has_trait = fickle }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = fickle
trait:fickle = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = fickle
localization = trait_fickle
}
send_option = {
is_shown = {
scope:actor = { has_trait = eccentric }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = eccentric
trait:eccentric = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = eccentric
localization = trait_eccentric
}
send_option = {
is_shown = {
scope:actor = { has_trait = vengeful }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = vengeful
trait:vengeful = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = vengeful
localization = trait_vengeful
}
send_option = {
is_shown = {
scope:actor = { has_trait = forgiving }
}
is_valid = {
scope:recipient = {
NOR = {
has_trait = forgiving
trait:forgiving = {
any_opposite_trait = {
scope:recipient = { has_trait = prev }
}
}
}
}
}
flag = forgiving
localization = trait_forgiving
}
send_options_exclusive = yes
on_send = {
switch = {#save which trait was chosen as scope:target_trait
trigger = yes
scope:lustful = {
trait:lustful = { save_scope_as = target_trait }
}
scope:chaste = {
trait:chaste = { save_scope_as = target_trait }
}
scope:gluttonous = {
trait:gluttonous = { save_scope_as = target_trait }
}
scope:temperate = {
trait:temperate = { save_scope_as = target_trait }
}
scope:greedy = {
trait:greedy = { save_scope_as = target_trait }
}
scope:generous = {
trait:generous = { save_scope_as = target_trait }
}
scope:lazy = {
trait:lazy = { save_scope_as = target_trait }
}
scope:diligent = {
trait:diligent = { save_scope_as = target_trait }
}
scope:wrathful = {
trait:wrathful = { save_scope_as = target_trait }
}
scope:calm = {
trait:calm = { save_scope_as = target_trait }
}
scope:patient = {
trait:patient = { save_scope_as = target_trait }
}
scope:impatient = {
trait:impatient = { save_scope_as = target_trait }
}
scope:arrogant = {
trait:arrogant = { save_scope_as = target_trait }
}
scope:humble = {
trait:humble = { save_scope_as = target_trait }
}
scope:deceitful = {
trait:deceitful = { save_scope_as = target_trait }
}
scope:honest = {
trait:honest = { save_scope_as = target_trait }
}
scope:craven = {
trait:craven = { save_scope_as = target_trait }
}
scope:brave = {
trait:brave = { save_scope_as = target_trait }
}
scope:shy = {
trait:shy = { save_scope_as = target_trait }
}
scope:gregarious = {
trait:gregarious = { save_scope_as = target_trait }
}
scope:ambitious = {
trait:ambitious = { save_scope_as = target_trait }
}
scope:content = {
trait:content = { save_scope_as = target_trait }
}
scope:arbitrary = {
trait:arbitrary = { save_scope_as = target_trait }
}
scope:just = {
trait:just = { save_scope_as = target_trait }
}
scope:cynical = {
trait:cynical = { save_scope_as = target_trait }
}
scope:zealous = {
trait:zealous = { save_scope_as = target_trait }
}
scope:paranoid = {
trait:paranoid = { save_scope_as = target_trait }
}
scope:trusting = {
trait:trusting = { save_scope_as = target_trait }
}
scope:compassionate = {
trait:compassionate = { save_scope_as = target_trait }
}
scope:callous = {
trait:callous = { save_scope_as = target_trait }
}
scope:sadistic = {
trait:sadistic = { save_scope_as = target_trait }
}
scope:stubborn = {
trait:stubborn = { save_scope_as = target_trait }
}
scope:fickle = {
trait:fickle = { save_scope_as = target_trait }
}
scope:eccentric = {
trait:eccentric = { save_scope_as = target_trait }
}
scope:vengeful = {
trait:vengeful = { save_scope_as = target_trait }
}
scope:forgiving = {
trait:forgiving = { save_scope_as = target_trait }
}
fallback = {
scope:actor = {
random_character_trait = {
limit = { has_trait_category = personality }
save_scope_as = target_trait
}
}
}
}
}
on_accept = {
scope:actor = {
# Trait you're trying to make your ward gained is saved as scope:target_trait
trigger_event = bp2_character_interaction.1001
show_as_tooltip = {
add_prestige = minor_prestige_loss
add_stress = minor_stress_gain
add_opinion = {
target = scope:recipient
modifier = pleased_opinion
opinion = 20
}
}
}
scope:recipient = {
show_as_tooltip = {
switch = {#save which trait was chosen as scope:target_trait
trigger = yes
scope:lustful = {
trait:lustful = { save_scope_as = target_trait }
}
scope:chaste = {
trait:chaste = { save_scope_as = target_trait }
}
scope:gluttonous = {
trait:gluttonous = { save_scope_as = target_trait }
}
scope:temperate = {
trait:temperate = { save_scope_as = target_trait }
}
scope:greedy = {
trait:greedy = { save_scope_as = target_trait }
}
scope:generous = {
trait:generous = { save_scope_as = target_trait }
}
scope:lazy = {
trait:lazy = { save_scope_as = target_trait }
}
scope:diligent = {
trait:diligent = { save_scope_as = target_trait }
}
scope:wrathful = {
trait:wrathful = { save_scope_as = target_trait }
}
scope:calm = {
trait:calm = { save_scope_as = target_trait }
}
scope:patient = {
trait:patient = { save_scope_as = target_trait }
}
scope:impatient = {
trait:impatient = { save_scope_as = target_trait }
}
scope:arrogant = {
trait:arrogant = { save_scope_as = target_trait }
}
scope:humble = {
trait:humble = { save_scope_as = target_trait }
}
scope:deceitful = {
trait:deceitful = { save_scope_as = target_trait }
}
scope:honest = {
trait:honest = { save_scope_as = target_trait }
}
scope:craven = {
trait:craven = { save_scope_as = target_trait }
}
scope:brave = {
trait:brave = { save_scope_as = target_trait }
}
scope:shy = {
trait:shy = { save_scope_as = target_trait }
}
scope:gregarious = {
trait:gregarious = { save_scope_as = target_trait }
}
scope:ambitious = {
trait:ambitious = { save_scope_as = target_trait }
}
scope:content = {
trait:content = { save_scope_as = target_trait }
}
scope:arbitrary = {
trait:arbitrary = { save_scope_as = target_trait }
}
scope:just = {
trait:just = { save_scope_as = target_trait }
}
scope:cynical = {
trait:cynical = { save_scope_as = target_trait }
}
scope:zealous = {
trait:zealous = { save_scope_as = target_trait }
}
scope:paranoid = {
trait:paranoid = { save_scope_as = target_trait }
}
scope:trusting = {
trait:trusting = { save_scope_as = target_trait }
}
scope:compassionate = {
trait:compassionate = { save_scope_as = target_trait }
}
scope:callous = {
trait:callous = { save_scope_as = target_trait }
}
scope:sadistic = {
trait:sadistic = { save_scope_as = target_trait }
}
scope:stubborn = {
trait:stubborn = { save_scope_as = target_trait }
}
scope:fickle = {
trait:fickle = { save_scope_as = target_trait }
}
scope:eccentric = {
trait:eccentric = { save_scope_as = target_trait }
}
scope:vengeful = {
trait:vengeful = { save_scope_as = target_trait }
}
scope:forgiving = {
trait:forgiving = { save_scope_as = target_trait }
}
}
if = {
limit = { exists = scope:target_trait }
add_trait = scope:target_trait
}
add_opinion = {
target = scope:actor
modifier = admiration_opinion
opinion = 20
}
}
}
}
on_decline = {
scope:actor = {
# Trait you're trying to make your ward gained is saved as scope:target_trait
trigger_event = bp2_character_interaction.1002
show_as_tooltip = {
add_prestige = minor_prestige_loss
add_stress = medium_stress_gain
add_opinion = {
target = scope:recipient
modifier = disappointed_opinion
opinion = -20
}
}
}
scope:recipient = {
show_as_tooltip = {
add_opinion = {
target = scope:actor
modifier = confused_opinion
opinion = -20
}
}
}
}
auto_accept = no
ai_accept = {
base = 0 # Try to make it 0 for most interactions
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
modifier = { # Perk boost
desc = influence_children_groomed_to_rule_perk_tt
trigger = {
scope:actor = { has_perk = groomed_to_rule_perk }
}
add = groomed_to_rule_value
}
modifier = { #more likely if you already have something in common
add = {
value = 5
if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:recipient
value = 2
}
}
multiply = 2
}
else_if = {
limit = {
number_of_personality_traits_in_common = {
target = scope:recipient
value = 3
}
}
multiply = 3
}
}
number_of_personality_traits_in_common = {
target = scope:recipient
value >= 1
}
desc = we_are_alike_tt
}
modifier = { #less likely if you already have opposite traits
add = {
value = -5
if = {
limit = {
scope:recipient = {
number_of_opposing_personality_traits = {
target = scope:actor
value = 2
}
}
}
multiply = 2
}
else_if = {
limit = {
scope:recipient = {
number_of_opposing_personality_traits = {
target = scope:actor
value = 3
}
}
}
multiply = 3
}
}
scope:recipient = {
number_of_opposing_personality_traits = {
target = scope:actor
value >= 1
}
}
desc = we_are_NOT_alike_tt
}
modifier = { #adding your knowledge
add = {
value = scope:actor.learning
multiply = 0.5
}
desc = HAS_LEARNING_SKILL_REASON
}
modifier = { #adding your oratory skills
add = {
value = scope:actor.diplomacy
multiply = 0.5
}
desc = HAS_DIPLOMACY_SKILL_REASON
}
modifier = { #more likely with a Wet Nurse employed
exists = scope:actor.court_position:wet_nurse_court_position
add = 10
desc = HAS_WET_NURSE_REASON
}
modifier = { #more likely if chosen trait is a virtue in recipients faith
add = 10
switch = {
trigger = yes
scope:sadistic = {
scope:recipient.faith = {
trait_is_virtue = trait:sadistic
}
}
scope:lustful = {
scope:recipient.faith = {
trait_is_virtue = trait:lustful
}
}
scope:chaste = {
scope:recipient.faith = {
trait_is_virtue = trait:chaste
}
}
scope:gluttonous = {
scope:recipient.faith = {
trait_is_virtue = trait:gluttonous
}
}
scope:temperate = {
scope:recipient.faith = {
trait_is_virtue = trait:temperate
}
}
scope:greedy = {
scope:recipient.faith = {
trait_is_virtue = trait:greedy
}
}
scope:generous = {
scope:recipient.faith = {
trait_is_virtue = trait:generous
}
}
scope:lazy = {
scope:recipient.faith = {
trait_is_virtue = trait:lazy
}
}
scope:diligent = {
scope:recipient.faith = {
trait_is_virtue = trait:diligent
}
}
scope:wrathful = {
scope:recipient.faith = {
trait_is_virtue = trait:wrathful
}
}
scope:calm = {
scope:recipient.faith = {
trait_is_virtue = trait:calm
}
}
scope:patient = {
scope:recipient.faith = {
trait_is_virtue = trait:patient
}
}
scope:impatient = {
scope:recipient.faith = {
trait_is_virtue = trait:impatient
}
}
scope:arrogant = {
scope:recipient.faith = {
trait_is_virtue = trait:arrogant
}
}
scope:humble = {
scope:recipient.faith = {
trait_is_virtue = trait:humble
}
}
scope:deceitful = {
scope:recipient.faith = {
trait_is_virtue = trait:deceitful
}
}
scope:honest = {
scope:recipient.faith = {
trait_is_virtue = trait:honest
}
}
scope:craven = {
scope:recipient.faith = {
trait_is_virtue = trait:craven
}
}
scope:brave = {
scope:recipient.faith = {
trait_is_virtue = trait:brave
}
}
scope:shy = {
scope:recipient.faith = {
trait_is_virtue = trait:shy
}
}
scope:gregarious = {
scope:recipient.faith = {
trait_is_virtue = trait:gregarious
}
}
scope:ambitious = {
scope:recipient.faith = {
trait_is_virtue = trait:ambitious
}
}
scope:content = {
scope:recipient.faith = {
trait_is_virtue = trait:content
}
}
scope:arbitrary = {
scope:recipient.faith = {
trait_is_virtue = trait:arbitrary
}
}
scope:just = {
scope:recipient.faith = {
trait_is_virtue = trait:just
}
}
scope:cynical = {
scope:recipient.faith = {
trait_is_virtue = trait:cynical
}
}
scope:zealous = {
scope:recipient.faith = {
trait_is_virtue = trait:zealous
}
}
scope:paranoid = {
scope:recipient.faith = {
trait_is_virtue = trait:paranoid
}
}
scope:trusting = {
scope:recipient.faith = {
trait_is_virtue = trait:trusting
}
}
scope:compassionate = {
scope:recipient.faith = {
trait_is_virtue = trait:compassionate
}
}
scope:callous = {
scope:recipient.faith = {
trait_is_virtue = trait:callous
}
}
scope:stubborn = {
scope:recipient.faith = {
trait_is_virtue = trait:stubborn
}
}
scope:fickle = {
scope:recipient.faith = {
trait_is_virtue = trait:fickle
}
}
scope:eccentric = {
scope:recipient.faith = {
trait_is_virtue = trait:eccentric
}
}
scope:vengeful = {
scope:recipient.faith = {
trait_is_virtue = trait:vengeful
}
}
scope:forgiving = {
scope:recipient.faith = {
trait_is_virtue = trait:forgiving
}
}
}
desc = selected_virtuous_trait_tt
}
modifier = { #more likely if chosen trait is compatible with recipients childhood personality
add = 15
switch = {
trigger = yes
scope:sadistic = {
scope:recipient = {
OR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:lustful = {
scope:recipient = {
OR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:chaste = {
scope:recipient = {
has_trait = pensive
}
}
scope:gluttonous = {
scope:recipient = {
OR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:temperate = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:greedy = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:generous = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = curious
}
}
}
scope:lazy = {
scope:recipient = {
has_trait = rowdy
}
}
scope:diligent = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = curious
}
}
}
scope:wrathful = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:calm = {
scope:recipient = {
has_trait = pensive
}
}
scope:patient = {
scope:recipient = {
has_trait = pensive
}
}
scope:impatient = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:arrogant = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:humble = {
scope:recipient = {
has_trait = pensive
}
}
scope:deceitful = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = charming
}
}
}
scope:honest = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = rowdy
}
}
}
scope:craven = {
scope:recipient = {
has_trait = pensive
}
}
scope:brave = {
scope:recipient = {
OR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:shy = {
scope:recipient = {
has_trait = pensive
}
}
scope:gregarious = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = curious
}
}
}
scope:ambitious = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = curious
}
}
}
scope:content = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:arbitrary = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:just = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:cynical = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = pensive
}
}
}
scope:zealous = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = curious
}
}
}
scope:paranoid = {
scope:recipient = {
OR = {
has_trait = pensive
has_trait = rowdy
}
}
}
scope:trusting = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = curious
}
}
}
scope:compassionate = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = pensive
}
}
}
scope:callous = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:stubborn = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = curious
}
}
}
scope:fickle = {
scope:recipient = {
OR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:eccentric = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = charming
has_trait = curious
}
}
}
scope:vengeful = {
scope:recipient = {
OR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:forgiving = {
scope:recipient = {
OR = {
has_trait = charming
has_trait = curious
}
}
}
}
desc = has_compatible_personality_tt
}
modifier = { #less likely if chosen trait is incompatible with recipients childhood personality
add = -15
switch = {
trigger = yes
scope:sadistic = {
scope:recipient = {
NOR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:lustful = {
scope:recipient = {
NOR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:chaste = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:gluttonous = {
scope:recipient = {
NOR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:temperate = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:greedy = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:generous = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = curious
}
}
}
scope:lazy = {
scope:recipient = {
NOT = { has_trait = rowdy }
}
}
scope:diligent = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = curious
}
}
}
scope:wrathful = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:calm = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:patient = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:impatient = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:arrogant = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:humble = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:deceitful = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = charming
}
}
}
scope:honest = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = rowdy
}
}
}
scope:craven = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:brave = {
scope:recipient = {
NOR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:shy = {
scope:recipient = {
NOT = { has_trait = pensive }
}
}
scope:gregarious = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = curious
}
}
}
scope:ambitious = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = curious
}
}
}
scope:content = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:arbitrary = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:just = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = charming
}
}
}
scope:cynical = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = pensive
}
}
}
scope:zealous = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = curious
}
}
}
scope:paranoid = {
scope:recipient = {
NOR = {
has_trait = pensive
has_trait = rowdy
}
}
}
scope:trusting = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = curious
}
}
}
scope:compassionate = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = pensive
}
}
}
scope:callous = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:stubborn = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = curious
}
}
}
scope:fickle = {
scope:recipient = {
NOR = {
has_trait = curious
has_trait = rowdy
}
}
}
scope:eccentric = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = charming
has_trait = curious
}
}
}
scope:vengeful = {
scope:recipient = {
NOR = {
has_trait = bossy
has_trait = rowdy
}
}
}
scope:forgiving = {
scope:recipient = {
NOR = {
has_trait = charming
has_trait = curious
}
}
}
}
desc = has_incompatible_personality_tt
}
modifier = { #less likely if chosen trait is a sin in recipients faith
add = -10
switch = {
trigger = yes
scope:sadistic = {
scope:recipient.faith = {
trait_is_sin = trait:sadistic
}
}
scope:lustful = {
scope:recipient.faith = {
trait_is_sin = trait:lustful
}
}
scope:chaste = {
scope:recipient.faith = {
trait_is_sin = trait:chaste
}
}
scope:gluttonous = {
scope:recipient.faith = {
trait_is_sin = trait:gluttonous
}
}
scope:temperate = {
scope:recipient.faith = {
trait_is_sin = trait:temperate
}
}
scope:greedy = {
scope:recipient.faith = {
trait_is_sin = trait:greedy
}
}
scope:generous = {
scope:recipient.faith = {
trait_is_sin = trait:generous
}
}
scope:lazy = {
scope:recipient.faith = {
trait_is_sin = trait:lazy
}
}
scope:diligent = {
scope:recipient.faith = {
trait_is_sin = trait:diligent
}
}
scope:wrathful = {
scope:recipient.faith = {
trait_is_sin = trait:wrathful
}
}
scope:calm = {
scope:recipient.faith = {
trait_is_sin = trait:calm
}
}
scope:patient = {
scope:recipient.faith = {
trait_is_sin = trait:patient
}
}
scope:impatient = {
scope:recipient.faith = {
trait_is_sin = trait:impatient
}
}
scope:arrogant = {
scope:recipient.faith = {
trait_is_sin = trait:arrogant
}
}
scope:humble = {
scope:recipient.faith = {
trait_is_sin = trait:humble
}
}
scope:deceitful = {
scope:recipient.faith = {
trait_is_sin = trait:deceitful
}
}
scope:honest = {
scope:recipient.faith = {
trait_is_sin = trait:honest
}
}
scope:craven = {
scope:recipient.faith = {
trait_is_sin = trait:craven
}
}
scope:brave = {
scope:recipient.faith = {
trait_is_sin = trait:brave
}
}
scope:shy = {
scope:recipient.faith = {
trait_is_sin = trait:shy
}
}
scope:gregarious = {
scope:recipient.faith = {
trait_is_sin = trait:gregarious
}
}
scope:ambitious = {
scope:recipient.faith = {
trait_is_sin = trait:ambitious
}
}
scope:content = {
scope:recipient.faith = {
trait_is_sin = trait:content
}
}
scope:arbitrary = {
scope:recipient.faith = {
trait_is_sin = trait:arbitrary
}
}
scope:just = {
scope:recipient.faith = {
trait_is_sin = trait:just
}
}
scope:cynical = {
scope:recipient.faith = {
trait_is_sin = trait:cynical
}
}
scope:zealous = {
scope:recipient.faith = {
trait_is_sin = trait:zealous
}
}
scope:paranoid = {
scope:recipient.faith = {
trait_is_sin = trait:paranoid
}
}
scope:trusting = {
scope:recipient.faith = {
trait_is_sin = trait:trusting
}
}
scope:compassionate = {
scope:recipient.faith = {
trait_is_sin = trait:compassionate
}
}
scope:callous = {
scope:recipient.faith = {
trait_is_sin = trait:callous
}
}
scope:stubborn = {
scope:recipient.faith = {
trait_is_sin = trait:stubborn
}
}
scope:fickle = {
scope:recipient.faith = {
trait_is_sin = trait:fickle
}
}
scope:eccentric = {
scope:recipient.faith = {
trait_is_sin = trait:eccentric
}
}
scope:vengeful = {
scope:recipient.faith = {
trait_is_sin = trait:vengeful
}
}
scope:forgiving = {
scope:recipient.faith = {
trait_is_sin = trait:forgiving
}
}
}
desc = selected_sinful_trait_tt
}
modifier = { #more likely if actor is afraid of you
add = intimidated_halved_reason_value
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = { #more likely if actor is afraid of you
add = cowed_halved_reason_value
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
modifier = { #less likely if actor already has 3 personality traits
add = -50
scope:recipient = {
number_of_personality_traits = 3
}
desc = has_three_traits_already
}
}
# AI
ai_potential = {
any_relation = { type = ward }
}
ai_frequency_by_tier = {
barony = 0
county = 36
duchy = 12
kingdom = 12
empire = 12
hegemony = 12
}
ai_targets = {
ai_recipients = courtiers
}
ai_will_do = {
base = -100
modifier = { # If the recipient is a player, do not bother sending
factor = 0
scope:recipient = {
is_ai = no
}
}
modifier = { #we don't want characters running around with 4 traits
add = -100
scope:recipient = {
number_of_personality_traits = 3
}
}
modifier = {
add = 50
ai_honor > 0
}
modifier = {
add = 50
ai_compassion > 0
}
modifier = {
add = 50
ai_sociability > 0
}
modifier = {
add = 50
ai_boldness > 0
}
modifier = {
add = 50
scope:paranoid = yes
}
}
}