N3OW/common/character_interactions/00_prison_interactions.txt
2025-02-20 11:52:45 +00:00

7534 lines
171 KiB
Text

imprison_interaction = {
interface_priority = 120
common_interaction = yes
icon = prison
category = interaction_category_hostile
highlighted_reason = HIGHLIGHTED_HAS_IMPRISONMENT_REASON
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
desc = imprison_interaction_desc
greeting = negative
notification_text = REQUEST_ARREST_NOTIFICATION_TEXT
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
on_decline_summary = {
triggered_desc = {
trigger = {
scope:recipient = {
NAND = {
is_landless_adventurer = yes
reverse_has_opinion_modifier = {
target = scope:actor
modifier = eviction_ignored_opinion
}
}
}
}
desc = imprison_decline_summary
}
}
ai_potential = {
NOT = { has_realm_law_flag = cannot_imprison }
is_imprisoned = no
}
is_shown = {
NOT = { scope:actor = scope:recipient }
scope:actor = {
basic_allowed_to_imprison_character_trigger = {
CHARACTER = scope:recipient
}
}
# Scope:recipient can't be visiting elsewhere.
trigger_if = {
limit = {
scope:recipient = { is_courtier_of = scope:actor }
}
NOT = {
scope:recipient.host = {
any_foreign_court_guest = { this = scope:recipient }
}
}
}
}
is_valid_showing_failures_only = {
scope:actor = {
allowed_to_imprison_character_trigger = { CHARACTER = scope:recipient }
}
imprison_neutral_is_valid_showing_failures_only_triggers_trigger = yes
custom_tooltip = {
text = cannot_take_overt_hostile_actions_against_diarch.tt
NOT = { scope:recipient ?= scope:actor.diarch }
}
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
scope:recipient = {
trigger_if = {
limit = {
is_landless_adventurer = yes
reverse_has_opinion_modifier = {
target = scope:actor
modifier = eviction_ignored_opinion
}
}
is_travelling = no
}
}
}
is_highlighted = {
scope:recipient = {
is_imprisoned = no
}
scope:actor = {
has_imprisonment_reason = scope:recipient
}
}
#Use hook
send_option = {
is_valid = {
exists = scope:recipient
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
cost = {
# Usually, this action is free, but during certain diarchies, we want it to cost.
prestige = liege_diarchy_surcharge_interaction_imprison_interaction_value
}
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_auto_accept = {
illegal_imprisonment_dread_effect = yes
imprison_court_chaplain_consequences_effect = yes
imprison_HoF_consequences_effect = yes
scope:recipient = {
if = {
limit = {
is_a_faction_member = yes
liege = scope:actor
}
joined_faction = { save_scope_as = retaliating_faction }
}
}
imprison_character_effect = {
TARGET = scope:recipient
IMPRISONER = scope:actor
}
scope:recipient = {
trigger_event = char_interaction.0233
}
scope:actor = {
trigger_event = char_interaction.0231
if = {
limit = {
has_imprisonment_reason = scope:recipient
}
stress_impact = {
compassionate = minor_stress_impact_gain
forgiving = minor_stress_impact_gain
}
}
else = {
stress_impact = {
just = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
if = {
limit = { exists = scope:retaliating_faction}
scope:retaliating_faction = {
imprisonment_retribution_start_faction_war_if_valid = yes
}
}
}
}
if = {
limit = {
scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
}
scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
}
}
on_accept = {
if = {
limit = { scope:hook = yes }
scope:actor = { use_hook = scope:recipient }
}
illegal_imprisonment_dread_effect = yes
imprison_court_chaplain_consequences_effect = yes
imprison_HoF_consequences_effect = yes
scope:recipient = {
if = {
limit = {
is_a_faction_member = yes
liege = scope:actor
}
joined_faction = { save_scope_as = retaliating_faction }
}
}
imprison_character_effect = {
TARGET = scope:recipient
IMPRISONER = scope:actor
}
# If they recently revoked your title, or asked for your excommunication, they become your rival
imprison_attempt_escalates_rivalry_effect = yes
scope:actor = {
trigger_event = char_interaction.0231
if = {
limit = {
has_imprisonment_reason = scope:recipient
}
stress_impact = {
compassionate = minor_stress_impact_gain
forgiving = minor_stress_impact_gain
}
}
else = {
stress_impact = {
just = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
if = {
limit = { exists = scope:retaliating_faction}
scope:retaliating_faction = {
imprisonment_retribution_start_faction_war_if_valid = yes
}
}
}
}
if = {
limit = {
scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
}
scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
}
# If we're a clan this interaction affects unity
if = { # If you don't have an imprisonment reason, and the target is landed, you lose more unity
limit = {
NOT = { scope:actor = { has_imprisonment_reason = scope:recipient } }
scope:recipient = { is_landed_or_landless_administrative = yes }
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else_if = { # If you don't have an imprisonment reason, and the target is unlanded, you lose slightly less unity
limit = {
NOT = { scope:actor = { has_imprisonment_reason = scope:recipient } }
scope:recipient = { is_landed_or_landless_administrative = no }
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else = { # If you have a valid reason, you lose only a tiny bit of unity (criminal or not, they are still family)
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
# Harrying logic.
scope:actor = {
if = {
limit = {
character_is_valid_for_harrying_of_the_north_trigger = yes
scope:recipient = {
character_is_valid_for_harrying_of_the_north_trigger = yes
is_important_or_vip_struggle_character = yes
}
culture != scope:recipient.culture
}
global_var:harrying_of_the_north = { save_scope_as = story }
if = {
limit = {
character_is_valid_norman_for_harrying_of_the_north_trigger = yes
scope:recipient = { character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = yes }
}
ep3_increase_pacification_effect = { AMOUNT = harrying_minor_increase_value }
}
else_if = {
limit = {
character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = yes
scope:recipient = { character_is_valid_norman_for_harrying_of_the_north_trigger = yes }
}
ep3_increase_resistance_effect = { AMOUNT = harrying_minor_increase_value }
}
}
}
}
on_decline = {
if = {
limit = {
scope:recipient = {
is_landless_adventurer = yes
reverse_has_opinion_modifier = {
target = scope:actor
modifier = eviction_ignored_opinion
}
}
}
scope:recipient = {
if = {
limit = { current_military_strength >= ep3_interactions_events_0500_troops_count_value }
start_war = {
cb = ep3_laamp_apprehend_adventurer_cb
target = scope:actor
}
}
else = {
# Remove them immediately.
remove_laamp_from_exiled_county_automatically_effect = {
PROVINCE = scope:recipient.location
LAAMP = scope:recipient
}
}
}
}
else = {
scope:actor = {
imprison_HoF_consequences_effect = yes
imprison_tyranny_effect = yes
}
scope:recipient = {
#If target is count or higher, start war.
if = {
limit = {
is_playable_character = yes
primary_title.tier > tier_barony
}
if = {
limit = {
is_a_faction_member = yes
liege = scope:actor
joined_faction = {
faction_target = scope:actor
NOT = { faction_is_type = populist_faction }
}
}
joined_faction = {
save_scope_as = retaliating_faction # For loc
imprisonment_retribution_start_faction_war_if_valid = yes
}
hidden_effect = {
if = {
limit = { NOT = { exists = joined_faction.faction_war } }
war_for_imprison_effect = yes
}
}
}
else = {
war_for_imprison_effect = yes
}
}
#If target is a baron or unlanded, have them escape.
else = {
if = { #To block them from being instantly rehired
limit = {
is_councillor_of = scope:actor
can_be_fired_from_council_trigger = { COURT_OWNER = scope:actor }
}
set_variable = {
name = escaped_imprisonment_from
value = scope:actor
years = 20
}
}
imprison_court_chaplain_consequences_effect = yes
if = {
limit = {
is_landed_or_landless_administrative = yes
}
depose_effect = { DEPOSER = scope:actor }
}
else_if = {
limit = {
is_hostage = yes
warden = scope:actor
}
save_scope_as = imprison_failure
save_scope_as = hostage
warden = { save_scope_as = warden }
home_court = { save_scope_as = home_court }
scope:warden = { trigger_event = bp2_hostage_system.0400 }
scope:home_court = { trigger_event = bp2_hostage_system.0401 }
return_hostage = yes
}
else_if = {
limit = {
is_landed_or_landless_administrative = no
trigger_if = {
limit = {
is_councillor = yes
}
can_be_fired_from_council_trigger = { COURT_OWNER = scope:recipient.liege }
}
trigger_if = {
limit = {
exists = scope:actor.faith.religious_head
}
NOT = { scope:actor.faith.religious_head = scope:recipient }
}
}
select_and_move_to_pool_effect = yes
}
add_opinion = {
target = scope:actor
modifier = attempted_imprisonment_opinion
}
}
}
if = {
limit = {
scope:actor = { has_realm_law_flag = vassal_refusal_is_treason }
}
scope:actor = {
add_opinion = {
target = scope:recipient
modifier = treasonous_imprison_refusal
}
}
}
}
#Remove them as guardian/ward for any courtier (feedback given in char_interaction.0230)
scope:actor = {
if = {
limit = {
any_courtier = {
has_relation_guardian = scope:recipient
}
}
every_courtier = {
limit = {
has_relation_guardian = scope:recipient
}
save_scope_as = ward
scope:recipient = { remove_relation_ward = scope:ward }
scope:ward = {
if = {
limit = {
NOT = { host = liege }
}
return_to_court = yes
}
guardian_remove_opinion_effect = {
GUARDIAN = scope:recipient
WARD = this
WARD_LIEGE = scope:actor
}
}
add_to_list = ward_children
}
}
if = {
limit = {
any_courtier = {
has_relation_ward = scope:recipient
}
}
random_courtier = {
limit = {
has_relation_ward = scope:recipient
}
save_scope_as = guardian
scope:guardian = { remove_relation_ward = scope:recipient }
scope:guardian = {
if = {
limit = {
NOT = { host = liege }
}
return_to_court = yes
}
guardian_remove_opinion_effect = {
GUARDIAN = this
WARD = scope:recipient
WARD_LIEGE = scope:actor
}
}
add_to_list = guardian_list
}
hidden_effect = {
scope:guardian = {
send_interface_message = {
type = event_childhood_neutral
title = remove_guardian_interaction_notification
left_icon = scope:recipient
right_icon = scope:guardian
remove_guardian_effect = {
GUARDIAN = scope:guardian
WARD = scope:recipient
RETURN_WARD = yes
HIDE_OPINION = no
}
}
}
}
}
}
scope:actor = {
if = {
limit = {
scope:recipient = {
OR = {
is_playable_character = no
AND = {
is_playable_character = yes
primary_title.tier = tier_barony
}
}
}
}
trigger_event = char_interaction.0230
}
}
if = {
limit = {
scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
}
scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
}
# If we're a clan this interaction affects unity
if = { # If you don't have an imprisonment reason, and the target is landed, you lose more unity
limit = {
NOT = {
scope:actor = { has_imprisonment_reason = scope:recipient }
}
scope:recipient = { is_landed_or_landless_administrative = yes }
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else_if = { # If you don't have an imprisonment reason, and the target is unlanded, you lose slightly less unity
limit = {
NOT = {
scope:actor = { has_imprisonment_reason = scope:recipient }
}
scope:recipient = { is_landed_or_landless_administrative = no }
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else = { # If you have a valid reason, you lose only a tiny bit of unity (criminal or not, they are still family)
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_imprison.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
auto_accept = no
ai_accept = {
base = 0 # Try to make it 0 for most interactions
modifier = {
add = {
value = scope:actor.intrigue
multiply = 1
}
desc = IMPRISON_INTRIGUE_ACTOR
}
modifier = {
add = {
value = scope:recipient.intrigue
multiply = -2
}
desc = IMPRISON_INTRIGUE_RECIPIENT
}
modifier = {
add = 30
scope:hook = yes
desc = SCHEME_HOOK_USED
}
opinion_modifier = { # Opinion Factor
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
ai_value_modifier = {
who = scope:recipient
ai_boldness = {
if = {
limit = {
scope:recipient = { NOT = { ai_boldness = 0 } }
}
value = -0.5
}
}
ai_honor = {
if = {
limit = {
scope:recipient = { #If AI is honorable and the law compels to obey the liege, AI will be more likely to obey.
ai_honor > 0
}
scope:actor = {
has_imprisonment_reason = scope:recipient
has_realm_law_flag = vassal_refusal_is_treason
}
}
value = 0.75
}
}
}
modifier = {
add = 20
scope:actor = {
any_vassal_or_below = { this = scope:recipient }
has_realm_law_flag = vassal_refusal_is_treason
}
desc = AI_REFUSAL_IS_TREASON
}
modifier = {
add = 50
scope:actor = {
has_perk = prison_feudal_complex_perk
}
desc = AI_PRISON_FEUDAL_COMPLEX_PERK
}
modifier = { #I am a King!
desc = offer_vassalization_interaction_aibehavior_amkingtier_tt
scope:recipient = { highest_held_title_tier = tier_kingdom }
add = -40
}
modifier = { #Courtiers.
desc = AI_REFUSAL_COURTIER
scope:recipient = { is_ruler = no }
add = 50
}
modifier = { # Your young children can't really stop you
desc = AI_REFUSAL_YOUNG_CHILD
scope:recipient = {
is_child_of = scope:actor
is_courtier_of = scope:actor
is_adult = no
}
add = 200
}
modifier = { #They're a claimant against you
desc = AI_CLAIMANT_PENALTY
scope:actor = {
OR = {
any_targeting_faction = {
faction_is_type = claimant_faction
faction_is_at_war = yes
exists = special_character
special_character = scope:recipient
}
AND = {
exists = var:claimant_faction_sent_demand
var:claimant_faction_sent_demand = scope:recipient
}
}
}
add = -70
}
modifier = { #Rank difference.
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:recipient = {
is_ruler = yes
is_landed = yes
highest_held_title_tier < tier_kingdom
}
add = {
value = -15
if = {
limit = {
scope:actor = {
tier_difference = {
target = scope:recipient
value >= 2
}
}
}
add = 5
}
if = {
limit = {
scope:actor = {
tier_difference = {
target = scope:recipient
value >= 3
}
}
}
add = 5
}
if = { #King asking Baron, modifier becomes positive.
limit = {
scope:actor = {
tier_difference = {
target = scope:recipient
value >= 4
}
}
}
add = 10
}
}
}
modifier = {
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 = {
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 = {
add = intimidated_external_reason_value
scope:recipient = {
NOT = { target_is_liege_or_above = scope:actor }
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_external_reason_value
scope:recipient = {
NOT = { target_is_liege_or_above = scope:actor }
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
modifier = { #Comparative military strength.
desc = offer_vassalization_interaction_aibehavior_power_tt
trigger = {
scope:actor = { is_ruler = yes }
scope:recipient = { is_ruler = yes }
}
add = {
value = 1
subtract = {
value = scope:recipient.current_military_strength
divide = { value = scope:actor.current_military_strength min = 1 }
}
multiply = 100
min = -1000
# This max needs to match the loc in offer_vassalization_interaction_aibehavior_power_tt
max = 20
}
}
modifier = { #Rivalry modifier.
desc = offer_vassalization_interaction_aibehavior_rival_tt
trigger = {
scope:recipient = {
has_relation_rival = scope:actor
NOT = { has_relation_nemesis = scope:actor }
}
}
add = -50
}
modifier = { #Nemesis modifier.
desc = offer_vassalization_interaction_aibehavior_nemesis_tt
trigger = {
scope:recipient = {
has_relation_nemesis = scope:actor
}
}
add = -100
}
modifier = {
add = 10
scope:actor = {
has_royal_court = yes
has_dlc_feature = royal_court
is_liege_or_above_of = scope:recipient
court_grandeur_current_level >= 7
court_grandeur_current_level < 9
}
desc = GRANDEUR_REASON
}
modifier = {
add = 20
scope:actor = {
has_royal_court = yes
has_dlc_feature = royal_court
is_liege_or_above_of = scope:recipient
court_grandeur_current_level >= 9
}
desc = GRANDEUR_REASON
}
modifier = { # Legalistic tradition
desc = tradition_legalistic_name
scope:actor = {
has_imprisonment_reason = scope:recipient
culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
}
add = legalistic_vassal_punishment_acceptance
}
modifier = { # AI Mongols, tyranny wars just delay the inevitable fun!
scope:actor = {
is_ai = yes
OR = {
has_trait = greatest_of_khans
has_character_modifier = the_great_khan_modifier
}
}
scope:recipient = {
is_ai = yes
}
add = 500
}
# Thug accolade increases imprison chance because they scary
modifier = {
scope:actor = {
any_active_accolade = {
has_accolade_parameter = accolade_imprisonment_chance
}
}
desc = THUG_REASON
add = accolade_imprisonment_chance_value
}
modifier = {
scope:actor = {
any_active_accolade = {
has_accolade_parameter = accolade_imprisonment_chance_high
}
}
desc = THUG_REASON_HIGH
add = accolade_imprisonment_chance_value_high
}
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
modifier = {
add = -25
scope:recipient = {
culture = { has_cultural_parameter = vassals_more_likely_to_refuse_demands }
}
desc = VASSALS_REFUSAL_indomitable_azatani
}
}
# AI
ai_targets = {
ai_recipients = vassals
chance = 0.5
}
ai_targets = {
ai_recipients = courtiers
chance = 0.25
}
ai_frequency = 10
ai_will_do = {
base = -100
modifier = { # Make sure the AI uses hooks for this as it's % based
scope:hook = yes
add = 1
}
modifier = {
add = 200
scope:actor = {
has_imprisonment_reason = scope:recipient
}
}
modifier = { # Avoid Tyranny wars at inopportune times
add = -190
scope:actor = {
ai_rationality > -100 # Lunatics can do whatever, let the world burn...
is_at_war = yes
}
scope:recipient = {
is_playable_character = yes
}
}
modifier = { # Avoid imprisonments in certain circumstances
add = -190
scope:actor = {
ai_rationality > -100 # Lunatics can do whatever, let the world burn...
NOR = {
AND = {
intrigue > scope:recipient.intrigue
intrigue >= 12
}
has_perk = prison_feudal_complex_perk
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level >= 1
}
}
culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
current_military_strength >= scope:recipient.twice_current_military_strength
scope:recipient.ai_boldness <= -100
}
}
scope:recipient = {
is_playable_character = yes
}
}
modifier = { # If the AI is not very bold, avoid imprisoning people unless you're more powerful
add = -190
scope:actor.ai_rationality > -100 # Lunatics can do whatever, let the world burn...
scope:actor.ai_boldness <= 25
scope:actor.current_military_strength < scope:recipient.one_and_a_half_times_current_military_strength
}
modifier = { # Avoid imprisoning people that would destroy you
add = -190
scope:actor.ai_rationality > -100 # Lunatics can do whatever, let the world burn...
scope:actor.current_military_strength < scope:recipient.current_military_strength
}
modifier = { # Do not imprison when the chance of success if exceedingly low
add = -190
scope:actor.ai_rationality > -100 # Lunatics can do whatever, let the world burn...
scope:recipient = {
is_playable_character = yes
}
NOT = {
scope:recipient = {
highest_held_title_tier = tier_barony
}
}
scope:actor = {
gold < minimum_ai_gold_value_for_tyranny_wars
}
}
modifier = { # Don't imprison people you like
scope:actor = {
NOT = {
has_trait = sadistic
}
OR = {
has_secret_relation_lover = scope:recipient
has_relation_lover = scope:recipient
has_relation_soulmate = scope:recipient
has_relation_friend = scope:recipient
has_relation_best_friend = scope:recipient
opinion = {
target = scope:recipient
value > very_high_positive_opinion
}
}
}
add = -1000
}
modifier = { # Don't imprison your own children... unless they're your rival/nemesis
scope:recipient = {
is_child_of = scope:actor
NOR = {
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
}
}
add = -1000
}
modifier = { # Don't imprison your spouse, unless they're your rival/have cheated on you
scope:recipient = {
is_spouse_of = scope:actor
NOR = {
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
}
add = -1000
}
modifier = { # Try to avoid pointless imprisonments
scope:recipient = {
NOR = {
scope:actor = { # Sadists want people to torture
has_trait = sadistic
}
AND = { # Imprisoning vassals you have revoke reasons on is relevant
is_playable_character = yes
scope:actor = { has_revoke_title_reason = scope:recipient }
}
is_a_faction_member = yes
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
scope:actor = { # Scheme Agents should be imprisoned indiscriminately
any_targeting_scheme = {
hostile_scheme_trigger = yes
is_scheme_agent_exposed = scope:recipient
}
}
AND = { # Zealots will imprison characters of other faiths
scope:actor.ai_zeal >= medium_positive_ai_value
NOT = { scope:actor.faith = scope:recipient.faith }
}
scope:actor = {
has_opinion_modifier = {
modifier = murdered_close_family_crime
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = attempted_murder_close_family_crime
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = executed_close_family
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = slept_with_spouse_discovered_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = slept_with_spouse_exposed_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = unfaithful_spouse_discovered_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = unfaithful_spouse_exposed_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = refused_to_renounce_lover_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = betrayed_our_promise
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = botched_my_treatment_crime_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = botched_treatment_of_kin_crime_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = smeared_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = insulted_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = mocked_me_in_time_of_need
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = loved_one_dungeon_death
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = abandoned_me_opinion
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = reason_child_died
target = scope:recipient
}
}
scope:actor = {
has_opinion_modifier = {
modifier = falsely_accused
target = scope:recipient
}
}
}
}
add = -1000
}
modifier = {
exists = scope:recipient.primary_title
add = scope:recipient.primary_title.tier
}
# Agenda impact
modifier = {
scope:recipient = {
is_important_or_vip_struggle_character = yes
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_important
}
has_character_flag = agenda_towards_escalation
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_important
}
}
}
add = -100
}
}
}
modifier = {
scope:recipient = {
has_trait = fp3_struggle_supporter
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_supporter
}
has_trait = fp3_struggle_detractor
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_supporter
}
}
}
add = -100
}
}
}
modifier = {
scope:recipient = {
has_trait = fp3_struggle_detractor
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_detractor
}
has_trait = fp3_struggle_supporter
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_imprison_detractor
}
}
}
add = -100
}
}
}
modifier = { # Avoid triggering Tyranny wars mid-grand activity
factor = 0
scope:actor = {
has_ongoing_grand_activity_trigger = yes
}
scope:recipient = {
highest_held_title_tier >= tier_county
}
}
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
}
}
move_to_dungeon_interaction = {
interface_priority = 30
category = interaction_category_prison
desc = move_to_dungeon_interaction_desc
icon = prison
is_shown = {
scope:actor = {
is_landless_ruler = no
}
scope:recipient = {
is_imprisoned_by = scope:actor
is_in_prison_type = house_arrest
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes }
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
}
on_accept = {
if = {
limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } }
scope:recipient = { remove_character_modifier = allowed_to_go_outside }
}
scope:recipient = {
hidden_effect = {
change_prison_type = dungeon
}
trigger_event = prison_notification.1001
custom_tooltip = MOVE_PRISONER_TO_DUNGEON
scope:recipient = {
every_close_or_extended_family_member = {
custom = all_family_members
limit = {
NOT = { scope:actor = this }
}
add_opinion = {
modifier = family_moved_to_dungeon_opinion
target = scope:actor
}
}
}
}
scope:actor = {
stress_impact = {
compassionate = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
}
hidden_effect = {
send_interface_message = {
type = event_prison_neutral
title = msg_move_prisoner_to_dungeon
right_icon = scope:recipient
custom_tooltip = MOVE_PRISONER_TO_DUNGEON
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_move_to_dungeon.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
# AI
ai_targets = {
ai_recipients = prisoners
}
ai_frequency = 12
ai_potential = {
always = yes
}
ai_will_do = {
base = 0
modifier = {
add = 100
scope:actor.ai_compassion < medium_positive_ai_value
scope:actor = {
opinion = {
target = scope:recipient
value <= high_negative_opinion
}
}
}
modifier = { # Family Feud
add = 25
trigger = {
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
}
desc = INTERACTION_FAMILY_FEUD_REASON
}
}
}
move_to_house_arrest_interaction = {
interface_priority = 30
category = interaction_category_prison
desc = move_to_house_arrest_interaction_desc
icon = prison
is_shown = {
scope:actor = {
is_landless_ruler = no
}
scope:recipient = {
is_imprisoned_by = scope:actor
is_in_prison_type = dungeon
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes }
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
}
on_accept = {
if = {
limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } }
scope:recipient = { remove_character_modifier = allowed_to_go_outside }
}
if = {
limit = { scope:recipient = { has_character_modifier = moldy_gruel_diet } }
scope:recipient = { remove_character_modifier = moldy_gruel_diet }
}
scope:recipient = {
hidden_effect = {
change_prison_type = house_arrest
trigger_event = prison_notification.1002
}
custom_tooltip = MOVE_PRISONER_TO_HOUSE_ARREST
scope:recipient = {
every_close_or_extended_family_member = {
custom = all_family_members
limit = {
NOT = { scope:actor = this }
}
add_opinion = {
modifier = moved_to_house_arrest_opinion
target = scope:actor
}
}
}
}
scope:actor = {
stress_impact = {
sadistic = medium_stress_impact_gain
vengeful = medium_stress_impact_gain
}
hidden_effect = {
send_interface_message = {
type = event_prison_neutral
title = msg_move_prisoner_to_house_arrest
right_icon = scope:recipient
custom_tooltip = MOVE_PRISONER_TO_HOUSE_ARREST
}
}
}
}
auto_accept = yes
}
ransom_interaction = {
interface_priority = 50
common_interaction = yes
use_diplomatic_range = no
category = interaction_category_prison
special_interaction = ransom_interaction
icon = icon_gold
redirect = {
scope:recipient = {
save_scope_as = secondary_recipient
if = {
limit = {
is_ruler = no
exists = liege
}
liege = {
save_scope_as = recipient
}
}
}
}
desc = ransom_interaction_desc
notification_text = {
first_valid = {
triggered_desc = {
trigger = {
scope:secondary_recipient = scope:recipient
}
desc = OFFER_RANSOM_PROPOSAL_PERSONAL
}
desc = OFFER_RANSOM_PROPOSAL
}
}
is_shown = {
scope:secondary_recipient = {
#exists = liege
is_imprisoned_by = scope:actor
}
NOT = {
scope:actor = scope:recipient
}
}
is_valid_showing_failures_only = {
trigger_if = {
limit = {
scope:invalid = yes
}
always = no
}
scope:recipient = { is_busy_in_events_localised = yes } #Payer
scope:secondary_recipient = { is_busy_in_events_localised = yes } #Prisoner
scope:secondary_recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
cost = {
influence = {
value = 0
if = {
limit = { scope:influence_send_option = yes }
add = scope:actor.medium_influence_value
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
}
on_accept = {
if = {
limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } }
scope:recipient = { remove_character_modifier = allowed_to_go_outside }
}
if = {
limit = { scope:recipient = { has_character_modifier = moldy_gruel_diet } }
scope:recipient = { remove_character_modifier = moldy_gruel_diet }
}
# Set up event scopes and trigger the exchange.
if = {
limit = { scope:secondary_recipient = { is_imprisoned_by = scope:actor } } # To prevent simultaneous release-shenanigans
scope:secondary_recipient = {
save_scope_as = prisoner
}
scope:recipient = {
save_scope_as = payer
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
scope:prisoner = {
save_scope_value_as = {
name = new_ransom_value
value = haggler_ransom_cost_modifier
}
}
custom_tooltip = has_person_haggler_decrease_ransom_cost
}
# If the recipient doesn't have enough funds to pay the full amount and we're only requesting their current funds, save how much they've agreed to pay.
if = {
limit = {
OR = {
exists = scope:current_gold
exists = scope:extortionate_current_gold
}
}
save_scope_value_as = {
name = ransom_saved_gold_value
value = scope:payer.current_gold_value
}
}
}
scope:actor = {
save_scope_as = imprisoner
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
scope:recipient = {
scope:prisoner = {
save_scope_value_as = {
name = new_ransom_value
value = haggler_ransom_cost_modifier
}
}
custom_tooltip = has_person_haggler_increase_ransom_cost
}
}
#Save scopes for portraits
scope:recipient = { save_scope_as = portrait_first }
if = {
limit = {
NOT = { scope:portrait_first = scope:prisoner }
}
scope:prisoner = { save_scope_as = portrait_second}
# Must come after we save the payment value, or the payer won't know how much they need to pay.
send_interface_message = {
type = event_prison_good
title = msg_ransom_prisoner
right_icon = scope:portrait_first
left_icon = scope:portrait_second
ransom_interaction_effect = yes
}
}
else = {
# Must come after we save the payment value, or the payer won't know how much they need to pay.
send_interface_message = {
type = event_prison_good
title = msg_ransom_prisoner
right_icon = scope:portrait_first
ransom_interaction_effect = yes
}
}
# Struggle Catalyst
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:secondary_recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:secondary_recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_ransom_important
character = scope:actor
}
}
}
}
}
}
on_decline = {
# If a player declines this ransom offer, wait 10 years before sending another one (they presumably will ransom that character themselves when they want them back).
if = {
limit = { scope:recipient = { is_ai = no } }
scope:secondary_recipient = {
add_character_flag = {
flag = character_ransom_refused_by_player
years = 10
}
}
}
# Trigger notification event
scope:actor = {
trigger_event = char_interaction.0131
}
}
# Pay me an extortionate amount!
send_option = {
is_shown = {
scope:actor = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:recipient ?= {
gold >= scope:secondary_recipient.increased_ransom_cost_value
}
}
flag = extortionate_gold
localization = "RANSOM_EXTORTIONATE_GOLD_OPTION"
}
# If you don't have what they're worth, pay me what you have (extort version)!
send_option = {
is_shown = {
scope:actor = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:recipient ?= {
gold < scope:secondary_recipient.increased_ransom_cost_value
gold >= 1
}
}
flag = extortionate_current_gold
localization = "RANSOM_EXTORTIONATE_CURRENT_GOLD_OPTION"
}
# Pay me what they're worth!
send_option = {
is_shown = {
scope:actor = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:recipient ?= {
gold >= scope:secondary_recipient.ransom_cost_value
}
}
flag = gold
localization = "RANSOM_GOLD_OPTION"
}
# If you don't have what they're worth, pay me what you have!
send_option = {
is_shown = {
scope:actor = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:recipient ?= {
gold < scope:secondary_recipient.ransom_cost_value
gold >= 1
}
}
flag = current_gold
localization = "RANSOM_CURRENT_GOLD_OPTION"
}
send_option = {
is_shown = {
trigger_if = { # in the mass action ransom we only want to do it for gold
limit = { exists = scope:mass_action }
scope:mass_action = no
}
}
is_valid = {
scope:actor = {
can_add_hook = { #To match the hook added through ransom_interaction_effect
target = scope:recipient
type = favor_hook
}
}
}
flag = favor
localization = "RANSOM_FAVOR_OPTION"
}
send_option = { # EP3 Influence
is_shown = { # Actor must have a government that uses influence
trigger_if = { # in the mass action ransom we only want to do it for gold
limit = { exists = scope:mass_action }
scope:mass_action = no
}
scope:actor = {
government_has_flag = government_has_influence
}
}
is_valid = {
# Actor has enough influence
scope:actor = { influence >= medium_influence_value }
# Both characters are within the same top realm
custom_tooltip = {
text = not_same_realm_tt
scope:recipient.top_liege = scope:actor.top_liege
}
}
flag = influence_send_option
localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE
}
localization_values = {
EXTORTIONATE_RANSOM_COST = scope:secondary_recipient.increased_ransom_cost_value
RANSOM_COST = scope:secondary_recipient.ransom_cost_value
CURRENT_GOLD = scope:recipient.gold
}
ai_accept = {
base = 0
modifier = { # Greedy characters can have their greed get the better of them...
add = {
value = scope:recipient.ai_greed
multiply = -0.5
}
scope:recipient.ai_greed >= medium_positive_ai_value
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
NOT = {
scope:recipient = scope:secondary_recipient
}
desc = AI_VALUE_MODIFIER_GREED
}
modifier = { # Generous characters are more willing to pay
add = {
value = scope:recipient.ai_greed
multiply = -0.10
}
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
NOT = {
scope:recipient = scope:secondary_recipient
}
scope:recipient.ai_greed <= medium_negative_ai_value
desc = AI_VALUE_MODIFIER_GENEROUS
}
modifier = {
add = -10
NOT = { scope:recipient = scope:secondary_recipient }
scope:recipient = {
NOR = {
is_spouse_of = scope:secondary_recipient
is_close_or_extended_family_of = scope:secondary_recipient
has_relation_lover = scope:secondary_recipient
has_relation_friend = scope:secondary_recipient
has_secret_relation_lover = scope:secondary_recipient
has_relation_soulmate = scope:secondary_recipient
has_relation_best_friend = scope:secondary_recipient
is_parent_of = scope:secondary_recipient
}
}
desc = "UNIMPORTANT_CHAR_REASON"
}
modifier = {
add = 100
scope:recipient = scope:secondary_recipient
desc = "WANTS_FREEDOM_REASON"
}
modifier = { # Acceptance boon for lovers, friends, etc
add = 25
NOT = { scope:recipient = scope:secondary_recipient }
scope:recipient = {
OR = {
is_spouse_of = scope:secondary_recipient
is_close_or_extended_family_of = scope:secondary_recipient
has_relation_lover = scope:secondary_recipient
has_relation_friend = scope:secondary_recipient
has_secret_relation_lover = scope:secondary_recipient
}
NOR = {
has_relation_soulmate = scope:secondary_recipient
has_relation_best_friend = scope:secondary_recipient
is_parent_of = scope:secondary_recipient
}
}
desc = "DEAR_TO_ME_REASON"
}
modifier = { # Massive acceptance boon for Soulmates and Best Friends
add = 200
scope:recipient = {
OR = {
has_relation_soulmate = scope:secondary_recipient
has_relation_best_friend = scope:secondary_recipient
is_parent_of = scope:secondary_recipient
}
NOR = {
is_spouse_of = scope:secondary_recipient
AND = {
NOT = {
is_parent_of = scope:secondary_recipient
}
is_close_or_extended_family_of = scope:secondary_recipient
}
has_relation_lover = scope:secondary_recipient
has_relation_friend = scope:secondary_recipient
has_secret_relation_lover = scope:secondary_recipient
}
}
desc = "DEAR_TO_ME_REASON"
}
modifier = { # Say no to rivals
add = -200
scope:recipient = {
has_relation_rival = scope:secondary_recipient
}
desc = "RIVAL_TO_ME_REASON"
}
modifier = { # Say no to rivals
add = -500
scope:recipient = {
has_relation_nemesis = scope:secondary_recipient
}
desc = "NEMESIS_TO_ME_REASON"
}
modifier = {
add = 10
scope:recipient = {
NOR = {
this = scope:secondary_recipient
is_spouse_of = scope:secondary_recipient
is_close_or_extended_family_of = scope:secondary_recipient
has_relation_lover = scope:secondary_recipient
has_relation_soulmate = scope:secondary_recipient
has_secret_relation_lover = scope:secondary_recipient
}
NOR = {
has_relation_rival = scope:secondary_recipient
has_relation_nemesis = scope:secondary_recipient
}
}
scope:recipient.dynasty = scope:secondary_recipient.dynasty
desc = "MY_DYNASTY_REASON"
}
modifier = { # An Intimidated recipient is significantly more likely to accept an offer from the liege
add = intimidated_reason_value
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
}
desc = INTIMIDATED_REASON
}
modifier = { # An Cowed recipient is significantly more likely to accept an offer from the liege
add = cowed_reason_value
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
}
desc = COWED_REASON
}
}
# AI
ai_targets = {
ai_recipients = prisoners
}
ai_frequency = 6
ai_potential = {
always = yes
}
ai_will_do = {
base = 0
modifier = {
add = 100
OR = {
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
AND = {
scope:recipient = {
gold >= 25
}
scope:secondary_recipient = {
time_in_prison = { years > 1 }
}
scope:current_gold = yes
}
}
}
modifier = {
add = ai_greed
ai_greed > 0
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
}
modifier = {
add = -100
has_relation_rival = scope:secondary_recipient
}
modifier = {
add = -300
has_relation_nemesis = scope:secondary_recipient
}
modifier = {
add = 100
scope:favor = yes
scope:recipient = {
OR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
# Struggle Agenda
modifier = {
scope:secondary_recipient = {
any_character_struggle = {
involvement = involved
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
}
}
add = 200
}
}
}
modifier = {
factor = 0
is_at_war = yes
}
modifier = { # Don't annoy players
factor = 0
scope:recipient = { is_ai = no }
OR = {
scope:recipient = { is_at_war = yes }
scope:secondary_recipient = { has_character_flag = character_ransom_refused_by_player }
}
}
#don't ransom if they are tied with a prison break contract, we don't want it invalidating all the time
modifier = {
factor = 0
scope:secondary_recipient = {
has_character_flag = being_prisonbroken_by_laamp
}
}
}
# Needs to be after all other send options so we only default to it if everything else is blocked
send_option = {
is_shown = { # When doing the mass ransom, its possible for no option to be valid for the gold costs, so instead of defaulting wrong we explitly fail it
exists = scope:mass_action
scope:mass_action = yes
}
flag = invalid
localization = "INVALID"
}
}
#For lieges to ransom their courtiers
pay_ransom_interaction = {
interface_priority = 50
common_interaction = yes
use_diplomatic_range = no
category = interaction_category_prison
icon = icon_gold
redirect = {
scope:recipient = {
save_scope_as = secondary_recipient
if = {
limit = {
exists = imprisoner
}
imprisoner = { save_scope_as = recipient }
}
}
}
desc = pay_ransom_interaction_desc
cost = {
influence = {
value = 0
if = {
limit = { scope:influence_send_option = yes }
add = scope:actor.medium_influence_value
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
}
greeting = positive
notification_text = PAY_RANSOM_PROPOSAL
is_shown = {
exists = scope:recipient
scope:secondary_recipient = {
NOT = {
this = scope:actor
}
is_imprisoned_by = scope:recipient
OR = {
liege ?= scope:actor # You can ransom anyone you have in your court
is_close_family_of = scope:actor # And anyone who is your close family
dynasty ?= { # And anyone from your Dynasty
this ?= scope:actor.dynasty
}
any_spouse = { # And anyone married to one of your close kin or dynasty members
OR = {
is_close_family_of = scope:actor
dynasty ?= {
this ?= scope:actor.dynasty
}
}
}
has_relation_lover = scope:actor # And Lovers
has_relation_friend = scope:actor # And Friends
}
}
NOT = {
scope:actor = scope:recipient
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes } #Imprisoner
scope:secondary_recipient = { is_busy_in_events_localised = yes } #Prisoner
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
on_accept = {
# Set up event scopes and trigger the exchange.
if = {
limit = { scope:secondary_recipient = { is_imprisoned_by = scope:recipient } }
scope:secondary_recipient = {
save_scope_as = prisoner
}
scope:recipient = {
save_scope_as = imprisoner
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
custom_tooltip = has_person_haggler_increase_ransom_cost
}
}
scope:actor = {
save_scope_as = payer
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
scope:prisoner = {
save_scope_value_as = {
name = new_ransom_value
value = haggler_ransom_cost_modifier
}
}
custom_tooltip = has_person_haggler_decrease_ransom_cost
}
# Stress impacts
if = {
limit = {
scope:prisoner = { # Stress impact for random courtiers
NOR = {
is_vassal_of = scope:actor
is_consort_of = scope:actor
is_close_family_of = scope:actor
dynasty ?= {
this ?= scope:actor.dynasty
}
any_spouse = {
OR = {
is_close_family_of = scope:actor
dynasty ?= {
this ?= scope:actor.dynasty
}
}
}
has_relation_lover = scope:actor
has_relation_friend = scope:actor
}
}
}
stress_impact = {
compassionate = minor_stress_impact_loss
generous = medium_stress_impact_loss
}
}
else_if = { # Stress impact for 'relevant' ransoms; in other words, everyone but random courtiers
limit = {
scope:prisoner = {
OR = {
is_vassal_of = scope:actor
is_consort_of = scope:actor
is_close_family_of = scope:actor
dynasty ?= {
this ?= scope:actor.dynasty
}
any_spouse = {
OR = {
is_close_family_of = scope:actor
dynasty ?= {
this ?= scope:actor.dynasty
}
}
}
has_relation_lover = scope:actor
has_relation_friend = scope:actor
}
}
}
stress_impact = {
compassionate = medium_stress_impact_loss
generous = minor_stress_impact_loss
just = minor_stress_impact_loss
}
}
if = { # Lustful characters want their lovers back
limit = {
scope:prisoner = {
has_relation_lover = scope:actor
}
}
stress_impact = {
lustful = major_stress_impact_loss
}
}
if = { # Loyal characters want to free their friends and lovers
limit = {
scope:prisoner = {
OR = {
has_relation_friend = scope:actor
has_relation_lover = scope:actor
}
}
}
stress_impact = {
loyal = major_stress_impact_loss
}
}
if = { # Family should be free!
limit = {
scope:prisoner = {
is_close_family_of = scope:payer
}
}
stress_impact = {
family_first = miniscule_stress_impact_loss
}
}
# If the payer doesn't have enough funds to pay the full amount and we're only requesting their current funds, save how much they've agreed to pay.
if = {
limit = {
OR = {
exists = scope:current_gold
exists = scope:extortionate_current_gold
}
}
save_scope_value_as = {
name = ransom_saved_gold_value
value = scope:payer.current_gold_value
}
}
# Must come after we save the payment value, or the payer won't know how much they need to pay.
trigger_event = char_interaction.0140
}
hidden_effect = {
scope:prisoner = {
send_interface_toast = {
type = event_toast_effect_good
title = ransomed_by_someone
left_icon = scope:payer
show_as_tooltip = {
scope:imprisoner = {
ransom_interaction_effect = yes
}
}
}
}
scope:prisoner = {
if = {
limit = {
liege ?= {
is_ai = no
NOR = {
this = scope:payer
this = scope:imprisoner
}
OR = {
is_close_or_extended_family_of = scope:prisoner
is_consort_of = scope:prisoner
has_relation_lover = scope:prisoner
has_relation_friend = scope:prisoner
}
}
}
liege = {
save_scope_as = prisoner_liege_scope
send_interface_toast = {
type = event_toast_effect_good
title = ransomed_by_someone_third_party
left_icon = scope:payer
right_icon = scope:prisoner
custom_tooltip = ransomed_by_someone_third_party_desc
}
}
}
}
}
scope:imprisoner = {
send_interface_message = {
type = event_prison_neutral
title = recipient_released_from_prison
right_icon = scope:prisoner
left_icon = scope:imprisoner
ransom_interaction_effect = yes
}
# Struggle Catalyst
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:prisoner
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:prisoner
}
}
activate_struggle_catalyst = {
catalyst = catalyst_ransom_important
character = scope:imprisoner
}
}
}
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:imprisoner
SECOND = scope:prisoner
}
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_supporter_detractor
CHAR = scope:prisoner
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_supporter_detractor
CHAR = scope:prisoner
}
}
activate_struggle_catalyst = {
catalyst = catalyst_ransom_supporter_detractor
character = scope:imprisoner
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_ransom_supporter_detractor }
}
}
}
if = {
limit = { scope:hook = yes }
scope:actor = {
use_hook = scope:recipient
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:prisoner
VALUE = medium_unity_gain
DESC = clan_unity_ransom.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_decline = {
# If a player declines this ransom offer, wait 10 years before sending another one (they presumably have reasons for keeping that character in prison).
if = {
limit = { scope:recipient = { is_ai = no } }
scope:secondary_recipient = {
add_character_flag = {
flag = character_ransom_refused_by_player
years = 10
}
}
}
# Trigger notification event
scope:actor = {
trigger_event = char_interaction.0141
}
}
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
is_valid = {
exists = scope:recipient
scope:actor = {
gold >= scope:secondary_recipient.increased_ransom_cost_value
}
}
starts_enabled = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:actor = {
gold >= scope:secondary_recipient.increased_ransom_cost_value
}
}
flag = extortionate_gold
localization = "RANSOM_EXTORTIONATE_GOLD_IMPRISONED_PERSPECTIVE_OPTION"
}
# If you don't have what they're worth, pay me what you have (extort version)!
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:actor = {
gold < scope:secondary_recipient.increased_ransom_cost_value
gold > 0
}
}
starts_enabled = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:actor = {
gold < scope:secondary_recipient.increased_ransom_cost_value
gold > 0
}
}
flag = extortionate_current_gold
localization = "RANSOM_EXTORTIONATE_CURRENT_GOLD_IMPRISONED_PERSPECTIVE_OPTION"
}
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
}
is_valid = {
exists = scope:recipient
scope:actor = {
gold >= scope:secondary_recipient.ransom_cost_value
}
}
starts_enabled = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:actor = {
gold >= scope:secondary_recipient.ransom_cost_value
}
}
flag = gold
localization = "RANSOM_GOLD_PAY_OPTION"
}
# If you don't have what they're worth, pay me what you have!
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:actor = {
gold < scope:secondary_recipient.ransom_cost_value
gold > 0
}
}
starts_enabled = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:actor = {
gold < scope:secondary_recipient.ransom_cost_value
gold > 0
}
}
flag = current_gold
localization = "RANSOM_CURRENT_PAY_GOLD_OPTION"
}
send_option = {
is_valid = {
exists = scope:recipient
scope:recipient = {
can_add_hook = { #To match the hook added through ransom_interaction_effect
target = scope:actor
type = favor_hook
}
}
}
flag = favor
localization = "RANSOM_OWE_FAVOR_OPTION"
}
send_option = { # EP3 Influence
is_shown = { # Actor must have a government that uses influence
scope:actor = {
government_has_flag = government_has_influence
}
}
is_valid = {
# Actor has enough influence
scope:actor = { influence >= medium_influence_value }
# Both characters are within the same top realm
custom_tooltip = {
text = not_same_realm_tt
scope:recipient.top_liege = scope:actor.top_liege
}
}
flag = influence_send_option
localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE
}
#Use hook
send_option = {
is_valid = {
exists = scope:recipient
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
localization_values = {
EXTORTIONATE_RANSOM_COST = scope:secondary_recipient.increased_ransom_cost_value
RANSOM_COST = scope:secondary_recipient.ransom_cost_value
CURRENT_GOLD = scope:actor.gold
}
ai_accept = {
base = 0
modifier = {
add = 50
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = { # Accept more than half the ransom (unless greedy)
add = 25
scope:current_gold = yes
AND = {
scope:actor = { gold >= scope:secondary_recipient.half_ransom_cost_value }
NOT = { scope:recipient.ai_greed >= medium_positive_ai_value }
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = { # Accept more than half the ransom (unless greedy)
add = 25
scope:extortionate_current_gold = yes
AND = {
scope:actor = { gold >= scope:secondary_recipient.half_increased_ransom_cost_value }
NOT = { scope:recipient.ai_greed >= medium_positive_ai_value }
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = {
add = 50
scope:favor = yes
scope:recipient.top_liege = scope:actor.top_liege
desc = "FAVOR_POSITIVE_REASON"
}
modifier = {
add = 0
scope:favor = yes
NOT = { scope:recipient.top_liege = scope:actor.top_liege }
desc = "NO_USE_FOR_A_FAVOR_REASON"
}
modifier = { # For clarification
add = 0
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
OR = {
scope:actor = { gold < scope:secondary_recipient.half_ransom_cost_value }
scope:recipient.ai_greed >= medium_positive_ai_value
}
desc = "WANTS_MORE_GOLD"
}
modifier = { # Say no to rivals
add = -55
scope:recipient = {
has_relation_rival = scope:secondary_recipient
}
desc = "RIVAL_TO_ME_REASON"
}
modifier = { # Say no to rivals
add = -300
scope:recipient = {
has_relation_nemesis = scope:secondary_recipient
}
desc = "NEMESIS_TO_ME_REASON"
}
modifier = { # At war
add = -300
scope:recipient = {
is_at_war_with = scope:actor
}
desc = "IS_AT_WAR_REASON"
}
modifier = { # At war
add = -300
scope:recipient = {
is_at_war = yes
any_primary_war_enemy = {
scope:secondary_recipient = {
liege ?= prev
}
}
}
desc = "IS_POW_REASON"
}
modifier = { # At war
add = -300
scope:recipient = {
is_at_war_with = scope:secondary_recipient
}
desc = "IS_AT_WAR_WITH_TARGET_REASON"
}
#opinion_modifier = { # A lot more likely if Recipient likes Actor
# who = scope:recipient
# opinion_target = scope:actor
# multiplier = 1.0
# desc = AI_OPINION_REASON
#}
#opinion_modifier = { # A lot more likely if Recipient likes secondary_recipient/prisoner
# who = scope:recipient
# opinion_target = scope:secondary_recipient
# multiplier = 1.0
# desc = AI_OPINION_REASON
#}
modifier = {
scope:hook = yes
add = 100
desc = SCHEME_WEAK_HOOK_USED
}
modifier = { # An Intimidated recipient is significantly more likely to accept an offer from the liege
add = 40
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
}
desc = INTIMIDATED_REASON
}
modifier = { # An Cowed recipient is significantly more likely to accept an offer from the liege
add = 100
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
}
desc = COWED_REASON
}
modifier = {
add = 25
scope:influence_send_option = yes
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
auto_accept = {
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
# AI
ai_targets = {
ai_recipients = family
}
ai_targets = {
ai_recipients = spouses
}
ai_targets = {
ai_recipients = scripted_relations
}
ai_targets = {
ai_recipients = liege
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
ai_recipients = top_realm_domicile_owners
max = 5
}
ai_frequency = 6
ai_potential = {
gold >= 25
}
ai_target_quick_trigger = {
prison = yes
}
ai_will_do = {
base = 0
modifier = {
add = 100
OR = {
scope:gold = yes
scope:extortionate_gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:secondary_recipient = {
time_in_prison = { years > 1 }
}
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
}
}
}
modifier = {
add = -100
has_relation_rival = scope:secondary_recipient
}
modifier = {
add = -300
has_relation_nemesis = scope:secondary_recipient
}
modifier = {
add = 100
scope:favor = yes
scope:recipient = {
OR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
modifier = { # Ransom your primary heir first
add = 10
OR = {
scope:gold = yes
scope:extortionate_gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:secondary_recipient = {
time_in_prison = { years > 1 }
}
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
}
AND = {
scope:favor = yes
scope:recipient = {
OR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
}
scope:secondary_recipient = {
is_primary_heir_of = scope:actor
}
}
modifier = { # Only ransom people you care about... unless you're very compassionate
factor = 0
ai_compassion < high_positive_ai_value
scope:secondary_recipient = {
NOR = {
is_heir_of = scope:actor
is_child_of = scope:actor
is_grandchild_of = scope:actor
is_great_grandchild_of = scope:actor
is_consort_of = scope:actor
is_parent_of = scope:actor
is_grandparent_of = scope:actor
is_great_grandparent_of = scope:actor
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_secret_relation_lover = scope:actor
any_spouse = {
OR = {
is_heir_of = scope:actor
is_child_of = scope:actor
is_grandchild_of = scope:actor
is_great_grandchild_of = scope:actor
is_parent_of = scope:actor
is_grandparent_of = scope:actor
is_great_grandparent_of = scope:actor
has_relation_friend = scope:actor
}
}
}
}
}
modifier = { # If you're very compassionate, well, then you ransom most people you can!
factor = 0
ai_compassion >= high_positive_ai_value
scope:secondary_recipient = {
NOR = {
is_heir_of = scope:actor
is_close_or_extended_family_of = scope:actor
is_consort_of = scope:actor
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_secret_relation_lover = scope:actor
any_spouse = {
OR = {
is_heir_of = scope:actor
is_close_or_extended_family_of = scope:actor
has_relation_friend = scope:actor
}
}
}
}
}
modifier = { # If you're very greedy... then they're a little bit more restrictive!
factor = 0
ai_greed >= high_positive_ai_value
scope:secondary_recipient = {
NOR = { # Very Greedy rulers only ransom people in their own realm, or their heir
is_courtier_of = scope:actor
is_vassal_or_below_of = scope:actor
is_heir_of = scope:actor
}
NOR = {
is_heir_of = scope:actor
is_close_or_extended_family_of = scope:actor
is_consort_of = scope:actor
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_secret_relation_lover = scope:actor
any_spouse = {
OR = {
is_heir_of = scope:actor
is_close_or_extended_family_of = scope:actor
has_relation_friend = scope:actor
}
}
}
}
}
# Some exceptions!
modifier = { # Lustful characters want to ransom lovers
add = 100
has_trait = lustful
ai_greed <= 50
scope:secondary_recipient = {
has_relation_lover = scope:actor
}
OR = {
scope:gold = yes
scope:extortionate_gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:secondary_recipient = {
time_in_prison = { years > 1 }
}
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
}
}
}
modifier = { # Loyal characters want to ransom their relations
add = 100
has_trait = loyal
scope:secondary_recipient = {
OR = {
has_relation_lover = scope:actor
has_relation_friend = scope:actor
}
}
OR = {
scope:gold = yes
scope:extortionate_gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:secondary_recipient = {
time_in_prison = { years > 1 }
}
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
}
}
}
modifier = { # Certain characters will try to ransom their liege!
add = 100
ai_greed <= very_high_negative_ai_value
ai_compassion >= very_high_negative_ai_value
NOT = { exists = joined_faction }
is_at_war = no
OR = {
has_trait = loyal
ai_honor >= high_positive_ai_value
}
scope:secondary_recipient = {
is_liege_or_above_of = scope:actor
}
OR = {
scope:gold = yes
scope:extortionate_gold = yes
# They won't offer current gold, only full ransoms
}
}
modifier = { # Favors only relevant within the realm
add = -100
scope:favor = yes
scope:recipient = {
NOR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
modifier = { # Don't spam the player with cheapskate offers
add = -100
scope:current_gold = yes
scope:recipient = {
is_ai = no
}
scope:secondary_recipient = {
highest_held_title_tier >= tier_duchy
}
}
# Struggle Agenda
modifier = {
scope:secondary_recipient = {
any_character_struggle = {
involvement = involved
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
}
}
add = 200
}
}
}
evaluate_action_increasing_house_unity = {
VALUE = 100
}
modifier = { # Don't give away prisoners for free
factor = 0
NOR = {
scope:favor = yes
scope:extortionate_gold = yes
scope:extortionate_current_gold = yes
scope:gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:current_gold = yes
}
}
}
modifier = { # Don't annoy players
factor = 0
scope:recipient = { is_ai = no }
OR = {
scope:recipient = { is_at_war = yes }
scope:secondary_recipient = { has_character_flag = character_ransom_refused_by_player }
}
}
#don't ransom prisoners that are tied with a prison break contract, we don't want it invalidating all the time
modifier = {
factor = 0
scope:secondary_recipient = {
has_character_flag = being_prisonbroken_by_laamp
}
}
}
}
#To ransom yourself
ransom_me_interaction = {
interface_priority = 50
common_interaction = yes
use_diplomatic_range = no
category = interaction_category_prison
icon = icon_gold
greeting = positive
notification_text = PAY_RANSOM_PROPOSAL_PERSONAL
desc = ransom_me_interaction_desc
redirect = { # So that users can ransom themselves by clicking on their portrait
if = {
limit = {
scope:actor = scope:recipient
exists = scope:actor.imprisoner
}
scope:actor.imprisoner = { save_scope_as = recipient }
}
}
is_shown = {
scope:actor = {
is_imprisoned_by = scope:recipient
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes } #Imprisoner
scope:actor = { is_busy_in_events_localised = yes } #Prisoner
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
on_accept = {
if = {
limit = { scope:actor = { is_imprisoned_by = scope:recipient } }
scope:actor = {
save_scope_as = prisoner
}
scope:recipient = {
save_scope_as = imprisoner
}
scope:actor = {
save_scope_as = payer
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
save_scope_value_as = {
name = new_ransom_value
value = haggler_ransom_cost_modifier
}
custom_tooltip = has_person_haggler_decrease_ransom_cost
}
# If the payer doesn't have enough funds to pay the full amount and we're only requesting their current funds, save how much they've agreed to pay.
if = {
limit = {
OR = {
exists = scope:current_gold
exists = scope:extortionate_current_gold
}
}
save_scope_value_as = {
name = ransom_saved_gold_value
value = scope:payer.current_gold_value
}
}
# Must come after we save the payment value, or the payer won't know how much they need to pay.
trigger_event = char_interaction.0150
}
scope:imprisoner = {
if = {
limit = {
employs_court_position = person_haggler_camp_officer
is_asking_for_gold_in_ransom_trigger = yes
}
random_court_position_holder = {
type = person_haggler_camp_officer
save_scope_as = haggler
}
scope:actor = {
custom_tooltip = has_person_haggler_increase_ransom_cost
}
}
send_interface_message = {
type = event_prison_neutral
title = recipient_released_from_prison
right_icon = scope:prisoner
left_icon = scope:imprisoner
ransom_interaction_effect = yes
}
# Struggle Catalyst
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:prisoner
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_ransom_important
CHAR = scope:prisoner
}
}
activate_struggle_catalyst = {
catalyst = catalyst_ransom_important
character = scope:imprisoner
}
}
}
}
if = {
limit = { always = scope:hook }
scope:actor = {
use_hook = scope:recipient
}
}
}
}
on_decline = {
# If a player declines this ransom offer, wait 10 years before sending another one (they presumably have reasons for keeping you in prison).
if = {
limit = { scope:recipient = { is_ai = no } }
scope:actor = {
add_character_flag = {
flag = character_ransom_refused_by_player
years = 10
}
}
}
# Trigger notification event
scope:actor = {
trigger_event = char_interaction.0151
}
}
cost = {
influence = {
value = 0
if = {
limit = { scope:influence_send_option = yes }
add = scope:actor.medium_influence_value
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
}
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
is_valid = {
scope:actor = {
gold >= increased_ransom_cost
}
}
flag = extortionate_gold
localization = "RANSOM_EXTORTIONATE_GOLD_IMPRISONED_PERSPECTIVE_OPTION"
}
# If you don't have what they're worth, pay me what you have (extort version)!
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
scope:actor = {
gold < increased_ransom_cost
gold > 0
}
}
flag = extortionate_current_gold
localization = "RANSOM_EXTORTIONATE_CURRENT_GOLD_IMPRISONED_PERSPECTIVE_OPTION"
}
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
}
is_valid = {
scope:actor = {
gold >= ransom_cost
}
}
flag = gold
localization = "RANSOM_GOLD_OPTION"
}
# If you don't have what they're worth, pay me what you have!
send_option = {
is_shown = {
exists = scope:recipient
scope:recipient = {
OR = {
is_lowborn = yes
NOT = {
dynasty = {
has_dynasty_perk = fp1_pillage_legacy_3
}
}
}
}
scope:actor = {
gold < ransom_cost
gold > 0
}
}
flag = current_gold
localization = "RANSOM_CURRENT_GOLD_OPTION"
}
send_option = {
is_valid = {
scope:recipient = {
can_add_hook = { #To match the hook added through ransom_interaction_effect
target = scope:actor
type = favor_hook
}
}
}
flag = favor
localization = "RANSOM_FAVOR_OPTION"
}
send_option = { # EP3 Influence
is_shown = { # Actor must have a government that uses influence
scope:actor = {
government_has_flag = government_has_influence
}
}
is_valid = {
# Actor has enough influence
scope:actor = { influence >= medium_influence_value }
# Both characters are within the same top realm
custom_tooltip = {
text = not_same_realm_tt
scope:recipient.top_liege = scope:actor.top_liege
}
}
flag = influence_send_option
localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE
}
#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
localization_values = {
EXTORTIONATE_RANSOM_COST = scope:actor.increased_ransom_cost_value
RANSOM_COST = scope:actor.ransom_cost_value
CURRENT_GOLD = scope:actor.gold
}
ai_accept = {
base = 0
modifier = {
add = 50
OR = {
scope:gold = yes
scope:extortionate_gold = yes
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = { # Accept more than half the ransom (unless greedy)
add = 25
scope:current_gold = yes
AND = {
scope:actor = { gold >= half_ransom_cost_value }
NOT = { scope:recipient.ai_greed >= medium_positive_ai_value }
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = { # Accept more than half the ransom (unless greedy)
add = 25
scope:extortionate_current_gold = yes
AND = {
scope:actor = { gold >= half_increased_ransom_cost_value }
NOT = { scope:recipient.ai_greed >= medium_positive_ai_value }
}
desc = "GOLD_POSITIVE_REASON"
}
modifier = {
add = 50
scope:favor = yes
scope:recipient.top_liege = scope:actor.top_liege
desc = "FAVOR_POSITIVE_REASON"
}
modifier = {
add = -50
scope:favor = yes
NOR = {
scope:gold = yes
scope:extortionate_gold = yes
}
OR = {
NOT = { scope:recipient.top_liege = scope:actor.top_liege }
scope:recipient.ai_greed >= medium_positive_ai_value
}
desc = "NO_USE_FOR_A_FAVOR_REASON"
}
modifier = { # For clarification
add = 0
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
OR = {
scope:actor = { gold < half_ransom_cost_value }
scope:recipient.ai_greed >= medium_positive_ai_value
}
desc = "WANTS_MORE_GOLD"
}
#opinion_modifier = { # A lot more likely if Recipient likes Actor
# who = scope:recipient
# opinion_target = scope:actor
# multiplier = 1.0
# desc = AI_OPINION_REASON
#}
modifier = { # Say no to rivals
add = -55
scope:recipient = {
has_relation_rival = scope:actor
}
desc = "ACTOR_RIVAL_TO_ME_REASON"
}
modifier = { # Say no to nemesis
add = -300
scope:recipient = {
has_relation_nemesis = scope:actor
}
desc = "ACTOR_NEMESIS_TO_ME_REASON"
}
modifier = { # At war
add = -300
scope:recipient = {
is_at_war_with = scope:actor
}
desc = "IS_AT_WAR_REASON"
}
modifier = {
scope:hook = yes
add = 100
desc = SCHEME_WEAK_HOOK_USED
}
modifier = { # An Intimidated recipient is significantly more likely to accept an offer from the liege
add = intimidated_reason_value
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
}
desc = INTIMIDATED_REASON
}
modifier = { # A Cowed recipient is significantly more likely to accept an offer from the liege
add = cowed_reason_value
trigger = {
scope:recipient = {
target_is_liege_or_above = scope:actor
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
}
desc = COWED_REASON
}
modifier = { # Family Feud
add = -50
trigger = {
exists = scope:actor.house
exists = scope:recipient.house
scope:recipient = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:actor.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:actor.house.house_head
}
}
}
desc = INTERACTION_FAMILY_FEUD_REVERSE_REASON
}
modifier = {
add = 25
scope:influence_send_option = yes
desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION
}
}
auto_accept = {
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
}
# AI
ai_frequency = 24
ai_targets = {
ai_recipients = self
}
ai_potential = {
always = yes
}
ai_will_do = {
base = 0
modifier = {
add = 100
OR = {
scope:gold = yes
scope:extortionate_gold = yes
AND = {
scope:actor = {
gold >= 25
}
OR = {
time_in_prison = { years > 1 }
has_trait = impatient #LET ME OUT! I want out! NOW!
}
OR = {
scope:current_gold = yes
scope:extortionate_current_gold = yes
}
}
}
}
modifier = {
add = 100
scope:favor = yes
scope:recipient = {
OR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
modifier = {
add = -100
scope:favor = yes
scope:recipient = {
NOR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
# Struggle Agenda
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_ransom_important
}
}
}
add = 200
}
}
}
modifier = { # Don't give away prisoners for free
factor = 0
NOR = {
scope:favor = yes
scope:gold = yes
scope:extortionate_gold = yes
scope:current_gold = yes
AND = {
scope:actor = {
gold >= 25
}
scope:current_gold = yes
}
}
}
modifier = { # Don't annoy players
factor = 0
scope:recipient = { is_ai = no }
OR = {
scope:recipient = { is_at_war = yes }
scope:actor = { has_character_flag = character_ransom_refused_by_player }
}
}
#don't do it if you are tied with a prison break contract, we don't want it invalidating all the time
modifier = {
factor = 0
scope:actor = {
has_character_flag = being_prisonbroken_by_laamp
}
}
}
}
release_from_prison_interaction = {
interface_priority = 30
common_interaction = yes
category = interaction_category_prison
special_interaction = release_from_prison_interaction
icon = prison
desc = release_from_prison_interaction_desc
notification_text = {
first_valid = {
triggered_desc = {
trigger = {
scope:demand_conversion = no
scope:renounce_claims = no
scope:banish = no
scope:take_vows = no
scope:recruit = no
scope:disfigure = no
scope:blind = no
scope:castrate = no
}
desc = RELEASE_PRISONER_OFFER
}
desc = RELEASE_PRISONER_OFFER_CONDITIONAL
}
}
is_shown = {
scope:recipient = {
is_imprisoned_by = scope:actor
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes } #Prisoner
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
on_accept = {
if = {
limit = { scope:recipient = { has_character_modifier = allowed_to_go_outside } }
scope:recipient = { remove_character_modifier = allowed_to_go_outside }
}
if = {
limit = { scope:recipient = { has_character_modifier = moldy_gruel_diet } }
scope:recipient = { remove_character_modifier = moldy_gruel_diet }
}
if = {
limit = { scope:recipient = { is_imprisoned_by = scope:actor } }
scope:recipient = {
# Demand Conversion
if = {
limit = { scope:demand_conversion = yes }
demand_conversion_interaction_effect = yes
add_opinion = {
modifier = demanded_my_conversion_opinion
target = scope:actor
}
# Struggle Catalyst
if = {
limit = {
scope:actor = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_demanding_important_conversion
CHAR = scope:recipient
}
}
}
}
scope:actor = {
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_demanding_important_conversion
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_demanding_important_conversion
character = scope:actor
}
}
}
}
}
# Banish Landed Character
if = {
limit = {
scope:banish = yes
scope:recipient = { is_landed_or_landless_administrative = yes }
}
banish_effect = { BANISHER = scope:actor }
if = {
limit = {
NOT = {
scope:actor = {
has_banish_reason = scope:recipient
}
}
}
scope:actor = { add_tyranny = banishment_tyranny_gain }
}
add_opinion = {
modifier = banished_me
target = scope:actor
}
}
# Banish Unlanded Character
else_if = {
limit = {
AND = {
scope:banish = yes
scope:recipient = {
is_landless_adventurer = no
is_pool_character = no # It is possible for them to end up in the pool between the interaction being sent, and it being accepted
}
}
}
if = {
limit = {
this.gold > 0
NOT = {
has_character_flag = realm_priest
}
}
pay_short_term_gold = { target = scope:actor gold = this.gold }
}
if = {
limit = {
has_any_artifact = yes
}
every_character_artifact = {
set_owner = {
target = scope:actor
history = {
location = scope:recipient.location
actor = scope:recipient
recipient = scope:actor
type = stolen
}
}
scope:actor = {
if = {
limit = {
NOT = { has_variable = stolen_artifact }
}
set_variable = {
name = stolen_artifact
value = 1
}
}
else = {
change_variable = {
name = stolen_artifact
add = 1
}
}
}
}
}
banish = yes
add_opinion = {
modifier = banished_me
target = scope:actor
}
}
# 'Banish' Pool Character
else_if = {
limit = {
AND = {
scope:banish = yes
scope:recipient = {
is_playable_character = no
is_pool_character = yes # They'll just leave for the pool
}
}
}
if = {
limit = {
this.gold > 0
}
pay_short_term_gold = { target = scope:actor gold = this.gold }
}
add_opinion = {
modifier = banished_me
target = scope:actor
}
}
# Recruit Character
if = {
limit = { scope:recruit = yes }
if = {
limit = {
scope:actor = {
culture = {
has_cultural_parameter = can_recruit_prisoners_easily
}
}
}
add_opinion = {
modifier = loyal_servant
target = scope:actor
}
scope:actor = {
if = {
limit = {
can_add_hook = {
target = scope:recipient
type = loyalty_hook
}
}
add_hook = {
type = loyalty_hook
target = scope:recipient
}
}
}
}
else = {
add_opinion = {
modifier = demanded_recruitment
target = scope:actor
}
}
scope:actor = {
if = {
limit = {
AND = {
scope:actor.faith = {
has_doctrine = tenet_communal_possessions
}
scope:recipient = {
has_trait = peasant_leader
}
}
}
scope:actor = {
add_piety = medium_piety_gain
}
}
}
scope:actor = {
add_courtier = scope:recipient
}
}
# Renounce Claims
if = {
limit = { scope:renounce_claims = yes }
add_opinion = {
modifier = demanded_claim_renouncement
target = scope:actor
}
scope:recipient = {
every_claim = {
explicit = yes
limit = {
save_temporary_scope_as = temp_claim
OR = {
holder = scope:actor
AND = {
exists = holder
NOT = { prev = { target_is_liege_or_above = scope:actor } }
holder = { target_is_liege_or_above = scope:actor }
}
scope:actor = {
any_held_title = {
is_de_jure_liege_or_above_target = scope:temp_claim
}
}
}
}
scope:recipient = { remove_claim = prev }
}
}
}
# Gain Hook
if = {
limit = { scope:gain_hook = yes }
add_opinion = {
modifier = demanded_hook
target = scope:actor
}
scope:actor = {
add_hook = { #Hook effect must match gain_hook option condition
target = scope:recipient
type = favor_hook
}
}
}
# Take Vows
if = {
limit = { scope:take_vows = yes }
send_child_to_clergy_effect = yes
#Does Byzan go hay-wire with deposing vassals?
if = {
limit = {
scope:actor = {
is_ai = yes
culture = { has_cultural_pillar = heritage_byzantine }
}
}
debug_log = debug_ai_byzan_forced_vows_on_prison_release
debug_log_scopes = yes
}
#Does the AI in general go haywire with deposing prisoners?
else_if = {
limit = {
scope:actor = { is_ai = yes }
}
debug_log = debug_ai_forced_vows_on_prison_release
debug_log_scopes = yes
}
}
# Take Vows
if = {
limit = { scope:become_executioner = yes }
release_as_executioner_effect = yes
}
# Disfigure
if = {
limit = { scope:disfigure = yes }
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
blind_castrate_and_disfigure_effect = yes #Stress & dread
show_as_tooltip = {
scope:recipient = {
add_trait = disfigured
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = disfigured }
scope:actor = {
trigger_event = {
id = prison.1030
days = 1
}
}
}
# Blind
if = {
limit = { scope:blind = yes }
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
blind_castrate_and_disfigure_effect = yes #Stress & dread
show_as_tooltip = {
scope:recipient = {
add_trait = blind
}
}
# Merciful Blindings
scope:actor = {
if = {
limit = {
culture = { has_cultural_parameter = merciful_blinding }
OR = {
has_execute_reason = scope:recipient
has_banish_reason = scope:recipient
}
}
add_piety = medium_piety_gain
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = blinded }
scope:actor = {
trigger_event = {
id = prison.1020
days = 1
}
}
# If we're a clan this interaction affects unity
if = {
limit = { scope:actor.culture = { has_cultural_parameter = merciful_blinding } } # If actor's culture has Merciful Blindings, they lose less unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else = {
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
# Castrate
if = {
limit = { scope:castrate = yes }
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
blind_castrate_and_disfigure_effect = yes #Stress & dread
show_as_tooltip = {
scope:recipient = {
if = {
limit = {
age < 12
}
ep3_child_castration_effect = yes
}
else = {
ep3_youth_castration_effect = yes
}
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = castrated }
scope:actor = {
trigger_event = {
id = prison.1025
days = 1
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_abelarding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
# No Demands Added
if = {
limit = {
scope:demand_conversion = no
scope:renounce_claims = no
scope:banish = no
scope:gain_hook = no
scope:take_vows = no
scope:become_executioner = no
scope:recruit = no
scope:disfigure = no
scope:blind = no
scope:castrate = no
}
# Notification to the imprisoner
scope:actor = {
send_interface_toast = {
type = event_toast_effect_neutral
title = recipient_released_from_prison
left_icon = scope:recipient
scope:recipient = {
add_opinion = {
modifier = released_from_prison
target = scope:actor
}
}
}
scope:actor = {
add_dread = minor_dread_loss
stress_impact = {
sadistic = medium_stress_impact_gain
callous = minor_stress_impact_gain
}
}
# Struggle impact
if = {
limit = {
any_character_struggle = {
involvement = involved
OR = {
has_struggle_phase_parameter = release_prisoner_diff_culture_gives_prestige
has_struggle_phase_parameter = release_prisoner_diff_faith_gives_prestige
}
}
is_diff_faith_or_culture_trigger = {
CHAR = scope:recipient
STATUS = involved
}
}
add_prestige = medium_prestige_gain
}
# Struggle Catalyst
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_release_important
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_release_important
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_release_important
character = scope:actor
}
}
}
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:actor
SECOND = scope:recipient
}
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_release_supporter_detractor
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_release_supporter_detractor
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_release_supporter_detractor
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_release_supporter_detractor }
}
}
}
# If we're a clan (and not making any demands) this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_gain
DESC = clan_unity_released_from_own_prison.desc
REVERSE_NON_HOUSE_TARGET = no
}
# LEGITIMACY GAIN FROM RELEASING DUKES AND ABOVE
if = {
limit = {
exists = scope:recipient.primary_title
scope:recipient.primary_title.tier >= tier_duchy
}
# Minus 2, since we want Duchy to be 1, and it's normally 3
save_scope_value_as = {
name = title_tier_minus_2
value = {
value = scope:recipient.primary_title.tier
subtract = 2
}
}
scope:actor = {
send_interface_toast = {
type = msg_legitimacy_gain
title = legitimacy_gain_toast
left_icon = scope:actor
right_icon = scope:recipient
add_legitimacy = {
value = {
value = miniscule_legitimacy_gain
multiply = scope:title_tier_minus_2
}
}
}
}
}
}
else = {
scope:actor = {
trigger_event = char_interaction.0160
}
}
# If a child was imprisoned due to yearly_4021 they'll come back to say hi
if = {
limit = {
exists = var:marked_for_revenge_in_event_yearly_4021
}
add_opinion = {
modifier = abandoned_me_opinion
target = var:marked_for_revenge_in_event_yearly_4021
}
if = {
limit = {
var:marked_for_revenge_in_event_yearly_4021 = {
is_alive = yes
is_ai = no
}
}
save_scope_as = child
if = {
limit = { #Make sure they're sadistic!
NOT = { has_trait = sadistic }
number_of_personality_traits < personality_trait_limit
}
add_trait = sadistic
}
var:marked_for_revenge_in_event_yearly_4021 = {
add_character_flag = { #TO make sure that they don't get spammed about the release
flag = block_for_prison_release_notification
days = 10
}
trigger_event = yearly.4022
}
remove_variable = marked_for_revenge_in_event_yearly_4021
}
}
if = {
limit = {
is_imprisoned = yes
# Release is handled in follow-up events
scope:disfigure = no
scope:blind = no
scope:castrate = no
}
release_from_prison = yes
}
}
# FP3 - If prisoner is important for war
scope:actor = { # FP3
if = {
limit = {
exists = scope:recipient.house
any_character_war = {
using_cb = fp3_free_house_member_cb
is_defender = scope:actor
primary_attacker.house = scope:recipient.house
}
}
random_character_war = {
limit = {
using_cb = fp3_free_house_member_cb
is_defender = scope:actor
primary_attacker.house = scope:recipient.house
}
primary_attacker = {
hidden_effect = {
send_interface_message = {
type = event_war_good
title = lesson_war_final_notes_victory_step_1
left_icon = scope:recipient
right_icon = scope:actor
show_as_tooltip = {
scope:recipient = { release_from_prison = yes }
add_prestige = major_prestige_gain
prev.primary_defender = { add_prestige = major_prestige_loss }
}
}
}
add_prestige = major_prestige_gain
prev.primary_defender = { add_prestige = major_prestige_loss }
}
}
}
}
}
}
on_decline = {
scope:actor = {
trigger_event = char_interaction.0161
}
}
send_option = {
flag = demand_conversion
localization = "RELEASE_DEMAND_CONVERSION"
is_shown = {
NOT = { scope:recipient.faith = scope:actor.faith }
}
is_valid = {
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
scope:recipient = {
OR = {
is_close_or_extended_family_of = scope:actor
is_vassal_of = scope:actor
}
}
}
# Cannot ask Landed Rulers to convert if they're not your vassal
custom_description = {
text = cannot_demand_unsubordinate_landed_ruler_conversion
scope:recipient = {
trigger_if = {
limit = {
is_playable_character = yes
}
is_vassal_or_below_of = scope:actor
}
}
}
# Cannot ask Religious Heads to convert
custom_description = {
text = cannot_demand_religious_head_conversion
NOT = {
AND = {
exists = scope:recipient.faith.religious_head
scope:recipient.faith.religious_head = scope:recipient
}
}
}
# Cannot ask Holy Order Master to convert
custom_description = {
text = cannot_demand_holy_order_master_conversion
NAND = {
exists = scope:recipient.faith
scope:recipient.faith = {
any_faith_holy_order = { leader = scope:recipient }
}
}
}
}
}
send_option = {
flag = renounce_claims
localization = RELEASE_RENOUNCE_CLAIMS
is_shown = {
custom_description = {
text = "release_renounce_claims"
subject = scope:recipient
scope:recipient = {
any_claim = {
explicit = yes
save_temporary_scope_as = temp_claim
OR = {
holder = scope:actor
AND = {
NOT = { prev = { target_is_liege_or_above = scope:actor } }
trigger_if = {
limit = {
exists = holder
}
holder = { target_is_liege_or_above = scope:actor }
}
}
scope:actor = {
any_held_title = {
is_de_jure_liege_or_above_target = scope:temp_claim
}
}
}
}
}
}
}
current_description = {
desc = RELEASE_RENOUNCE_CLAIMS_DESC
}
}
send_option = {
flag = banish
localization = "RELEASE_BANISH"
is_shown = {
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
scope:recipient = {
OR = {
AND = {
is_playable_character = no
is_ruler = no
gold > scope:actor.gold
gold > scope:actor.medium_gold_value
scope:actor.ai_greed > low_negative_ai_value
}
AND = {
is_playable_character = no
is_ruler = no
gold > 0
scope:actor = {
has_banish_reason = scope:recipient
}
}
AND = {
is_playable_character = no
is_ruler = no
gold > 100
scope:actor.ai_greed >= high_positive_ai_value
}
AND = {
scope:actor = {
has_banish_reason = scope:recipient
}
scope:actor = {
opinion = {
target = scope:recipient
value <= medium_negative_opinion
}
}
}
}
}
}
trigger_if = {
limit = {
scope:recipient = {
is_playable_character = yes
}
}
scope:recipient = {
is_vassal_of = scope:actor
}
}
trigger_else = {
scope:recipient = {
is_courtier_of = scope:actor
}
}
custom_description = {
text = "release_banish_invalid_take_vows"
object = scope:recipient
scope:take_vows = no
}
scope:recruit = no #Should be impossible to have both but just in case
NOT = {
scope:recipient = {
is_spouse_of = scope:actor
}
}
}
}
send_option = {
flag = gain_hook
localization = "RELEASE_GAIN_HOOK"
is_shown = {
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
scope:recipient = {
OR = {
is_vassal_of = scope:actor
AND = {
exists = liege
liege = scope:actor
}
}
}
}
}
is_valid = {
scope:actor = {
can_add_hook = {
type = favor_hook #Matches the hook added in the on_accept
target = scope:recipient
}
}
}
}
send_option = {
flag = take_vows
localization = "RELEASE_TAKE_VOWS"
is_shown = {
scope:actor.faith = {
has_doctrine_parameter = take_vows_active
}
}
is_valid = {
#Handle AI
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
#We're AI and Byzantium
trigger_if = {
limit = {
scope:actor = {
culture = { has_cultural_pillar = heritage_byzantine }
}
}
scope:recipient = {
is_ai = yes #Not gonna depose player characters, for now
OR = {
is_close_or_extended_family_of = scope:actor
is_vassal_or_below_of = scope:actor #Weigh this for Byz AI in the modifiers below
has_relation_rival = scope:actor
is_courtier_of = scope:actor
}
NOT = {
is_heir_of = scope:actor
}
}
#Get rid of rivals despite potentially liking them
trigger_if = {
limit = {
scope:recipient = { has_relation_rival = scope:actor }
}
always = yes
}
#Only get rid of family members if we dislike them
trigger_else = {
scope:actor = {
opinion = {
target = scope:recipient
value <= medium_negative_opinion
}
}
}
}
#We're not Byzantium but plain AI
trigger_else = {
scope:recipient = {
is_ai = yes #Not gonna depose player characters, for now
is_close_or_extended_family_of = scope:actor
NOT = {
is_heir_of = scope:actor
}
}
scope:actor = {
opinion = {
target = scope:recipient
value <= medium_negative_opinion
}
}
custom_description = {
text = "release_vows_invalid_not_your_court"
object = scope:recipient
subject = scope:actor
OR = {
scope:recipient = { is_courtier_of = scope:actor }
scope:recruit = yes
}
}
}
}
#Enhanced Take the Vows for Byzantium players -- who do we want to boot to a monastery far, far away?
trigger_else_if = {
limit = {
scope:actor = {
culture = { has_cultural_pillar = heritage_byzantine }
}
}
scope:recipient = {
is_ai = yes #Not gonna depose player characters, for now
custom_description = {
text = "release_byz_vows_invalid"
object = scope:recipient
subject = scope:actor
OR = {
is_close_or_extended_family_of = scope:actor
is_vassal_or_below_of = scope:actor
has_relation_rival = scope:actor
is_courtier_of = scope:actor
}
}
}
}
#Otherwise standard procedure Take the Vows requirements
trigger_else = {
scope:recipient = {
is_ai = yes #Not gonna depose player characters, for now
}
scope:actor = { is_close_or_extended_family_of = scope:recipient } #Triggering I_AM_NOT instead of CHARACTER_IS_NOT makes the tooltip look less cursed
custom_description = {
text = "release_vows_invalid_not_your_court"
object = scope:recipient
subject = scope:actor
OR = {
scope:recipient = { is_courtier_of = scope:actor }
scope:recruit = yes
}
}
}
custom_description = {
text = "release_vows_invalid_not_your_faith"
object = scope:recipient
subject = scope:actor
trigger_if = {
limit = {
NOT = { scope:recipient.faith = scope:actor.faith }
}
scope:demand_conversion = yes
}
}
custom_description = {
text = "release_executioner_invalid_take_vows_condition"
object = scope:recipient
scope:become_executioner = no
}
custom_description = {
text = "release_banish_invalid_take_vows"
object = scope:recipient
scope:banish = no
}
scope:recipient = {
age >= 10
NOR = {
has_trait = excommunicated
has_trait = devoted
has_trait = incapable
}
#Do they have the "wrong" marriage type?
NOR = {
custom_description = {
text = is_married_matrilineally
subject = scope:recipient
any_spouse = {
is_female = yes
matrilinear_marriage = yes
}
}
custom_description = {
text = is_married_patrilineally
subject = scope:recipient
any_spouse = {
is_male = yes
patrilinear_marriage = yes
}
}
custom_description = {
text = matrilinear_betrothal
subject = scope:recipient
exists = betrothed
betrothed = {
is_female = yes
matrilinear_betrothal = yes
}
}
custom_description = {
text = patrilinear_betrothal
subject = scope:recipient
exists = betrothed
betrothed = {
is_male = yes
patrilinear_betrothal = yes
}
}
}
}
}
}
send_option = {
flag = become_executioner
localization = "RELEASE_AS_EXECUTIONER"
is_shown = {
has_ep1_court_positions_dlc_trigger = yes
scope:actor = {
has_royal_court = yes
}
scope:recipient = {
is_adult = yes
}
}
is_valid = {
scope:actor = {
NOT = { employs_court_position = executioner_court_position }
}
scope:recipient = {
trigger_if = {
limit = { scope:recruit = yes }
custom_description = {
text = "release_executioner_invalid_recruit"
object = scope:recipient
scope:recruit = yes
}
}
trigger_else = {
is_courtier_of = scope:actor
}
custom_description = {
text = "release_executioner_invalid_take_vows_condition"
object = scope:recipient
scope:take_vows = no
}
NOT = { is_spouse_of = scope:actor }
}
}
}
send_option = {
flag = recruit
localization = "RELEASE_RECRUIT"
is_shown = {
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
scope:recipient = {
OR = {
has_relation_best_friend = scope:actor
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_secret_relation_lover = scope:actor
is_heir_of = scope:actor
}
}
}
scope:recipient = {
is_ruler = no
NOT = { is_courtier_of = scope:actor }
OR = {
is_adult = yes
AND = {
is_adult = no
OR = {
trigger_if = {
limit = { exists = liege }
NOT = { is_heir_of = liege }
}
NOT = { exists = liege }
}
}
}
}
}
}
send_option = {
flag = disfigure
localization = "RELEASE_DISFIGURE"
is_shown = {
scope:actor = {
has_government = administrative_government
culture = { has_cultural_tradition = tradition_ep3_palace_politics }
# If they're our partner emperor, we should use the maiming interaction instead.
liege_should_systematically_maim_co_ruler_trigger = no
}
scope:recipient = {
is_adult = yes
}
}
is_valid = {
scope:recipient = {
NOT = { has_trait = disfigured }
}
# Byzantines can't disfigure those not in their realm
trigger_if = {
limit = {
scope:actor = {
culture = { has_cultural_pillar = heritage_byzantine }
}
}
scope:recipient = {
custom_description = {
text = "release_byz_disfigure_invalid"
object = scope:recipient
subject = scope:actor
OR = {
is_close_or_extended_family_of = scope:actor
is_vassal_or_below_of = scope:actor
has_relation_rival = scope:actor
is_courtier_of = scope:actor
}
}
}
}
custom_description = {
text = "release_prisoner_disfigure_blind_castrate_condition"
object = scope:recipient
scope:blind = no
scope:castrate = no
}
}
}
send_option = {
flag = blind
localization = "RELEASE_BLIND"
is_shown = {
scope:actor = {
is_adult = yes
culture = { has_cultural_parameter = can_blind_prisoners }
# If they're our partner emperor, we should use the maiming interaction instead.
liege_should_systematically_maim_co_ruler_trigger = no
}
scope:recipient = {
is_adult = yes
}
}
is_valid = {
scope:recipient = {
NOT = { has_trait = blind }
}
custom_description = {
text = "release_prisoner_disfigure_blind_castrate_condition"
object = scope:recipient
scope:disfigure = no
scope:castrate = no
}
}
}
send_option = {
flag = castrate
localization = "RELEASE_CASTRATE"
is_shown = {
scope:recipient = {
is_imprisoned_by = scope:actor
is_eunuch_trigger = no
is_male = yes
}
scope:actor = {
is_adult = yes
culture = {
has_cultural_parameter = can_castrate_prisoners
}
# If they're our partner emperor, we should use the maiming interaction instead.
liege_should_systematically_maim_co_ruler_trigger = no
}
}
is_valid = {
scope:recipient = {
is_eunuch_trigger = no
}
custom_description = {
text = "release_prisoner_disfigure_blind_castrate_condition"
object = scope:recipient
scope:disfigure = no
scope:blind = no
}
}
}
send_options_exclusive = no
auto_accept = {
scope:demand_conversion = no
scope:renounce_claims = no
scope:banish = no
scope:gain_hook = no
scope:take_vows = no
scope:recruit = no
}
ai_accept = {
base = 0
modifier = {
add = 100
desc = "WANTS_FREEDOM_REASON"
}
modifier = {
trigger = {
scope:recipient = { ai_zeal <= 20 }
scope:demand_conversion = yes
}
add = -20
desc = "CONVERSION_NEGATIVE_REASON"
}
modifier = {
trigger = {
scope:recipient = { ai_zeal > 20 }
scope:demand_conversion = yes
}
add = {
value = ai_zeal
if = {
limit = {
scope:recipient.faith = {
faith_hostility_level = {
target = scope:actor.faith
value = faith_astray_level
}
}
}
multiply = -1
}
else = {
multiply = -2
}
}
desc = "CONVERSION_NEGATIVE_REASON"
}
modifier = {
add = -25
trigger = {
scope:renounce_claims = yes
ai_greed < 0
}
desc = "RENOUNCE_CLAIMS_REASON"
}
modifier = {
add = -50
trigger = {
scope:renounce_claims = yes
ai_greed >= 0
ai_greed < 26
}
desc = "RENOUNCE_CLAIMS_REASON"
}
modifier = {
add = -50
trigger = {
scope:become_executioner = yes
# Sadists don't care about becoming an executioner
NOR = {
has_trait = sadistic
has_trait = callous
}
}
desc = "BECOME_EXECUTIONER_REASON"
}
modifier = {
add = -75
trigger = {
scope:renounce_claims = yes
ai_greed >= 26
ai_greed < 51
}
desc = "RENOUNCE_CLAIMS_REASON"
}
modifier = {
add = -95
trigger = {
scope:renounce_claims = yes
ai_greed >= 51
}
desc = "RENOUNCE_CLAIMS_REASON"
}
modifier = {
add = -50
trigger = {
scope:banish = yes
}
NOT = {
scope:actor = {
has_imprisonment_reason = scope:recipient
culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
}
}
desc = "BANISH_NEGATIVE_REASON"
}
modifier = { # Legalistic tradition
add = legalistic_vassal_punishment_acceptance
trigger = {
scope:banish = yes
}
scope:actor = {
has_imprisonment_reason = scope:recipient
culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
}
desc = tradition_legalistic_name
}
modifier = {
add = {
value = -50
if = {
limit = {
scope:recipient = {
ai_vengefulness > 0
}
}
subtract = ai_vengefulness
}
}
trigger = {
scope:gain_hook = yes
}
desc = "GAIN_HOOK_NEGATIVE_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
}
desc = "TAKE_VOWS_NEGATIVE_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = lustful
}
desc = "TAKE_VOWS_LUSTFUL_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = rakish
}
desc = "TAKE_VOWS_RAKISH_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = fornicator
}
desc = "TAKE_VOWS_FORNICATOR_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = seducer
}
desc = "TAKE_VOWS_SEDUCER_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = deviant
}
desc = "TAKE_VOWS_DEVIANT_REASON"
}
modifier = {
add = {
value = -15
multiply = num_sinful_traits
}
trigger = {
scope:take_vows = yes
num_sinful_traits > 1
}
desc = "TAKE_VOWS_SINS_REASON"
}
modifier = {
add = -30
trigger = {
scope:take_vows = yes
has_trait = cynical
}
desc = "TAKE_VOWS_CYNICAL_REASON"
}
modifier = {
add = -10
trigger = {
scope:recruit = yes
NOT = {
scope:actor = {
culture = {
has_cultural_parameter = can_recruit_prisoners_easily
}
}
}
}
desc = "RECRUITMET_NEGATIVE_REASON"
}
# Struggle
modifier = {
trigger = {
scope:demand_conversion = no
scope:renounce_claims = no
scope:banish = no
scope:gain_hook = no
scope:take_vows = no
scope:recruit = no
}
scope:recipient = {
any_character_struggle = {
involvement = involved
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_release_important
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_release_important
}
}
}
add = 200
}
}
}
}
# AI
ai_targets = {
ai_recipients = prisoners
}
ai_frequency = 1
ai_potential = {
has_prisoners = yes
}
ai_will_do = {
base = 0
modifier = {
add = 20
scope:demand_conversion = yes
}
modifier = {
add = 100
scope:demand_conversion = yes
scope:recipient = {
is_vassal_of = scope:actor
}
}
modifier = {
add = 30
scope:renounce_claims = yes
}
modifier = {
add = 50
scope:banish = yes
}
modifier = {
add = 30
scope:take_vows = yes
}
modifier = {
add = 10
scope:recruit = yes
}
modifier = {
add = 30
scope:disfigure = yes
}
modifier = {
add = 20
scope:blind = yes
}
modifier = {
add = 50
scope:castrate = yes
}
modifier = { # Rivals can rot
add = -40
scope:actor = {
NOT = {
has_trait = forgiving
}
}
scope:recipient = {
OR = {
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
scope:recipient = {
is_spouse_of = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
}
}
}
modifier = { # Rivals can rot FOREVER if vengeful
add = -100
scope:actor = {
NOT = {
has_trait = forgiving
}
}
scope:actor.ai_vengefulness >= very_high_positive_ai_value
scope:recipient = {
OR = {
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
scope:recipient = {
is_spouse_of = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
}
}
}
modifier = { # Compassionate characters don't want to keep children in their dungeon for too long
add = 10
scope:actor = {
is_at_war = no
ai_compassion >= low_positive_ai_value
}
scope:recipient = {
is_adult = no
time_in_prison = { years > 1 }
}
}
modifier = { # Very compassionate characters tend to release prisoners
add = 10
scope:actor = {
is_at_war = no
ai_compassion >= very_high_positive_ai_value
}
scope:recipient = {
time_in_prison = { years > 1 }
}
}
modifier = { # Somewhat compassionate characters tend to keep people in their dungeon for a while
add = 10
scope:actor = {
is_at_war = no
ai_compassion >= medium_positive_ai_value
}
scope:recipient = {
is_playable_character = no
time_in_prison = { years > 3 }
}
}
modifier = { # Only truly discompassionate characters will have their dungeon full of hapless victims after 5 years
add = 10
scope:actor = {
is_at_war = no
ai_compassion >= low_negative_ai_value
}
scope:recipient = {
is_playable_character = no
time_in_prison = { years > 5 }
}
}
modifier = { # Most AI characters will let family out...
add = 10
scope:actor = {
is_at_war = no
OR = {
ai_compassion >= very_high_positive_ai_value
AND = {
ai_compassion >= high_negative_ai_value
opinion = {
target = scope:recipient
value >= low_negative_opinion
}
}
}
}
scope:recipient = {
time_in_prison = { years > 1 }
is_playable_character = no
is_close_family_of = scope:actor
}
}
modifier = { # Almost all will let their own children out
add = 40
scope:actor = {
is_at_war = no
ai_compassion >= very_high_negative_ai_value
}
scope:recipient = {
is_playable_character = no
is_child_of = scope:actor
}
}
# Struggle
modifier = {
trigger = {
scope:demand_conversion = no
scope:renounce_claims = no
scope:banish = no
scope:gain_hook = no
scope:take_vows = no
scope:recruit = no
}
scope:recipient = {
any_character_struggle = {
involvement = involved
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_release_important
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_release_important
}
NOT = {
ai_greed >= 25
}
OR = {
ai_compassion > 50
AND = {
ai_compassion > 0
scope:recipient = {
time_in_prison = { years > 1 }
}
}
}
}
}
add = 200
}
}
}
modifier = { # Family Feud
add = -50
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
}
#Byz AI can shove vassals off to remote monasteries - weigh that here
modifier = {
add = -10
scope:take_vows = yes
scope:actor = {
culture = { has_cultural_pillar = heritage_byzantine }
}
scope:recipient = { is_vassal_or_below_of = scope:actor }
}
evaluate_action_increasing_house_unity = {
VALUE = 100
}
#don't release prisoners that are tied with a prison break contract, we don't want it invalidating all the time
modifier = {
factor = 0
scope:recipient = {
has_character_flag = being_prisonbroken_by_laamp
}
}
}
}
execute_prisoner_interaction = {
interface_priority = 120
common_interaction = yes
category = interaction_category_prison
special_interaction = execute_prisoner_interaction
icon = icon_dead
desc = execute_prisoner_interaction_desc
ai_targets = {
ai_recipients = prisoners
}
ai_frequency = 12
ai_potential = {
is_at_war = no
}
ai_will_do = {
base = 0
opinion_modifier = {
trigger = {
NOT = { scope:actor = scope:recipient }
}
opinion_target = scope:recipient
multiplier = -1
}
ai_value_modifier = {
ai_compassion = -1
}
modifier = {
add = -20
ai_compassion >= low_positive_ai_value
scope:recipient = { is_adult = no }
}
# Try to avoid Kinslaying
modifier = {
add = -20
scope:actor.dynasty = scope:recipient.dynasty
NOT = { faith = { has_doctrine = doctrine_kinslaying_any_dynasty_member_crime } }
}
modifier = {
add = -20
is_close_or_extended_family_of = scope:recipient
NOT = { faith = { has_doctrine = doctrine_kinslaying_extended_family_crime } }
}
modifier = {
add = -20
is_close_family_of = scope:recipient
NOT = { faith = { has_doctrine = doctrine_kinslaying_close_kin_crime } }
}
modifier = {
add = 50
has_execute_reason = scope:recipient
OR = {
has_trait = sadistic
has_trait = lunatic
}
}
modifier = { # Executing your way to new titles is a worthy cause...
add = 20
scope:actor = {
has_execute_reason = scope:recipient
ai_greed > 0
any_heir_title = { # Execute rulers you can inherit land from
exists = holder
holder = scope:recipient
}
}
}
modifier = { # Vengeful characters enjoy executing their rivals
add = 20
scope:actor = {
has_execute_reason = scope:recipient
ai_vengefulness >= medium_positive_ai_value
OR = {
has_relation_rival = scope:recipient # Execute rivals
has_relation_nemesis = scope:recipient # Execute rivals
scope:recipient = {
is_spouse_of = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
}
}
}
modifier = { # Executing your way to new titles is a worthy cause... and very greedy characters need no execution reason
add = 35
scope:actor = {
ai_greed >= very_high_positive_ai_value
any_heir_title = { # Execute rulers you can inherit land from
exists = holder
holder = scope:recipient
}
}
}
modifier = { # Vengeful characters enjoy executing their rivals, and very vengeful characters need no execution reason
add = 35
scope:actor = {
ai_vengefulness >= very_high_positive_ai_value
OR = {
has_relation_rival = scope:recipient # Execute rivals
has_relation_nemesis = scope:recipient # Execute rivals
scope:recipient = {
is_spouse_of = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
}
}
}
#Scope:target has caused internal strife in the realm
character_hates_scope_due_to_strife_modifier = { TARGET = scope:recipient }
modifier = {
factor = 0
scope:actor = {
NOR = { # Do not execute unless you have some sort of reason to do it
has_execute_reason = scope:recipient
has_relation_rival = scope:recipient # Execute rivals
has_relation_nemesis = scope:recipient # Execute rivals
scope:recipient = {
is_spouse_of = scope:actor
exposed_cheating_on_spouse_trigger = { SPOUSE = scope:actor }
}
any_heir_title = { # Execute rulers you can inherit land from
exists = holder
holder = scope:recipient
}
has_trait = lunatic # Self explanatory
}
}
}
# Agenda impact
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
}
is_important_or_vip_struggle_character = yes
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_important
}
has_character_flag = agenda_towards_escalation
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_important
}
}
}
add = -100
}
}
}
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
}
has_trait = fp3_struggle_supporter
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_supporter
}
has_trait = fp3_struggle_detractor
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_supporter
}
}
}
add = -100
}
}
}
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
}
has_trait = fp3_struggle_detractor
}
add = {
value = 0
if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_detractor
}
has_trait = fp3_struggle_supporter
}
}
add = 200
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_execute_detractor
}
}
}
add = -100
}
}
}
#don't kill prisoners that are tied with a prison break contract, we don't want it invalidating all the time
modifier = {
factor = 0
scope:recipient = {
has_character_flag = being_prisonbroken_by_laamp
}
}
}
is_shown = {
scope:recipient = {
OR = {
is_imprisoned_by = scope:actor
AND = {
is_diarch_of_target = scope:actor
scope:actor = { has_diarchy_active_parameter = diarchy_is_co_rulership }
}
}
}
}
is_valid_showing_failures_only = {
scope:recipient = { is_busy_in_events_localised = yes } #Prisoner
scope:recipient = { NOT = { has_strong_hook = scope:actor } }
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
# Blocked by current struggle phase
custom_tooltip = {
text = struggle_parameter_struggle_cannot_execute_involved_prisoners
NOT = {
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = struggle_cannot_execute_involved_prisoners
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
}
}
# For use with co-ruler diarchs.
scope:recipient = { is_imprisoned_by = scope:actor }
}
cost = {
# Usually, this action is free, but during certain diarchies, we want it to cost.
prestige = liege_diarchy_surcharge_interaction_execute_prisoner_interaction_value
}
on_accept = {
# If this is a co-ruler we're executing, tell us if we have alternatives.
scope:actor = {
if = {
limit = {
OR = {
AND = {
has_diarchy_active_parameter = diarchy_is_co_rulership
diarch ?= scope:recipient
}
AND = {
scope:recipient = { has_diarchy_active_parameter = diarchy_is_co_rulership }
is_diarch_of_target = scope:recipient
}
}
}
# If the player doesn't have to execute their partner, point that out.
if = {
limit = { liege_can_maim_co_ruler_without_killing_them_trigger = yes }
custom_tooltip = execute_prisoner_interaction.tt.can_maim_diarch
}
# Otherwise, if they're out diarch, we end it.
if = {
limit = { scope:actor.diarch = scope:recipient }
end_diarchy = yes
every_player = {
limit = {
NOR = {
this = scope:actor
this = scope:recipient
}
top_liege = scope:actor.top_liege
}
trigger_event = diarchy.8022
}
}
# Else, usurp.
else = {
custom_description_no_bullet = {
text = execute_prisoner_interaction_tt_co_emperor_usurpation
object = scope:recipient
}
create_title_and_vassal_change = {
type = usurped
save_scope_as = change
}
scope:recipient = {
every_held_title = {
limit = {
OR = {
this = scope:recipient.capital_county
this = scope:recipient.capital_county.duchy
AND = {
tier = tier_county
this.duchy = scope:recipient.capital_county.duchy
}
tier >= scope:recipient.highest_held_title_tier
}
}
change_title_holder = {
holder = scope:actor
change = scope:change
}
}
every_vassal = {
custom = custom.recipient_every_vassal
change_liege = {
LIEGE = scope:actor
CHANGE = scope:change
}
}
hidden_effect = {
change_liege = {
LIEGE = scope:actor
CHANGE = scope:change
}
}
}
resolve_title_and_vassal_change = scope:change
every_player = {
limit = {
NOR = {
this = scope:actor
this = scope:recipient
}
top_liege = scope:actor.top_liege
}
trigger_event = diarchy.8023
}
}
}
# Regardless, this is legit politics, so we don't deduct legitimacy for it.
save_scope_value_as = {
name = suppress_legitimacy_from_crime
value = yes
}
}
# Now, the rest of it.
if = {
limit = { scope:recipient = { is_imprisoned_by = scope:actor } }
# Are you HumSac'ing the HoF of a faith that doesn't practice HumSac?
hidden_effect = {
scope:actor = {
humsacd_a_hof_effect = {
SACRIFICER = scope:actor
SACRIFICED_HOF = scope:recipient
}
}
}
if = {
limit = { always = scope:execution_public }
if = {
limit = {
scope:actor.capital_county = {
NOT = { has_county_modifier = held_public_execution_modifier }
}
}
custom_description_no_bullet = {
text = public_execution_tooltip
}
scope:actor = {
capital_county = {
add_county_modifier = {
modifier = held_public_execution_modifier
days = 1850
}
}
custom_tooltip = public_execution_control_effect
hidden_effect = {
every_held_title = {
limit = {
tier = tier_county
}
change_county_control = executioner_control_value
}
}
}
}
else = {
custom_description_no_bullet = {
text = public_execution_too_soon_tooltip
}
}
}
# Other Effects
if = { # Boil their skull?
limit = {
NOT = { always = scope:execution_devour }
scope:actor = {
has_relation_rival = scope:recipient
has_personality_malicious_trigger = yes
has_royal_court = yes
has_dlc_feature = court_artifacts
}
scope:recipient = {
is_adult = yes
}
}
scope:actor = {
random = {
chance = {
value = 25
if = {
limit = {
has_relation_nemesis = scope:recipient
}
add = 75
}
}
hidden_effect = {
scope:recipient = {
save_scope_as = skull_to_boil
}
trigger_event = {
id = artifact.7000
days = { 3 10 }
}
}
}
}
}
if = {
limit = {
NOT = { always = scope:execution_devour }
scope:actor = {
is_adult = no
age >= 4
is_ai = no
NOT = { has_character_flag = witnessed_execution_flag }
}
scope:recipient = {
is_adult = yes
}
}
scope:actor = { trigger_event = bp1_yearly.9045 }
}
else_if = {
limit = {
NOT = { always = scope:execution_devour }
scope:actor = {
OR = {
has_relation_friend = scope:recipient
has_relation_lover = scope:recipient
}
is_ai = no
}
scope:recipient = {
is_adult = yes
}
}
scope:actor = { trigger_event = bp1_yearly.9044 }
}
# Gallowsbait.
scope:actor = {
if = {
limit = {
is_landless_adventurer = yes
scope:recipient = {
is_landless_adventurer = no
is_ruler = yes
}
}
if = {
limit = { scope:recipient.highest_held_title_tier >= tier_empire }
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MAX = gallowsbait_xp_massive_gain
XP_MIN = gallowsbait_xp_massive_gain
}
}
else_if = {
limit = { scope:recipient.highest_held_title_tier >= tier_kingdom }
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MAX = gallowsbait_xp_major_gain
XP_MIN = gallowsbait_xp_major_gain
}
}
else_if = {
limit = { scope:recipient.highest_held_title_tier >= tier_duchy }
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MAX = gallowsbait_xp_medium_gain
XP_MIN = gallowsbait_xp_medium_gain
}
}
else_if = {
limit = { scope:recipient.highest_held_title_tier >= tier_barony }
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MAX = gallowsbait_xp_minor_gain
XP_MIN = gallowsbait_xp_minor_gain
}
}
else = {
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MAX = 2
XP_MIN = 2
}
}
}
}
# FP3
# Struggle Catalysts
scope:actor = {
if = { # Execute important
limit = {
scope:recipient = { is_important_or_vip_struggle_character = yes }
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_important
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_important
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_execute_important
character = scope:actor
}
}
}
if = { # Execute Supporter/Detractor
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:actor
SECOND = scope:recipient
}
}
if = {
limit = {
scope:recipient = { has_trait = fp3_struggle_detractor }
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_detractor
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_detractor
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_execute_detractor
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = stabil_catalyst_execute_detractor }
}
}
else_if = {
limit = {
scope:recipient = { has_trait = fp3_struggle_supporter }
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_supporter
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_execute_supporter
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_execute_supporter
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = unrest_catalyst_execute_supporter }
}
}
}
# Free House Member CB target executed during war
if = {
limit = {
exists = scope:recipient.house
any_character_war = {
using_cb = fp3_free_house_member_cb
is_defender = scope:actor
primary_attacker.house = scope:recipient.house
}
}
random_character_war = {
limit = {
using_cb = fp3_free_house_member_cb
is_defender = scope:actor
primary_attacker.house = scope:recipient.house
}
primary_attacker = {
add_opinion = {
target = scope:actor
modifier = executed_close_relation_opinion
}
}
}
add_prestige = {
value = medium_piety_loss
multiply = {
value = ai_honor
add = 1
}
}
every_vassal = {
limit = {
OR = {
has_vassal_stance = courtly
has_vassal_stance = glory_hound
ai_honor > 0.48
}
}
add_opinion = {
target = scope:actor
modifier = executed_valuable_prisoner_modifier
}
}
}
}
# Kill the target
if = {
limit = {
scope:recipient = { is_ai = no }
scope:actor = { is_ai = yes }
}
scope:recipient = { trigger_event = char_interaction.0170 } # Give players a chance to see what's about to happen
show_as_tooltip = {
execute_prisoner_effect = {
VICTIM = scope:recipient
EXECUTIONER = scope:actor
}
}
}
else = {
scope:recipient = { trigger_event = char_interaction.0171 }
execute_prisoner_effect = {
VICTIM = scope:recipient
EXECUTIONER = scope:actor
}
}
if = {
limit = { always = scope:execution_devour }
scope:actor = {
custom_tooltip = devour_as_execution_tooltip
if = {
limit = {
faith = { has_doctrine_parameter = cannibalism_legal }
NOT = { has_trait = cannibal }
}
add_trait = cannibal
}
stress_impact = {
base = medium_stress_impact_loss
compassionate = miniscule_stress_impact_gain
forgiving = miniscule_stress_impact_gain
}
random = {
chance = 20
show_as_tooltip = { add_trait = ill }
hidden_effect = {
trigger_event = {
id = health.1001
days = { 3 10 }
}
}
}
}
}
if = {
limit = { always = scope:execution_provisions }
scope:actor = {
domicile ?= {
change_provisions = human_provision_value
}
}
}
if = {
limit = {
always = scope:execution_burned
scope:actor.faith = {
has_doctrine = doctrine_pluralism_fundamentalist
}
}
scope:actor = {
add_piety = miniscule_piety_value
}
}
scope:actor = {
hidden_effect = {
send_interface_message = {
type = event_prison_neutral
title = msg_execute_prisoner
right_icon = scope:recipient
custom_tooltip = msg_execute_prisoner_desc
}
}
}
}
}
options_heading = execution_options_heading
send_option = {
is_shown = {
scope:actor.faith = scope:recipient.faith
NOT = {
scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active }
}
}
flag = execution_beheaded
localization = "EXECUTION_BEHEADED"
}
#Cannibal option. Should be treated as a "normal" execution, but that you eat the body afterwards (in secret if faith does not allow it).
send_option = {
is_shown = {
scope:actor = {
OR = {
scope:actor.faith = { has_doctrine_parameter = cannibalism_legal }
has_trait = cannibal
any_secret = { secret_type = secret_cannibal }
}
}
}
flag = execution_devour
localization = "EXECUTION_DEVOUR"
}
send_option = {
is_shown = {
NOT = {
scope:actor.faith = scope:recipient.faith
scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active }
}
}
flag = execution_burned
localization = "EXECUTION_BURNED"
}
send_option = {
is_shown = {
scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active }
}
flag = execution_sacrifice
localization = "EXECUTION_SACRIFICE"
}
send_option = {
is_shown = {
scope:actor = {
employs_court_position = executioner_court_position
any_court_position_holder = {
type = executioner_court_position
is_physically_able = yes
}
exists = capital_county
}
}
is_valid = {
scope:actor = {
NOT = {
capital_county = {
has_county_modifier = held_public_execution_modifier
}
}
}
}
flag = execution_public
localization = "EXECUTION_PUBLIC"
}
send_option = {
is_shown = {
scope:actor = {
employs_court_position = kennelperson_camp_officer
any_court_position_holder = {
type = kennelperson_camp_officer
is_physically_able = yes
}
}
}
flag = execution_kennel
localization = "EXECUTION_KENNEL"
}
send_option = {
is_shown = {
scope:actor = {
is_landless_adventurer = yes
has_perk = fear_tax_perk
}
}
flag = execution_provisions
localization = "EXECUTION_PROVISIONS"
}
send_options_exclusive = yes
auto_accept = yes
}
debug_imprison_simple_interaction = {
use_diplomatic_range = no
category = interaction_debug_main
ignores_pending_interaction_block = yes
icon = prison
interface_priority = 1000
common_interaction = yes
is_shown = {
debug_only = yes
scope:recipient = {
is_imprisoned = no
}
NOT = {
scope:recipient = scope:actor
}
}
on_accept = {
scope:actor = {
imprison = {
target = scope:recipient
type = house_arrest
}
}
}
auto_accept = yes
}
torture_interaction = {
interface_priority = 30
common_interaction = yes
icon = torture_interaction
category = interaction_category_prison
desc = torture_interaction_desc
#cooldown = { years = 1 }
cooldown_against_recipient = { years = 5 }
is_shown = {
scope:recipient = { is_imprisoned_by = scope:actor }
scope:recipient = { is_adult = yes }
scope:actor = { is_adult = yes }
}
is_valid_showing_failures_only = {
#scope:recipient = {
# NOT = {
# health <= 1.5 #Because torture would definitely kill them
# }
#}
scope:actor = {
trigger_if = {
limit = {
domicile ?= { is_domicile_type = camp }
}
custom_tooltip = {
text = laamp_torture_requires_tools_tt
domicile = { has_domicile_parameter = camp_unlocks_torture_interaction }
}
}
}
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
is_highlighted = {
OR = {
scope:actor = { has_trait = sadistic }
scope:actor = { has_relation_rival = scope:recipient }
scope:actor = { has_relation_nemesis = scope:recipient }
}
}
on_accept = {
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
scope:actor = { save_scope_as = bg_override_char }
###EFFECT TOOLTIP###
torture_interaction_actor_effect = yes
show_as_tooltip = {
scope:recipient = {
add_character_modifier = {
modifier = recently_tortured
years = 5
}
}
}
if = {
limit = {
scope:actor = {
domicile ?= { has_domicile_parameter = estate_torture_grants_influence }
}
}
scope:actor = { custom_tooltip = estate_torture_grants_influence_desc }
}
###EVENTS###
hidden_effect = {
#Torture method for descs
random_list = {
3 = { save_scope_value_as = { name = torture_method value = flag:rack } }
3 = { save_scope_value_as = { name = torture_method value = flag:whip } }
1 = { save_scope_value_as = { name = torture_method value = flag:rats } }
8 = {
trigger = {
scope:actor = { has_trait = poet }
}
save_scope_value_as = {
name = torture_method
value = flag:poetry
}
}
}
#They have a secret I want to know about
if = {
limit = {
scope:recipient = {
OR = {
any_secret = {
torture_secret_trigger = { PARTICIPANT = scope:recipient }
}
any_known_secret = {
secret_owner = { save_temporary_scope_as = torture_secret_owner }
torture_secret_trigger = { PARTICIPANT = scope:torture_secret_owner }
}
}
}
}
scope:recipient = {
trigger_event = {
id = prison.1001
days = 1
}
}
}
else = {
scope:actor = {
trigger_event = {
id = prison.1010
days = 1
}
}
}
}
# Dark Insights Perk:
if = {
limit = {
scope:actor = { has_perk = dark_insights_perk }
}
scope:actor = {
dark_insights_skill_gain_roll_effect = yes
}
}
}
auto_accept = yes
# AI
ai_targets = {
ai_recipients = prisoners
}
ai_frequency = 24
ai_potential = {
always = yes
}
ai_will_do = {
base = -25
modifier = {
has_trait = sadistic
add = 30
}
ai_value_modifier = {
ai_compassion = tiny_chance_impact_negative_ai_value #Adds +50 for highly uncompassionate characters, -50 for highly compassionate characters
}
opinion_modifier = {
opinion_target = scope:recipient
multiplier = -0.25
}
#Scope:target has caused internal strife in the realm
character_hates_scope_due_to_strife_modifier = { TARGET = scope:recipient }
modifier = { # Family Feud
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
add = 30
}
modifier = {
scope:actor = {
has_opinion_modifier = {
modifier = tried_to_escape_from_prison_opinion
target = scope:recipient
}
}
add = 25
}
}
}
castrate_interaction = {
interface_priority = 30
icon = eunuch
category = interaction_category_prison
desc = castrate_interaction_desc
is_shown = {
scope:recipient = {
is_imprisoned_by = scope:actor
is_eunuch_trigger = no
is_male = yes
}
scope:actor = {
is_adult = yes
OR = {
culture = { has_cultural_parameter = can_castrate_prisoners }
top_liege.primary_title = {
has_variable = emulating_byz_punishment_var
}
}
# If they're our partner emperor, we should use the maiming interaction instead.
liege_should_systematically_maim_co_ruler_trigger = no
}
}
is_valid_showing_failures_only = {
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
is_highlighted = {
OR = {
scope:actor = { has_trait = sadistic }
scope:actor = { has_relation_rival = scope:recipient }
scope:recipient = {
any_claim = {
holder = scope:actor
}
}
}
}
on_accept = {
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
blind_castrate_and_disfigure_effect = yes #Stress & dread
show_as_tooltip = {
scope:recipient = {
if = {
limit = {
age < 12
}
ep3_child_castration_effect = yes
}
else = {
ep3_youth_castration_effect = yes
}
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = castrated }
scope:actor = {
save_scope_as = bg_override_char
trigger_event = {
id = prison.1025
days = 1
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_abelarding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = yes
ai_targets = {
ai_recipients = prisoners
}
ai_potential = {
always = yes
}
ai_will_do = {
base = -20
modifier = {
has_trait = sadistic
add = 20
}
ai_value_modifier = {
ai_compassion = tiny_chance_impact_negative_ai_value #Adds +50 for highly uncompassionate characters, -50 for highly compassionate characters
}
opinion_modifier = {
opinion_target = scope:recipient
multiplier = -0.25
}
#Scope:target has caused internal strife in the realm
character_hates_scope_due_to_strife_modifier = { TARGET = scope:recipient }
modifier = { # Family Feud
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
add = 30
}
modifier = {
scope:actor = {
has_opinion_modifier = {
modifier = tried_to_escape_from_prison_opinion
target = scope:recipient
}
}
add = 25
}
#Cruel Latins are really into this
modifier = {
top_liege.primary_title = {
has_variable = emulating_byz_punishment_var
}
add = 30
}
}
ai_frequency = 36
}
blind_interaction = {
interface_priority = 30
icon = blind
category = interaction_category_prison
desc = blind_interaction_desc
is_shown = {
scope:recipient = {
is_imprisoned_by = scope:actor
NOT = { has_trait = blind }
}
scope:actor = {
is_adult = yes
OR = {
culture = { has_cultural_parameter = can_blind_prisoners }
top_liege.primary_title = {
has_variable = emulating_byz_punishment_var
}
}
# If they're our partner emperor, we should use the maiming interaction instead.
liege_should_systematically_maim_co_ruler_trigger = no
}
}
is_valid_showing_failures_only = {
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
PRISONER = scope:recipient
REGENT = scope:recipient.var:imprisoned_by_diarch
}
}
is_highlighted = {
OR = {
scope:actor = { has_trait = sadistic }
scope:actor = { has_relation_rival = scope:recipient }
scope:recipient = {
any_claim = {
holder = scope:actor
}
}
scope:actor = {
culture = { has_cultural_parameter = merciful_blinding }
OR = {
has_execute_reason = scope:recipient
has_banish_reason = scope:recipient
}
}
}
}
on_accept = {
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
blind_castrate_and_disfigure_effect = yes #Stress & dread
show_as_tooltip = {
scope:recipient = {
add_trait = blind
release_from_prison = yes
}
}
# Merciful Blindings
scope:actor = {
if = {
limit = {
culture = { has_cultural_parameter = merciful_blinding }
OR = {
has_execute_reason = scope:recipient
has_banish_reason = scope:recipient
}
}
add_piety = medium_piety_gain
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = blinded }
scope:actor = {
save_scope_as = bg_override_char
trigger_event = {
id = prison.1020
days = 1
}
}
# If we're a clan this interaction affects unity
if = {
limit = { scope:actor.culture = { has_cultural_parameter = merciful_blinding } } # If actor's culture has Merciful Blindings, they lose less unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else = {
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
auto_accept = yes
ai_targets = {
ai_recipients = prisoners
}
ai_potential = {
always = yes
}
ai_will_do = {
base = -20
modifier = {
has_trait = sadistic
add = 20
}
ai_value_modifier = {
ai_compassion = tiny_chance_impact_negative_ai_value #Adds +50 for highly uncompassionate characters, -50 for highly compassionate characters
}
opinion_modifier = {
opinion_target = scope:recipient
multiplier = -0.25
}
#Scope:target has caused internal strife in the realm
character_hates_scope_due_to_strife_modifier = { TARGET = scope:recipient }
modifier = { # Family Feud
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
add = 30
}
modifier = {
scope:actor = {
has_opinion_modifier = {
modifier = tried_to_escape_from_prison_opinion
target = scope:recipient
}
}
add = 25
}
#Cruel Latins are really into this
modifier = {
top_liege.primary_title = {
has_variable = emulating_byz_punishment_var
}
add = 30
}
}
ai_frequency = 36
}
prison_break_contract_interaction = {
interface_priority = 30
common_interaction = yes
icon = prison
category = interaction_category_prison
desc = prison_break_contract_interaction_desc
cooldown_against_recipient = { years = 1 }
is_shown = {
scope:actor = {
any_character_active_contract = {
has_task_contract_type = laamp_prison_break_contract
OR = {
var:task_contract_target = scope:recipient
var:task_contract_object = scope:recipient
var:task_contract_employer = scope:recipient
}
}
}
}
redirect = {
scope:actor = {
random_character_active_contract = {
limit = {
has_task_contract_type = laamp_prison_break_contract
OR = {
var:task_contract_target = scope:recipient
var:task_contract_object = scope:recipient
var:task_contract_employer = scope:recipient
}
}
var:task_contract_object = {
save_scope_as = secondary_recipient
}
var:task_contract_target = {
save_scope_as = recipient
}
var:task_contract_employer = {
save_scope_as = secondary_actor
}
}
}
}
is_highlighted = {
always = yes
}
on_accept = {
scope:actor = {
start_scheme = {
type = laamp_prison_break_scheme
target_character = scope:recipient
}
random_scheme = {
limit = {
scheme_type = laamp_prison_break_scheme
scheme_target_character = scope:recipient
}
save_scope_as = scheme
}
#save scopes for scheme start event
scope:secondary_recipient = {
save_scope_as = task_contract_object
}
scope:recipient = {
save_scope_as = task_contract_target
}
scope:secondary_actor = {
save_scope_as = task_contract_employer
}
trigger_event = laamp_extra_contract_schemes.0011
}
}
auto_accept = yes
}
systematically_maim_character_interaction = {
interface_priority = 30
icon = torture_interaction
category = interaction_category_diarch
common_interaction = yes
desc = systematically_maim_character_interaction_desc
is_shown = {
scope:actor = { liege_should_systematically_maim_co_ruler_trigger = yes }
}
is_valid_showing_failures_only = {
scope:actor = { is_adult = yes }
scope:recipient = {
custom_description = {
text = "currently_being_tortured"
NOT = { has_character_flag = is_being_tortured }
}
}
scope:recipient = { is_imprisoned_by = scope:actor }
# There's literally nothing left to remove.
scope:recipient = {
NAND = {
OR = {
is_eunuch_trigger = yes
is_female = yes
}
has_trait = blind
has_trait = disfigured
has_trait = maimed
has_trait = one_legged
}
}
}
send_option = {
flag = maim_castrate
is_valid = {
scope:recipient = {
NOR = {
is_eunuch_trigger = yes
is_female = yes
}
}
}
localization = maim_castrate_name
current_description = maim_castrate
}
send_option = {
flag = maim_blind
is_valid = {
scope:recipient = {
NOT = { has_trait = blind }
}
}
localization = maim_blind_name
current_description = maim_blind
}
send_option = {
flag = maim_face
is_valid = {
scope:recipient = {
NOT = { has_trait = disfigured }
}
}
localization = maim_face_name
current_description = maim_face
}
send_option = {
flag = maim_leg
is_valid = {
scope:recipient = {
NOT = { has_trait = one_legged }
}
}
localization = maim_leg_name
current_description = maim_leg
}
send_option = {
flag = maim_arm
is_valid = {
scope:recipient = {
NOT = { has_trait = maimed }
}
}
localization = maim_arm_name
current_description = maim_arm
}
on_accept = {
scope:recipient = {
add_character_flag = {
flag = is_being_tortured
months = 6 # Players in MP can keep the event window open...
}
}
# Stress & dread
blind_castrate_and_disfigure_effect = yes
# Our diarchy will be destroyed.
save_scope_value_as = {
name = destroy_diarchy
value = yes
}
show_as_tooltip = {
scope:actor = { maiming_destroy_diarchy_effect = yes }
}
#TODO_CD_EP3_POLISH; the copy in the below events could _really_ use some polishing up. It's okay but it's a bit meh, and it'd be nice if it reacted more to who you're maiming and why.
# Let the enchoppening begin.
## Castrate.
if = {
limit = { scope:maim_castrate = yes }
show_as_tooltip = {
scope:recipient = {
if = {
limit = {
age < 12
}
ep3_child_castration_effect = yes
}
else = {
ep3_youth_castration_effect = yes
}
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = castrated }
scope:actor = {
clear_designated_heir = yes
trigger_event = {
id = prison.1025
days = 1
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_abelarding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
## Blind.
if = {
limit = { scope:maim_blind = yes }
show_as_tooltip = {
scope:recipient = {
add_trait = blind
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = blinded }
scope:actor = {
clear_designated_heir = yes
# Merciful Blindings
if = {
limit = {
culture = { has_cultural_parameter = merciful_blinding }
OR = {
has_execute_reason = scope:recipient
has_banish_reason = scope:recipient
}
}
add_piety = medium_piety_gain
}
trigger_event = {
id = prison.1020
days = 1
}
}
# If actor's culture has Merciful Blindings, they lose less unity.
if = {
limit = {
scope:actor.culture = { has_cultural_parameter = merciful_blinding }
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
else = {
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_blinding.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
## Disfigure.
if = {
limit = { scope:maim_face = yes }
show_as_tooltip = {
scope:recipient = {
add_trait = disfigured
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = disfigured }
scope:actor = {
clear_designated_heir = yes
trigger_event = {
id = prison.1030
days = 1
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_maimed.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
## Take off an arm.
if = {
limit = { scope:maim_arm = yes }
show_as_tooltip = {
scope:recipient = {
apply_maimed_trait_and_modifier_effect = yes
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = maimed }
scope:actor = {
clear_designated_heir = yes
save_scope_value_as = {
name = maim_type
value = flag:arm
}
trigger_event = {
id = prison.1041
days = 1
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_maimed.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
## Take off a leg.
if = {
limit = { scope:maim_leg = yes }
show_as_tooltip = {
scope:recipient = {
add_trait = one_legged
release_from_prison = yes
}
}
torture_blind_castrate_disfigure_opinion_effect = { VERB = maimed }
scope:actor = {
clear_designated_heir = yes
save_scope_value_as = {
name = maim_type
value = flag:leg
}
trigger_event = {
id = prison.1041
days = 1
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = major_unity_loss
DESC = clan_unity_maimed.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
auto_accept = yes
ai_targets = { ai_recipients = prisoners }
ai_potential = {
has_diarchy_active_parameter = diarchy_is_co_rulership
liege_can_maim_co_ruler_without_killing_them_trigger = yes
}
ai_will_do = {
base = -50
modifier = {
has_trait = sadistic
add = 50
}
modifier = {
has_trait = callous
add = 40
}
ai_value_modifier = {
ai_compassion = tiny_chance_impact_negative_ai_value #Adds +50 for highly uncompassionate characters, -50 for highly compassionate characters
}
opinion_modifier = {
opinion_target = scope:recipient
multiplier = -1
}
#Scope:target has caused internal strife in the realm
character_hates_scope_due_to_strife_modifier = { TARGET = scope:recipient }
modifier = { # Family Feud
exists = scope:actor.house
exists = scope:recipient.house
scope:actor = {
house.house_head = {
any_owned_story = {
story_type = story_cycle_house_feud
has_variable = house_feud_house
var:house_feud_house = scope:recipient.house
}
}
has_opinion_modifier = {
modifier = house_feud_opinion
target = scope:recipient.house.house_head
}
}
add = 30
}
modifier = {
scope:actor = {
has_opinion_modifier = {
modifier = tried_to_escape_from_prison_opinion
target = scope:recipient
}
}
add = 25
}
}
ai_frequency = 60
}