### # SPECIAL NOTE # # When evaluating whether or not the AI can send this interaction to the # player, the AI will use the ai_accept value and send a proposal to the # player IF AND ONLY IF the player, as an AI actor, would have positive # ai_accept value. This is a special case for this specific interaction, # and is being calculated specifically in code. # arrange_marriage_interaction = { icon = icon_marriage category = interaction_category_diplomacy common_interaction = yes filter_tags = { ceremonial_liege } override_background = { reference = relaxing_room } special_interaction = arrange_marriage_interaction interface = marriage use_diplomatic_range = { trigger_if = { limit = { exists = scope:secondary_actor.betrothed } NOT = { scope:secondary_actor = { betrothed = scope:secondary_recipient } } } } recipient_recieve_cooldown = { years = marriage_recieve_proposal_cooldown } ignore_recipient_recieve_cooldown = { AND = { is_ai = no scope:recipient = { is_ai = no } } } desc = { first_valid = { triggered_desc = { trigger = { scope:actor = scope:recipient } desc = arrange_marriage_interaction_desc_ruler_at_own_court } triggered_desc = { trigger = { scope:actor = { can_marry_character_trigger = { CHARACTER = scope:recipient } } scope:recipient = { is_ruler = yes } } desc = arrange_marriage_interaction_desc_both_rulers_can_marry } triggered_desc = { trigger = { scope:recipient = { is_ruler = yes can_marry_trigger = yes } } desc = arrange_marriage_interaction_desc_both_rulers_recipient_only_can_marry } triggered_desc = { trigger = { scope:recipient = { is_ruler = yes } } desc = arrange_marriage_interaction_desc_both_rulers_recipient_neither_can_marry } triggered_desc = { trigger = { scope:actor = { can_marry_character_trigger = { CHARACTER = scope:recipient } } } desc = arrange_marriage_interaction_desc_one_ruler_can_marry } desc = arrange_marriage_interaction_desc_recipient_one_ruler_cannot_marry } } redirect = { # If the define MARRIAGE_OWNER_IS_MATCHMAKER is set to yes, the actor must end up as the "matchmaker" link for courtiers scope:actor = { if = { limit = { exists = matchmaker NOT = { this = matchmaker } } save_scope_as = secondary_actor matchmaker = { save_scope_as = actor } } if = { limit = { is_betrothed = yes betrothed = scope:recipient } save_scope_as = secondary_actor } } scope:recipient = { if = { limit = { is_betrothed = yes betrothed.matchmaker = scope:actor is_adult = yes betrothed = { is_adult = yes } } save_scope_as = secondary_recipient matchmaker = { save_scope_as = recipient } betrothed = { save_scope_as = secondary_actor } } # marriage interactions are special, and code sets scopes in an unusual way # secondary recipient must always be set for marriage script, # but marriage UI only sets primary recipient # make sure redirect solves this issue if = { limit = { exists = matchmaker this = matchmaker NOT = { exists = scope:secondary_recipient } } save_scope_as = secondary_recipient } if = { limit = { exists = matchmaker NOT = { this = matchmaker } } save_scope_as = secondary_recipient matchmaker = { save_scope_as = recipient } } } } populate_actor_list = { scope:actor = { add_to_list = characters every_courtier = { limit = { trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_courtier_away = { limit = { trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { even_if_dead = yes if = { limit = { is_alive = yes NOT = { is_in_list = characters } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { even_if_dead = yes if = { limit = { is_alive = yes NOT = { is_in_list = characters } OR = { top_liege = scope:actor house.house_head = scope:actor dynasty.dynast = scope:actor } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { if = { limit = { is_alive = yes NOT = { is_in_list = characters } OR = { top_liege = scope:actor house.house_head = scope:actor dynasty.dynast = scope:actor } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } } } } } } populate_recipient_list = { scope:recipient = { add_to_list = characters every_courtier = { add_to_list = characters } every_courtier_away = { add_to_list = characters } every_child = { limit = { NOT = { is_in_list = characters } } add_to_list = characters } } } interface_priority = 60 cost = { prestige = { value = 0 if = { limit = { exists = scope:actor exists = scope:recipient exists = scope:secondary_recipient exists = scope:secondary_actor scope:secondary_actor = { is_close_family_of = scope:actor } scope:recipient = { OR = { AND = { vassal_contract_has_flag = vassal_contract_marriage_favor is_allied_to = scope:actor } NOT = { vassal_contract_has_flag = vassal_contract_marriage_favor} } } } add = { scope:actor = { every_vassal = { limit = { vassal_contract_has_flag = vassal_contract_marriage_favor NOT = { is_allied_to = scope:actor } NOR = { this = scope:recipient this = scope:secondary_recipient } } add = medium_prestige_value } } desc = VASSAL_WITH_MARRIAGE_FAVOR } } } piety = { value = 0 if = { limit = { scope:piety_cost_reduction = yes } add = scope:actor.medium_piety_value desc = STRUGGLE_MARRIAGE_ACCEPTANCE_USING_PIETY_AS_CURRENCY } } influence = { value = 0 if = { limit = { scope:influence_send_option = yes } add = scope:actor.medium_influence_value desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION } } } # actor, recipient ... characters arranging the marriage # secondary_actor, secondary_recipient ... characters that should marry is_shown = { scope:actor = { OR = { is_ruler = yes #Can arrange marriages for others #You're just a courtier? Only use the interaction on characters you can marry can_marry_character_trigger = { CHARACTER = scope:recipient } } } # Block further marriage proposals for people who have a pending grand wedding NOR = { scope:secondary_actor ?= { has_been_promised_grand_wedding = yes } scope:secondary_recipient ?= { has_been_promised_grand_wedding = yes } } #If you're interacting with someone who isn't their own matchmaker, only show the interaction if they can get married. (If someone isn't their own matchmaker, they will be set as secondary_recipient by code and their matchmaker becomes recipient) trigger_if = { limit = { exists = scope:secondary_recipient scope:secondary_recipient.matchmaker != scope:secondary_recipient } scope:secondary_recipient = { OR = { marriage_interaction_can_be_picked_trigger = yes #Can marry anyone AND = { ready_to_marry_betrothed_trigger = yes OR = { betrothed = scope:secondary_actor trigger_if = { limit = { exists = betrothed.liege } betrothed.liege = scope:actor } } } } #To account for a person marrying their concubines trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } } #allow landless adventurers to marry only within their camp, or with Contact list courtiers (after using request_marriage option in contact_list_request_interaction), or prieviously betrothed characters trigger_if = { limit = { scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } } } trigger_if = { limit = { OR = { scope:actor = { is_target_in_variable_list = { name = contact_list_marriage target = scope:recipient } } scope:recipient = { is_betrothed = yes betrothed = { OR = { scope:actor = this scope:secondary_actor ?= this } } } scope:secondary_recipient ?= { is_betrothed = yes betrothed = { OR = { scope:actor = this scope:secondary_actor ?= this } } } } } always = yes } trigger_else = { scope:recipient = scope:actor } } } is_valid_showing_failures_only = { #If we're opening this interaction through the interaction menu (i.e. not all scopes exist yet) #This was giving double-warnings about a marry-able character existing so it's commented out for now #custom_description = { # text = character_to_marry_exists # object = scope:recipient # scope:recipient = { # OR = { # any_courtier = { # is_at_home = yes # marriage_interaction_can_be_picked_trigger= yes # } # any_child = { # marriage_interaction_can_be_picked_trigger= yes # } # } # } #} trigger_if = { limit = { NAND = { exists = scope:secondary_actor exists = scope:secondary_recipient } } #There is an available marriage custom_description = { text = "basic_can_marry_check_recipient" subject = scope:actor object = scope:recipient scope:recipient = { OR = { AND = { #Recipient can marry can_marry_trigger = yes #To account for a person marrying their concubines trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } AND = { is_ruler = yes #(Following are only for rulers) OR = { any_child = { matchmaker = scope:actor OR = { #Any of recipient's children can marry AND = { can_marry_trigger = yes #To account for a person marrying their concubines trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor } } #Any of recipient's children are ready to marry their betrothed AND = { ready_to_marry_betrothed_trigger = yes betrothed.matchmaker = scope:actor } } } any_courtier = { OR = { #Any of recipient's courtiers can marry AND = { can_marry_trigger = yes #To account for a person marrying their concubines trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor } } #Any of recipient's courtiers are ready to marry their betrothed AND = { ready_to_marry_betrothed_trigger = yes betrothed.matchmaker = scope:actor } } } } } } } } } #Diplomatic availability & prison scope:recipient = { is_imprisoned = no } NOT = { scope:actor = { is_at_war_with = scope:recipient } } trigger_if = { #(must be here because secondary_recipient can be set at the start) limit = { exists = scope:secondary_recipient scope:secondary_recipient != scope:recipient } scope:secondary_recipient = { is_imprisoned = no bp2_valid_for_standard_interactions_trigger = yes } } trigger_if = { #(must be here because secondary_recipient can be set at the start) limit = { exists = scope:secondary_actor scope:secondary_actor != scope:actor } scope:secondary_actor = { is_imprisoned = no bp2_valid_for_standard_interactions_trigger = yes } } # Account for regents being bolshy. marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_actor } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_recipient } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = actor } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = recipient } } # whether a character can be picked for the interaction, interface only (e.g. picking the first character in the marriage interaction) # in character scope, actor and recipient event targets can be used, but not the secondary characters (because none exist yet) can_be_picked = { OR = { marriage_interaction_can_be_picked_trigger = yes AND = { exists = scope:secondary_actor exists = scope:secondary_recipient scope:secondary_actor.betrothed = scope:secondary_recipient } } } #Is evaluated only after secondary_recipient and secondary_actor are both chosen has_valid_target_showing_failures_only = { marriage_interaction_valid_target_trigger = yes #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. #Blocks AI from marrying player guests scope:secondary_recipient = { trigger_if = { limit = { is_pool_guest = yes host = { is_ai = no this != scope:actor } } NOT = { is_pool_guest_of = host } } } #Blocks most AI's from marrying Evil faiths trigger_if = { limit = { scope:actor = { is_ai = yes NOT = { has_trait = cynical } #AI should honor betrothal even if faiths change scope:secondary_actor.betrothed != scope:secondary_recipient } } scope:recipient.faith = { faith_hostility_level = { target = scope:actor.faith value < faith_hostility_prevents_marriage_level } } } #Blocks AI from marrying single mayors in their area unless they are also mayors trigger_if = { limit = { scope:actor = { is_ai = yes NOT = { government_has_flag = government_is_republic } } } NOT = { scope:recipient = { government_has_flag = government_is_republic } } } trigger_if = { # Cultural Traditions, for AI limit = { scope:actor = { is_ai = yes culture = { has_cultural_parameter = dislikes_marrying_outside_of_culture } } } OR = { scope:actor.culture = scope:recipient.culture scope:actor.culture = scope:secondary_recipient.culture } } } pre_auto_accept = { if = { limit = { NOR = { scope:recipient = scope:actor scope:secondary_actor = { has_been_promised_grand_wedding = yes } scope:secondary_recipient = { has_been_promised_grand_wedding = yes } } } scope:recipient = { if = { limit = { scope:secondary_actor.betrothed = scope:secondary_recipient } send_interface_toast = { type = msg_betrothal_fulfilled left_icon = scope:secondary_actor right_icon = scope:secondary_recipient } } else = { send_interface_toast = { type = msg_marriage_forced left_icon = scope:secondary_actor right_icon = scope:secondary_recipient } } } } } on_send = { if = { limit = { scope:grand_wedding_promise = yes } scope:actor = { set_variable = { name = grand_wedding_promise_pending days = 10 } if = { limit = { is_ai = yes } remove_short_term_gold = ai_wedding_promise_gold_actor } #if = { # Activity count debugging, left in for QA purposes # limit = { # NOT = { # exists = global_var:wedding_promise # } # } # set_global_variable = { # name = wedding_promise # value = 1 # } #} #else = { # change_global_variable = { # name = wedding_promise # add = 1 # } #} } } } on_accept = { marriage_interaction_on_accept_effect = yes scope:actor = { if = { limit = { scope:herd_send_option = yes } pay_herd = { target = scope:recipient value = scope:actor.domicile.medium_herd_value } } if = { limit = { has_variable = grand_wedding_promise_pending } remove_variable = grand_wedding_promise_pending } if = { limit = { is_target_in_variable_list = { name = contact_list_marriage target = scope:recipient } } remove_list_variable = { name = contact_list_marriage target = scope:recipient } } } } on_decline = { scope:actor = { if = { limit = { this != scope:recipient } trigger_event = marriage_interaction.0011 } if = { limit = { has_variable = grand_wedding_promise_pending } remove_variable = grand_wedding_promise_pending } } scope:secondary_actor = { add_character_flag = { flag = player_declined_marriage years = 5 } } } auto_accept = { marriage_interaction_auto_accept_trigger = yes #Strong hook conditions } ai_accept = { base = 0 marriage_ai_accept_modifier = yes } # If you want the AI to set these options then it needs to be hooked into the code as well send_option = { flag = grand_wedding_promise localization = GRAND_WEDDING_PROMISE is_shown = { scope:actor = { #Can organize a Grand Wedding highest_held_title_tier > tier_barony is_landed_or_landless_administrative = yes trigger_if = { limit = { is_ai = yes } is_at_war = no } # DLC locked has_dlc_feature = tours_and_tournaments has_dlc_feature = advanced_activities } } current_description = { desc = "GRAND_WEDDING_PROMISE_INFO" } is_valid = { scope:actor = { gold >= real_wedding_cost_actor_scope is_available = yes custom_tooltip = { text = grand_wedding_already_promised_tt NOR = { AND = { has_variable = promised_grand_wedding_marriage_countdown var:promised_grand_wedding_marriage_countdown = { is_alive = yes } } has_variable = grand_wedding_promise_pending } } } trigger_if = { limit = { exists = scope:secondary_actor } custom_tooltip = { text = grand_wedding_only_dominant_side trigger_if = { limit = { scope:secondary_actor ?= { is_female = yes } } OR = { scope:secondary_actor ?= { matrilinear_betrothal = yes } scope:matrilineal = yes } } trigger_else = { NOR = { scope:secondary_actor ?= { matrilinear_betrothal = yes } scope:matrilineal = yes } } } custom_tooltip = { text = grand_wedding_only_family scope:secondary_actor ?= { is_close_or_extended_family_of = scope:actor } } # Cannot promise grand weddings with regents due to regency and travel limitations custom_tooltip = { text = grand_wedding_secondary_regent NOT = { scope:secondary_actor.liege = { diarch = scope:secondary_actor has_active_diarchy = yes } } } } # Safety check because players shouldn't be spouse_2 trigger_if = { limit = { has_multiple_players = yes } custom_tooltip = { text = grand_wedding_mp_ai trigger_if = { limit = { OR = { scope:actor = { is_ai = no } scope:secondary_actor ?= { is_ai = no } } } scope:secondary_recipient ?= { is_ai = yes } } } } trigger_if = { limit = { exists = scope:secondary_recipient.liege scope:secondary_recipient.liege = { diarch = scope:secondary_recipient has_active_diarchy = yes } } # Cannot promise grand weddings with regents due to regency and travel limitations custom_tooltip = { text = grand_wedding_secondary_regent NOT = { scope:secondary_recipient.liege = { diarch = scope:secondary_recipient has_active_diarchy = yes } } } } } } send_option = { flag = matrilineal localization = MATRILINEAL_OFFER is_shown = { OR = { NOT = { exists = scope:secondary_actor } NOT = { exists = scope:secondary_recipient } scope:secondary_actor = { sex_opposite_of = scope:secondary_recipient } } } current_description = { triggered_desc = { trigger = { exists = scope:secondary_actor scope:secondary_actor = { betrothed = scope:secondary_recipient matrilinear_betrothal = yes } } desc = "MATRILINEAL_OFFER_BETROTHAL_INFO" } } is_valid = { custom_tooltip = { # TGP TENNO EXCEPTION text = tgp_blocked_ceremonial_house_matrilineal_marriage_trigger NOT = { scope:secondary_actor.top_liege.primary_title.var:administrative_ui_special_title.holder ?= { scope:recipient ?= this NOR = { faith = { has_doctrine = doctrine_gender_female_dominated } AND = { scope:secondary_recipient ?= { is_female = yes } faith = { has_doctrine = doctrine_gender_equal } } } } } } } can_be_changed = { trigger_if = { limit = { exists = scope:secondary_actor } OR = { NOT = { exists = scope:secondary_recipient } scope:secondary_actor = { betrothed != scope:secondary_recipient } } } } starts_enabled = { trigger_if = { limit = { exists = scope:secondary_actor scope:secondary_actor = { betrothed = scope:secondary_recipient } } scope:secondary_actor = { matrilinear_betrothal = yes } } trigger_else_if = { limit = { exists = scope:secondary_actor scope:actor = scope:secondary_actor scope:actor = { is_female = yes is_ai = no } } always = yes } trigger_else = { scope:actor = { OR = { faith = { has_doctrine = doctrine_gender_female_dominated } AND = { this = scope:recipient exists = scope:secondary_recipient scope:secondary_recipient = { is_female = yes } faith = { has_doctrine = doctrine_gender_equal } } AND = { exists = scope:secondary_actor scope:actor = scope:secondary_actor is_female = yes is_ai = no } } } } } } send_option = { is_shown = { scope:secondary_actor = { betrothed != scope:secondary_recipient } } is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = hook localization = MARRIAGE_HOOK } send_option = { # FP3 is_shown = { scope:actor = { any_character_struggle = { is_struggle_type = persian_struggle has_struggle_phase_parameter = can_trade_piety_for_marriage_acceptance } } } is_valid = { scope:actor = { any_character_struggle = { involvement = involved is_struggle_type = persian_struggle } } scope:recipient = { any_character_struggle = { involvement = involved is_struggle_type = persian_struggle } } } flag = piety_cost_reduction localization = TRADE_PIETY_FOR_BETTER_AI_ACCEPTANCE } 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 } send_option = { # MPO Herd is_shown = { # Actor must have a government that uses Herd scope:actor = { government_has_flag = government_is_nomadic is_ai = no } # Recipient must care about Herd scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { # Actor has enough Herd scope:actor = { domicile.herd >= domicile.medium_herd_value } } flag = herd_send_option localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE } should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" send_options_exclusive = no show_effects_in_notification = no greeting = positive notification_text = { first_valid = { triggered_desc = { trigger = { scope:secondary_actor = { is_adult = yes } scope:secondary_recipient = { is_adult = yes } NOR = { scope:secondary_actor = { has_been_promised_grand_wedding = yes } scope:secondary_recipient = { has_been_promised_grand_wedding = yes } } } desc = { first_valid = { triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor } desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes } desc = MARRIAGE_NOTIFICATION_MATRI } triggered_desc = { trigger = { scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL } triggered_desc = { trigger = { scope:secondary_actor = scope:actor } desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL } triggered_desc = { trigger = { scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL } desc = MARRIAGE_NOTIFICATION } } } desc = { first_valid = { triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor } desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes } desc = BETROTHAL_NOTIFICATION_MATRI } triggered_desc = { trigger = { scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL } triggered_desc = { trigger = { scope:secondary_actor = scope:actor } desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL } triggered_desc = { trigger = { scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL } desc = BETROTHAL_NOTIFICATION } } } } } #This interaction is referenced in code! If it's renamed you have to ping a coder marry_off_interaction = { icon = icon_marriage category = interaction_category_diplomacy common_interaction = yes desc = marry_off_interaction_desc send_name = marry_off_send needs_recipient_to_open = no special_interaction = arrange_marriage_interaction interface = marriage redirect = { if = { limit = { exists = scope:secondary_actor } scope:recipient = { save_scope_as = secondary_recipient matchmaker = { save_scope_as = recipient } } } else = { scope:recipient = { save_scope_as = secondary_actor } clear_saved_scope = recipient } } populate_recipient_list = { #populate only with your courtiers or children/grandchildren if you are a landless adventurer if = { limit = { scope:actor = { has_government = landless_adventurer_government } } scope:secondary_actor = { if = { limit = { scope:actor != this } add_to_list = characters } every_courtier = { limit = { trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_courtier_away = { limit = { trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { even_if_dead = yes if = { limit = { is_alive = yes NOT = { is_in_list = characters } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { even_if_dead = yes if = { limit = { is_alive = yes NOT = { is_in_list = characters } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } every_child = { if = { limit = { is_alive = yes NOT = { is_in_list = characters } trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } add_to_list = characters } } } } } } #otherwise, populate with anyone eligible else = { scope:secondary_actor = { every_opposite_sex_spouse_candidate = { add_to_list = characters } if = { limit = { allowed_to_marry_same_sex_trigger = yes } every_same_sex_spouse_candidate = { limit = { scope:secondary_actor != this } add_to_list = characters } } } # Cleanup list if insular culture if = { limit = { scope:secondary_actor.culture = { has_cultural_parameter = reduced_marriage_acceptance_distant_realms } } every_in_list = { list = characters limit = { NOT = { top_liege.culture = scope:secondary_actor.top_liege.culture } } remove_from_list = characters } } } } cost = { prestige = { value = 0 if = { limit = { exists = scope:actor exists = scope:recipient exists = scope:secondary_recipient exists = scope:secondary_actor scope:secondary_actor = { is_close_family_of = scope:actor } scope:recipient = { OR = { AND = { vassal_contract_has_flag = vassal_contract_marriage_favor is_allied_to = scope:actor } NOT = { vassal_contract_has_flag = vassal_contract_marriage_favor} } } } add = { scope:actor = { every_vassal = { limit = { vassal_contract_has_flag = vassal_contract_marriage_favor NOT = { is_allied_to = scope:actor } NOR = { this = scope:recipient this = scope:secondary_recipient } } add = medium_prestige_value } } desc = VASSAL_WITH_MARRIAGE_FAVOR } } } influence = { value = 0 if = { limit = { scope:influence_send_option = yes } add = scope:actor.medium_influence_value desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION } } } interface_priority = 60 # actor, recipient ... characters arranging the marriage # secondary_actor, secondary_recipient ... characters that should marry is_shown = { # Enable only for yourself if you're a landless adventurer trigger_if = { limit = { scope:actor = { has_government = landless_adventurer_government } } scope:secondary_actor = { scope:actor = this } } scope:secondary_actor = { #Is this someone I can marry off? OR = { is_courtier_of = scope:actor AND = { is_child_of = scope:actor target_is_liege_or_above = scope:actor } scope:actor = this } #They can be married can_marry_trigger = yes #To account for a person marrying their concubines trigger_if = { limit = { is_concubine = yes } is_concubine_of = scope:actor can_marry_character_trigger = { CHARACTER = scope:actor } } } # Block further marriage proposals for people who have a pending grand wedding NOR = { scope:secondary_actor ?= { has_been_promised_grand_wedding = yes } scope:secondary_recipient ?= { has_been_promised_grand_wedding = yes } } } is_valid_showing_failures_only = { #Diplomatic availability & prison scope:secondary_actor = { is_imprisoned = no bp2_valid_for_standard_interactions_trigger = yes } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_actor } trigger_if = { limit = { scope:secondary_actor != scope:secondary_recipient } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = secondary_recipient } } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = actor } marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { TARGET = recipient } } has_valid_target_showing_failures_only = { marriage_interaction_valid_target_trigger = yes #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. #Diplomatic availability & prison (located here because these will never be set at the start) scope:recipient = { is_imprisoned = no } NOT = { scope:actor = { is_at_war_with = scope:recipient } } trigger_if = { limit = { scope:recipient != scope:secondary_recipient } scope:secondary_recipient = { is_imprisoned = no bp2_valid_for_standard_interactions_trigger = yes } } #secondary_actor is checked above because they are always available #Blocks AI from marrying player guests scope:secondary_recipient = { trigger_if = { limit = { is_pool_guest = yes host = { is_ai = no this != scope:actor } } NOT = { is_pool_guest_of = host } } } } on_send = { if = { limit = { scope:grand_wedding_promise = yes } scope:actor = { set_variable = { name = grand_wedding_promise_pending days = 10 } if = { limit = { is_ai = yes } remove_short_term_gold = ai_wedding_promise_gold_actor } #if = { # Activity count debugging, left in for QA purposes # limit = { # NOT = { # exists = global_var:wedding_promise # } # } # set_global_variable = { # name = wedding_promise # value = 1 # } #} #else = { # change_global_variable = { # name = wedding_promise # add = 1 # } #} } } } on_accept = { marriage_interaction_on_accept_effect = yes # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = medium_unity_gain DESC = clan_unity_marry_off.desc REVERSE_NON_HOUSE_TARGET = no } scope:actor = { if = { limit = { scope:herd_send_option = yes } pay_herd = { target = scope:recipient value = scope:actor.domicile.medium_herd_value } } if = { limit = { has_variable = grand_wedding_promise_pending } remove_variable = grand_wedding_promise_pending } } } on_decline = { scope:actor = { if = { limit = { this != scope:recipient } trigger_event = marriage_interaction.0011 } if = { limit = { has_variable = grand_wedding_promise_pending } remove_variable = grand_wedding_promise_pending } } # 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_marry_off_decline.desc REVERSE_NON_HOUSE_TARGET = no } } auto_accept = { marriage_interaction_auto_accept_trigger = yes #Strong hook conditions } ai_accept = { base = 0 # Should be 0 for all interactions marriage_ai_accept_modifier = yes # Unity modifiers evaluate_action_increasing_house_unity = { VALUE = 100 } } send_option = { flag = grand_wedding_promise localization = GRAND_WEDDING_PROMISE is_shown = { scope:actor = { #Can organize a Grand Wedding highest_held_title_tier > tier_barony is_landed_or_landless_administrative = yes trigger_if = { limit = { is_ai = yes } is_at_war = no } # DLC locked has_dlc_feature = tours_and_tournaments has_dlc_feature = advanced_activities } } current_description = { desc = "GRAND_WEDDING_PROMISE_INFO" } is_valid = { scope:actor = { gold >= real_wedding_cost_actor_scope is_available = yes custom_tooltip = { text = grand_wedding_already_promised_tt NOR = { AND = { has_variable = promised_grand_wedding_marriage_countdown var:promised_grand_wedding_marriage_countdown = { is_alive = yes } } has_variable = grand_wedding_promise_pending } } } custom_tooltip = { text = grand_wedding_only_dominant_side trigger_if = { limit = { scope:secondary_actor ?= { is_female = yes } } OR = { scope:secondary_actor ?= { matrilinear_betrothal = yes } scope:matrilineal = yes } } trigger_else = { NOR = { scope:secondary_actor ?= { matrilinear_betrothal = yes } scope:matrilineal = yes } } } custom_tooltip = { text = grand_wedding_only_family scope:secondary_actor ?= { is_close_or_extended_family_of = scope:actor } } } } send_option = { flag = matrilineal localization = "MATRILINEAL_OFFER" starts_enabled = { scope:actor = { OR = { faith = { has_doctrine = doctrine_gender_female_dominated } AND = { scope:secondary_actor = { is_female = yes } faith = { has_doctrine = doctrine_gender_equal } } AND = { exists = scope:secondary_actor scope:actor = scope:secondary_actor is_female = yes is_ai = no } } } } } send_option = { is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = hook localization = MARRIAGE_HOOK } #This option cannot be linked with the hook icon, because recipient isn't known in the right-click menu 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 } send_option = { # MPO Herd is_shown = { # Actor must have a government that uses Herd scope:actor = { government_has_flag = government_is_nomadic is_ai = no } # Recipient must care about Herd scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { # Actor has enough Herd scope:actor = { domicile.herd >= domicile.medium_herd_value } } flag = herd_send_option localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE } send_options_exclusive = no show_effects_in_notification = no greeting = positive notification_text = { first_valid = { triggered_desc = { trigger = { scope:secondary_actor = { is_adult = yes } scope:secondary_recipient = { is_adult = yes } NOR = { scope:secondary_actor = { has_been_promised_grand_wedding = yes } scope:secondary_recipient = { has_been_promised_grand_wedding = yes } } } desc = { first_valid = { triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor } desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes } desc = MARRIAGE_NOTIFICATION_MATRI } triggered_desc = { trigger = { scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_BOTH_PERSONAL } triggered_desc = { trigger = { scope:secondary_actor = scope:actor } desc = MARRIAGE_NOTIFICATION_ACTOR_PERSONAL } triggered_desc = { trigger = { scope:secondary_recipient = scope:recipient } desc = MARRIAGE_NOTIFICATION_RECIPIENT_PERSONAL } desc = MARRIAGE_NOTIFICATION } } } desc = { first_valid = { triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_actor = scope:actor } desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL_MATRI } triggered_desc = { trigger = { scope:matrilineal = yes } desc = BETROTHAL_NOTIFICATION_MATRI } triggered_desc = { trigger = { scope:secondary_actor = scope:actor scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_BOTH_PERSONAL } triggered_desc = { trigger = { scope:secondary_actor = scope:actor } desc = BETROTHAL_NOTIFICATION_ACTOR_PERSONAL } triggered_desc = { trigger = { scope:secondary_recipient = scope:recipient } desc = BETROTHAL_NOTIFICATION_RECIPIENT_PERSONAL } desc = BETROTHAL_NOTIFICATION } } } } } break_betrothal_interaction = { category = interaction_category_diplomacy special_interaction = break_betrothal_interaction use_diplomatic_range = no icon = icon_marriage interface_priority = 30 is_shown = { OR = { #Betrothed to betrothed scope:actor.betrothed = scope:recipient #Actor breaking recipient's betrothal with their courtier/vassal child scope:actor = { any_courtier = { is_ai = yes is_betrothed = yes betrothed = { this = scope:recipient } OR = { is_playable_character = no any_parent = { this = scope:actor } } } } #Actor breaking the betrothal of their courtier/vassal child scope:recipient = { is_ai = yes is_betrothed = yes OR = { AND = { is_playable_character = no liege = scope:actor } AND = { is_child_of = scope:actor NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } OR = { is_playable_character = no target_is_liege_or_above = scope:actor } } } betrothed = { always = yes } } #Break recipient's betrothal with actor's vassal child/courtier scope:recipient = { is_betrothed = yes betrothed = { is_ai = yes OR = { AND = { is_child_of = scope:actor target_is_liege_or_above = scope:actor NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } } AND = { is_playable_character = no liege = scope:actor } } } } #Actor breaking their betrothal to recipient's courtier/vassal child AND = { scope:actor = { is_betrothed = yes } scope:recipient = { OR = { #Check for courtiers any_courtier = { is_betrothed = yes betrothed = scope:actor liege = scope:recipient } #Check for vassal children any_child = { is_betrothed = yes betrothed = scope:actor OR = { is_playable_character = no target_is_liege_or_above = scope:recipient } NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } } } } } } } is_valid = { } is_valid_showing_failures_only = { scope:recipient = { NOT = { has_strong_hook = scope:actor } } # Recipient is the betrothed custom_description = { text = break_betrothal_hook_used object = scope:recipient trigger_if = { limit = { exists = scope:recipient.betrothed OR = { scope:recipient.betrothed = scope:actor scope:recipient.betrothed = { is_ai = yes OR = { AND = { is_child_of = scope:actor target_is_liege_or_above = scope:actor NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } } AND = { is_playable_character = no liege = scope:actor } } } } exists = scope:recipient.var:hook_used_for_betrothal } scope:recipient.var:hook_used_for_betrothal = { this != scope:recipient.betrothed } } } custom_description = { text = break_betrothal_hook_used object = scope:recipient trigger_if = { limit = { exists = scope:recipient.betrothed OR = { scope:recipient = scope:actor scope:recipient = { is_ai = yes OR = { AND = { is_child_of = scope:actor target_is_liege_or_above = scope:actor NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } } AND = { is_playable_character = no liege = scope:actor } } } } exists = scope:recipient.betrothed.var:hook_used_for_betrothal } scope:recipient.betrothed.var:hook_used_for_betrothal = { this != scope:recipient } } } # Secondary Recipient is the betrothed custom_description = { text = break_betrothal_hook_used object = scope:recipient trigger_if = { limit = { scope:recipient = { OR = { #Check for courtiers any_courtier = { is_betrothed = yes betrothed = scope:actor liege = scope:recipient exists = var:hook_used_for_betrothal var:hook_used_for_betrothal = { this = scope:actor } } #Check for vassal children any_child = { is_betrothed = yes betrothed = scope:actor OR = { is_playable_character = no target_is_liege_or_above = scope:recipient } NOT = { matchmaker = { is_parent_of = prev this != scope:actor } } exists = var:hook_used_for_betrothal var:hook_used_for_betrothal = { this = scope:actor } } } } } always = no } } # Secondary Actor and Recipient were promised a Grand Wedding, and the Activity has already been organized and is ongoing custom_description = { text = break_betrothal_gwedding_ongoing trigger_if = { limit = { OR = { scope:recipient = { has_been_promised_grand_wedding = yes } scope:recipient.betrothed = { has_been_promised_grand_wedding = yes } } } NOR = { scope:recipient.involved_activity ?= { has_activity_type = activity_wedding OR = { special_guest:spouse_1 ?= scope:recipient special_guest:spouse_2 ?= scope:recipient special_guest:spouse_1 ?= scope:recipient.betrothed special_guest:spouse_2 ?= scope:recipient.betrothed } } scope:recipient.betrothed.involved_activity ?= { has_activity_type = activity_wedding OR = { special_guest:spouse_1 ?= scope:recipient special_guest:spouse_2 ?= scope:recipient special_guest:spouse_1 ?= scope:recipient.betrothed special_guest:spouse_2 ?= scope:recipient.betrothed } } } } } } on_accept = { #Identifies the "injured party" scope:recipient = { if = { limit = { matchmaker = scope:actor } betrothed = { save_scope_as = rejected_betrothed } save_scope_as = rejecting_betrothed } else_if = { limit = { OR = { #Check for courtiers any_courtier = { is_betrothed = yes is_ai = yes betrothed = scope:actor liege = scope:recipient } #Check for vassal children any_child = { is_betrothed = yes is_ai = yes betrothed = scope:actor target_is_liege_or_above = scope:recipient } } } scope:actor.betrothed = { save_scope_as = rejected_betrothed } scope:actor = { save_scope_as = rejecting_betrothed } } else = { save_scope_as = rejected_betrothed betrothed = { save_scope_as = rejecting_betrothed } } } # If it was a Grand Wedding, find the host scope:rejecting_betrothed.var:promised_grand_wedding_by ?= { save_scope_as = promising_host } scope:recipient = { trigger_event = marriage_interaction.0020 } #Tooltip for betrothal breakage show_as_tooltip = { scope:rejected_betrothed = { break_betrothal = scope:rejecting_betrothed } } #Figures out if the liege of rejected_betrothed cares scope:rejected_betrothed = { if = { limit = { #The liege matter when assigning prestige/opinion hits matchmaker = { this != scope:rejected_betrothed is_close_or_extended_family_of = scope:rejected_betrothed } } matchmaker = { save_scope_as = rejected_betrothal_owner } } else = { #The liege doesn't matter, only the betrothed save_scope_as = rejected_betrothal_owner } } if = { limit = { #Only if you had no reason to break the betrothal scope:rejected_betrothed = { is_eunuch_trigger = no } scope:rejecting_betrothed = { is_eunuch_trigger = no } NOR = { scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } scope:rejected_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejecting_betrothed } scope:rejecting_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejected_betrothed } # Prestige loss for Grand Weddings is handled below in the specific effect scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } } } #Prestige penalty if = { limit = { OR = { scope:rejected_betrothed = { highest_held_title_tier = tier_empire } scope:rejected_betrothal_owner = { highest_held_title_tier = tier_empire } } #Only applied for relevant characters OR = { scope:rejected_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:rejecting_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:actor = { yields_alliance = { candidate = scope:rejecting_betrothed target = scope:rejected_betrothal_owner target_candidate = scope:rejected_betrothed } } } } scope:actor = { add_prestige = massive_prestige_loss } } else_if = { limit = { OR = { scope:rejected_betrothed = { highest_held_title_tier = tier_kingdom } scope:rejected_betrothal_owner = { highest_held_title_tier = tier_kingdom } } #Only applied for relevant characters OR = { scope:rejected_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:rejecting_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:actor = { yields_alliance = { candidate = scope:rejecting_betrothed target = scope:rejected_betrothal_owner target_candidate = scope:rejected_betrothed } } } } scope:actor = { add_prestige = major_prestige_loss } } else_if = { limit = { OR = { scope:rejected_betrothed = { highest_held_title_tier = tier_duchy } scope:rejected_betrothal_owner = { highest_held_title_tier = tier_duchy } } #Only applied for relevant characters OR = { scope:rejected_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:rejecting_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:actor = { yields_alliance = { candidate = scope:rejecting_betrothed target = scope:rejected_betrothal_owner target_candidate = scope:rejected_betrothed } } } } scope:actor = { add_prestige = medium_prestige_loss } } else_if = { limit = { OR = { scope:rejected_betrothed = { highest_held_title_tier = tier_county } scope:rejected_betrothal_owner = { highest_held_title_tier = tier_county } } #Only applied for relevant characters OR = { scope:rejected_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:rejecting_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:actor = { yields_alliance = { candidate = scope:rejecting_betrothed target = scope:rejected_betrothal_owner target_candidate = scope:rejected_betrothed } } } } scope:actor = { add_prestige = minor_prestige_loss } } else_if = { limit = { OR = { scope:rejected_betrothed = { highest_held_title_tier = tier_barony } scope:rejected_betrothal_owner = { highest_held_title_tier = tier_barony } } #Only applied for relevant characters OR = { scope:rejected_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:rejecting_betrothed = { OR = { is_close_family_of = scope:actor AND = { exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty } } } scope:actor = { yields_alliance = { candidate = scope:rejecting_betrothed target = scope:rejected_betrothal_owner target_candidate = scope:rejected_betrothed } } } } scope:actor = { add_prestige = miniscule_prestige_loss } } } ############################################ # EP2 - Breaking a Grand Wedding Betrothal # ############################################ if = { limit = { # There is no forced reason for breaking the betrothal scope:rejected_betrothed = { is_eunuch_trigger = no } scope:rejecting_betrothed = { is_eunuch_trigger = no } NOR = { scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejected_betrothed } scope:rejected_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejecting_betrothed } } # A Grand Wedding was promised OR = { scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } } } scope:actor = { break_grand_wedding_betrothal_effect = yes } scope:rejected_betrothed = { trigger_event = marriage_interaction.0001 } } ###################################### # Opinion hits & notification events # ###################################### #Personal opinion hit for the rejected_betrothed else_if = { limit = { scope:rejected_betrothed != scope:actor } scope:rejected_betrothed = { if = { limit = { is_eunuch_trigger = no scope:rejecting_betrothed = { is_eunuch_trigger = no } NOR = { has_trait_with_flag = can_not_marry scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejected_betrothed } AND = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejecting_betrothed } } } show_as_tooltip = { add_opinion = { target = scope:actor modifier = broke_betrothal_opinion } } } hidden_effect = { trigger_event = marriage_interaction.0001 } } } else = { hidden_effect = { scope:rejecting_betrothed = { break_betrothal = scope:rejected_betrothed } } } #Personal opinion hit for the rejected_betrothal_owner if = { limit = { NOR = { scope:rejected_betrothed = { this = scope:rejected_betrothal_owner } scope:actor = { this = scope:rejected_betrothal_owner } scope:actor = { this = scope:rejected_betrothed } } } scope:rejected_betrothal_owner = { if = { limit = { scope:rejected_betrothed = { is_eunuch_trigger = no } scope:rejecting_betrothed = { is_eunuch_trigger = no } NOR = { scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } scope:rejected_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejecting_betrothed } scope:rejecting_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejected_betrothed } } } if = { limit = { NOR = { scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } } } show_as_tooltip = { add_opinion = { target = scope:actor modifier = broke_betrothal_opinion } } } } hidden_effect = { trigger_event = marriage_interaction.0001 } } } if = { limit = { scope:rejected_betrothed = { is_eunuch_trigger = no } scope:rejecting_betrothed = { is_eunuch_trigger = no } NOR = { scope:rejected_betrothed = { has_trait_with_flag = can_not_marry } scope:rejecting_betrothed = { has_trait_with_flag = can_not_marry } scope:rejected_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejecting_betrothed } scope:rejecting_betrothed = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:rejected_betrothed } } } #Opinion hit for close relatives of the rejected_betrothed (that are not rejected_betrothed_owner) if = { limit = { scope:rejected_betrothed != scope:actor scope:rejected_betrothed = { any_close_or_extended_family_member = { this != scope:rejected_betrothal_owner count >= 1 } } } if = { limit = { OR = { scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } } } scope:rejected_betrothed = { every_close_or_extended_family_member = { limit = { this != scope:rejected_betrothal_owner } custom = all_family_members add_opinion = { target = scope:actor modifier = broke_betrothal_grand_wedding_opinion opinion = -50 } } } } else = { scope:rejected_betrothed = { every_close_or_extended_family_member = { limit = { this != scope:rejected_betrothal_owner } custom = all_family_members add_opinion = { target = scope:actor modifier = broke_betrothal_opinion } } } } } #Opinion hit for close relatives of the rejecting_betrothed (that are not also close relatives to rejected_betrothed) if = { limit = { NOR = { scope:rejecting_betrothed = scope:actor scope:rejected_betrothed = scope:actor } scope:rejecting_betrothed = { any_close_or_extended_family_member = { NOR = { is_close_or_extended_family_of = scope:rejected_betrothed this = scope:rejected_betrothal_owner this = scope:rejected_betrothed } count >= 1 } } } if = { limit = { OR = { scope:rejected_betrothed = { has_been_promised_grand_wedding = yes } scope:rejecting_betrothed = { has_been_promised_grand_wedding = yes } } } scope:rejecting_betrothed = { every_close_or_extended_family_member = { limit = { NOR = { this = scope:rejected_betrothal_owner is_close_or_extended_family_of = scope:rejected_betrothed this = scope:rejected_betrothed } } custom = all_family_members add_opinion = { target = scope:actor modifier = broke_betrothal_grand_wedding_opinion opinion = -50 } } } } else = { scope:rejecting_betrothed = { every_close_or_extended_family_member = { limit = { NOR = { is_close_or_extended_family_of = scope:rejected_betrothed this = scope:rejected_betrothal_owner this = scope:rejected_betrothed } } custom = all_family_members add_opinion = { target = scope:actor modifier = broke_betrothal_opinion } } } } } } scope:actor = { # Was the marriage of relevence to the player? if = { limit = { scope:rejecting_betrothed = { is_player_heir_of = scope:actor } } hidden_effect = { send_interface_toast = { type = msg_break_betrothal_player_heir title = msg_break_betrothal left_icon = scope:rejecting_betrothed right_icon = scope:rejected_betrothed custom_tooltip = break_betrothal_hook_toast_desc } } } else_if = { limit = { scope:actor != scope:rejecting_betrothed } hidden_effect = { send_interface_message = { type = msg_break_betrothal title = msg_break_betrothal left_icon = scope:rejecting_betrothed right_icon = scope:rejected_betrothed custom_tooltip = break_betrothal_hook_toast_desc } } } #Was the marriage promised to a vassal? if = { limit = { exists = var:promised_to_marry_1 var:promised_to_marry_1 = { this = scope:rejected_betrothed any_parent = { is_vassal_of = scope:actor } } exists = var:promised_to_marry_2 var:promised_to_marry_2 = { this = scope:rejecting_betrothed is_close_family_of = scope:actor } } remove_variable = promised_to_marry_1 remove_variable = promised_to_marry_2 trigger_event = clan.1002 } } # 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_betrothal_breakage.desc REVERSE_NON_HOUSE_TARGET = no } } auto_accept = yes } # Stripped down version of make_concubine_interaction for the AI # Avoids redirection logic and recipient list building to improve performance ai_make_concubine_interaction = { hidden = yes ai_targets = { ai_recipients = prisoners } ai_targets = { ai_recipients = courtiers max = 10 } ai_target_quick_trigger = { adult = yes owner_attracted = yes # Not optimal, but saves a lot of performance } ai_frequency_by_tier = { barony = 0 county = 60 duchy = 12 kingdom = 12 empire = 12 hegemony = 3 } ai_potential = { is_playable_character = yes is_adult = yes fertility > 0 allowed_more_concubines = yes NOR = { has_trait = chaste has_trait = celibate has_sexuality = asexual } } is_shown = { make_concubine_is_shown_trigger = yes } is_valid_showing_failures_only = { make_concubine_is_valid_trigger = yes } auto_accept = yes ai_will_do = { base = 0 modifier = { # Basic Filtering add = 100 scope:actor = { number_of_concubines < number_of_desired_concubines } scope:recipient = { can_have_children_with = { CHARACTER = scope:actor } # Only if you can have kids since this is about fertility and genetic traits fertility > 0.2 is_young_character = yes } } modifier = { add = 100 scope:recipient = { is_imprisoned_by = scope:actor can_have_children_with = { CHARACTER = scope:actor } # Only if you can have kids since this is about fertility and genetic traits OR = { is_lowborn = no num_of_good_genetic_traits > 0 } fertility > 0.1 trigger_if = { limit = { is_female = yes } is_aging_character = no } } } modifier = { add = 100 scope:actor = { allowed_to_marry_same_sex_trigger = yes sex_same_as = scope:recipient is_attracted_to_gender_of = scope:recipient OR = { #If they're not in need of kids, or someone who they can have kids with any_child = { count >= 2 } any_consort = { can_have_children_with = { CHARACTER = scope:actor } fertility > 0.1 } } } } modifier = { #Even if you're allowed to take same-sex concubines we don't want the AI to do so without a good reason if they're not attracted to the person add = -200 scope:actor = { allowed_to_marry_same_sex_trigger = yes sex_same_as = scope:recipient NOT = { is_attracted_to_gender_of = scope:recipient } } } modifier = { # If they don't have a batch of kids and opposite sex consorts to handle that situation add = -200 scope:actor = { allowed_to_marry_same_sex_trigger = yes sex_same_as = scope:recipient NOT = { any_child = { count >= 2 } } NOT = { any_consort = { can_have_children_with = { CHARACTER = scope:actor } fertility > 0.1 } } } } # Unity modifiers evaluate_action_increasing_house_unity = { VALUE = 100 } modifier = { # Incest Filtering: Hard NO! factor = 0 scope:actor = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } NOR = { accepts_incest_with_trigger = { CHARACTER = scope:recipient } sexually_liberal_trigger = yes AND = { primary_heir ?= { dynasty != root.dynasty } NOT = { primary_title = { any_title_heir = { dynasty = root.dynasty } } } } } } } modifier = { # Incest Filtering: Not likely, but keep the door open... factor = 0.2 scope:actor = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } OR = { accepts_incest_with_trigger = { CHARACTER = scope:recipient } sexually_liberal_trigger = yes AND = { primary_heir ?= { dynasty != root.dynasty } NOT = { primary_title = { any_title_heir = { dynasty = root.dynasty } } } } } } } modifier = { # Less likely if married to a player and the target is the player heir factor = 0.4 scope:actor = { any_spouse = { is_ai = no scope:recipient = { OR = { is_primary_heir_of = prev is_heir_of = prev } } } } } } on_accept = { scope:actor = { save_scope_as = secondary_actor } scope:recipient = { save_scope_as = secondary_recipient } concubine_on_accept_effect = yes # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_concubinage.desc REVERSE_NON_HOUSE_TARGET = no } } } make_concubine_interaction = { category = interaction_category_diplomacy icon = concubine_icon desc = make_concubine_interaction_desc interface = concubine_list redirect = { # The UI will open to the already filled left and right first if we don't tell it we've got both sides filled scope:actor = { save_scope_as = secondary_actor } scope:recipient = { save_scope_as = secondary_recipient } } populate_recipient_list = { scope:actor = { every_courtier = { limit = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } add_to_list = characters } every_prisoner = { limit = { NOT = { is_in_list = characters } can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } add_to_list = characters } } } is_shown = { make_concubine_is_shown_trigger = yes } is_valid_showing_failures_only = { make_concubine_is_valid_trigger = yes } auto_accept = yes on_accept = { concubine_on_accept_effect = yes # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_concubinage.desc REVERSE_NON_HOUSE_TARGET = no } } } find_concubine = { category = interaction_category_diplomacy icon = concubine_icon desc = find_concubine_desc interface = concubine_list needs_recipient_to_open = no redirect = { scope:actor = { # The UI will open to the already filled left first if we don't tell it we've got "our side" actor which is always ourselves save_scope_as = secondary_actor } if = { limit = { # This is needed for the UI to function properly. Initially UI opens with player as both actor and recipient # After UI opens with empty recipient, player can click on a candidate # When candidate is selected both primary and secondary recipient must be set for the interaction to work scope:actor != scope:recipient } scope:recipient = { save_scope_as = secondary_recipient } } } populate_recipient_list = { scope:actor = { every_courtier = { limit = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } add_to_list = characters } every_prisoner = { limit = { NOT = { is_in_list = characters } can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } add_to_list = characters } } } is_shown = { scope:actor = { allowed_concubines = yes is_adult = yes trigger_if = { #So that we show the recipient list, but can also only use this on ourselves, we have to do this check in the beginning limit = { NOT = { exists = scope:secondary_recipient } } scope:actor = scope:recipient } } trigger_if = { limit = { scope:actor != scope:recipient } scope:actor = { trigger_if = { limit = { allowed_to_marry_same_sex_trigger = no } sex_opposite_of = scope:recipient } NOT = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:recipient } } } scope:recipient = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } is_adult = yes OR = { is_imprisoned_by = scope:actor is_courtier_of = scope:actor } } } } is_valid_showing_failures_only = { custom_description = { text = take_concubine_allowed_more object = scope:recipient scope:actor = { allowed_more_concubines = yes } } custom_description = { text = take_concubine_available_character_opp object = scope:actor scope:actor = { OR = { any_courtier = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } any_prisoner = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } } } } trigger_if = { limit = { scope:actor != scope:recipient } scope:recipient = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } } } } can_be_picked = { is_adult = yes } auto_accept = yes ai_will_do = { base = 0 } on_accept = { concubine_on_accept_effect = yes # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_concubinage.desc REVERSE_NON_HOUSE_TARGET = no } } } offer_concubine = { category = interaction_category_diplomacy icon = concubine_icon desc = offer_concubine_desc ai_targets = { ai_recipients = neighboring_rulers ai_recipients = suzerain ai_recipients = liege max = 5 } ai_target_quick_trigger = { adult = yes } ai_frequency_by_tier = { barony = 0 county = 36 duchy = 36 kingdom = 0 empire = 0 hegemony = 0 } greeting = positive notification_text = OFFER_CONCUBINE_NOTIFICATION #interface = concubine_list populate_recipient_list = { scope:actor = { every_courtier = { limit = { can_be_offered_as_concubine_to_character_trigger = { GIVER = scope:actor CHARACTER = scope:recipient } } add_to_list = characters } every_prisoner = { limit = { NOT = { is_in_list = characters } can_be_offered_as_concubine_to_character_trigger = { GIVER = scope:actor CHARACTER = scope:recipient } } add_to_list = characters } } } is_shown = { scope:actor != scope:recipient scope:actor = { OR = { culture = { has_cultural_tradition = tradition_concubines } faith = { has_doctrine = doctrine_concubines } } } scope:recipient = { #NOT = { government_has_flag = government_is_true_herder } allowed_concubines = yes is_adult = yes } } is_valid_showing_failures_only = { custom_description = { text = take_concubine_available_character_opp object = scope:recipient scope:actor = { OR = { any_courtier = { can_be_offered_as_concubine_to_character_trigger = { GIVER = scope:actor CHARACTER = scope:recipient } } any_prisoner = { can_be_offered_as_concubine_to_character_trigger = { GIVER = scope:actor CHARACTER = scope:recipient } } } } } custom_description = { text = take_concubine_allowed_more object = scope:recipient scope:recipient = { allowed_more_concubines = yes } } trigger_if = { #Landless adventurers check range limit = { scope:actor = { is_landless_adventurer = yes } } ep3_laamp_diplo_range_trigger = { TARGET = scope:recipient LAAMP = scope:actor } } } can_be_picked = { is_adult = yes } can_send = { custom_description = { text = character_unavailable_to_be_offered_as_concubine object = scope:secondary_recipient scope:secondary_recipient = { can_be_offered_as_concubine_to_character_trigger = { GIVER = scope:actor CHARACTER = scope:recipient } } } } auto_accept = no ai_accept = { base = 50 modifier = { add = { value = 50 multiply = scope:secondary_recipient.num_of_good_genetic_traits } scope:secondary_recipient = { num_of_good_genetic_traits > 0 trigger_if = { limit = { is_female = yes } is_aging_character = no } } desc = AI_POSITIVE_TRAIT_REASON } modifier = { add = { value = 50 } scope:secondary_recipient = { is_lowborn = no trigger_if = { limit = { is_female = yes } is_aging_character = no } } desc = AI_DYNASTY_PRESTIGE_REASON_NOBLE } modifier = { add = { value = -50 multiply = scope:secondary_recipient.num_of_bad_genetic_traits } scope:secondary_recipient = { num_of_bad_genetic_traits > 0 trigger_if = { limit = { is_female = yes } is_aging_character = no } } desc = AI_NEGATIVE_TRAIT_REASON } modifier = { add = { value = -50 } scope:secondary_recipient = { is_lowborn = yes num_of_good_genetic_traits = 0 trigger_if = { limit = { is_female = yes } is_aging_character = no } } desc = AI_DYNASTY_PRESTIGE_REASON_LOWBORN_NO_POSITIVE_TRAIT } opinion_modifier = { # Opinion of you who = scope:recipient opinion_target = scope:actor multiplier = 1.0 desc = AI_OPINION_REASON } opinion_modifier = { # Opinion of concubine who = scope:recipient opinion_target = scope:secondary_recipient multiplier = 0.25 desc = AI_OPINION_REASON } compare_modifier = { # Recipient is reluctant to marry old women (procreation is a key factor) trigger = { scope:secondary_recipient = { is_young_character = no is_female = yes } } target = scope:secondary_recipient value = age multiplier = -5.0 step = 1 offset = -29 desc = MARRY_AGE } modifier = { # A Recipient is unwilling to take a same-sex concubine if their faith doesn't support it add = -1000 scope:recipient = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:secondary_recipient } desc = SAME_SEX_MARRIAGE_FAITH_REASON_RECIPIENT } modifier = { # Unwilling if they don't have a batch of kids and opposite sex consorts to handle that situation add = -200 scope:recipient = { allowed_to_marry_same_sex_trigger = yes sex_same_as = scope:secondary_recipient trigger_if = { limit = { NOT = { any_consort = { can_have_children_with = { CHARACTER = scope:recipient } fertility > 0.1 } } } any_child = { is_player_heir_of = root } } trigger_else = { always = no } } desc = AI_NO_FERTILITY_REASON } modifier = { add = 50 scope:recipient = { is_attracted_to_gender_of = scope:secondary_recipient } desc = AI_ATTRACTION_REASON } modifier = { # A Recipient is more likely to agree if you're their liege add = 40 scope:actor = { is_landed = yes } scope:recipient = { is_landed = yes target_is_liege_or_above = scope:actor } desc = LIEGE_REASON } #More/Less likely based on difference in rank between actor and recipient modifier = { add = 20 scope:actor = { tier_difference = { target = scope:recipient value = 1 } } desc = AI_RANK_DIFF } modifier = { add = 30 scope:actor = { tier_difference = { target = scope:recipient value = 2 } } desc = AI_RANK_DIFF } modifier = { add = 40 scope:actor = { tier_difference = { target = scope:recipient value = 3 } } desc = AI_RANK_DIFF } modifier = { add = 50 scope:actor = { tier_difference = { target = scope:recipient value = 4 } } desc = AI_RANK_DIFF } modifier = { add = 60 scope:actor = { tier_difference = { target = scope:recipient value = 5 } } desc = AI_RANK_DIFF } modifier = { add = -20 scope:actor = { tier_difference = { target = scope:recipient value = -1 } } desc = AI_RANK_DIFF } modifier = { add = -30 scope:actor = { tier_difference = { target = scope:recipient value = -2 } } desc = AI_RANK_DIFF } modifier = { add = -40 scope:actor = { tier_difference = { target = scope:recipient value = -3 } } desc = AI_RANK_DIFF } modifier = { add = -50 scope:actor = { tier_difference = { target = scope:recipient value = -4 } } desc = AI_RANK_DIFF } modifier = { add = -60 scope:actor = { tier_difference = { target = scope:recipient value = -5 } } desc = AI_RANK_DIFF } modifier = { add = intimidated_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_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 = { add = -250 scope:secondary_recipient = { has_std_trigger = yes } desc = AI_STD_REASON } modifier = { add = -250 scope:secondary_recipient = { has_trait_with_flag = epidemic_disease } desc = AI_CONTAGIOUS_REASON } modifier = { add = -5000 scope:secondary_recipient = { fertility <= 0 } desc = AI_FERTILITY_REASON } modifier = { scope:hook = yes add = 500 scope:actor = { NOT = { has_strong_hook = scope:recipient } } desc = SCHEME_WEAK_HOOK_USED } modifier = { scope:hook = yes add = 1000 scope:actor = { has_strong_hook = scope:recipient } desc = SCHEME_STRONG_HOOK_USED } # Unity modifiers evaluate_action_increasing_house_unity = { VALUE = 100 } } ai_potential = { is_adult = yes NOT = { has_trait = incapable } is_at_war = no NOR = { has_trait = greedy ai_greed > very_high_positive_ai_value } OR = { culture = { has_cultural_tradition = tradition_concubines } faith = { has_doctrine = doctrine_concubines } } } ai_will_do = { base = 0 modifier = { # Basic Filtering add = 100 scope:recipient = { number_of_concubines < number_of_desired_concubines } scope:secondary_recipient = { trigger_if = { limit = { allowed_to_marry_same_sex_trigger = no } sex_opposite_of = scope:recipient } fertility > 0.2 is_young_character = yes NOR = { is_councillor_of = scope:actor is_of_major_interest_trigger = { CHARACTER = scope:actor } is_concubine_of = scope:actor } } } modifier = { # If secondary_recipient is close to actor, a good character, or if actor should take them as concubine add = -100 scope:secondary_recipient = { is_of_minor_interest_trigger = { CHARACTER = scope:actor } AND = { can_become_concubine_of_character_trigger = { CHARACTER = scope:actor } scope:actor = { number_of_concubines < number_of_desired_concubines } } } } modifier = { # If secondary_recipient could be an agent... add = 25 scope:actor = { any_scheme = { scheme_target_character ?= scope:recipient save_temporary_scope_as = scheme_check } } scope:secondary_recipient = { char_can_fit_into_scheme_trigger = { SCHEME = scope:scheme_check } } } modifier = { # More likely if it's a neighboring ruler that you want to like you add = 50 scope:recipient = { any_neighboring_top_liege_realm_owner = { this = scope:actor } max_military_strength > scope:actor.max_military_strength } } modifier = { # More likely if it's your friend and it's a nice concubine add = 50 scope:recipient = { OR = { has_relation_friend = scope:actor has_relation_best_friend = scope:actor } } scope:secondary_recipient = { fertility > 0.2 is_young_character = yes OR = { has_trait = lustful num_of_good_genetic_traits > 0 } } } modifier = { #Even if they're allowed to take same-sex concubines we don't want the AI to suggest it without a good reason if they're not attracted to the person add = -200 scope:recipient = { allowed_to_marry_same_sex_trigger = yes sex_same_as = scope:secondary_recipient NOT = { is_attracted_to_gender_of = scope:secondary_recipient } } } # Unity modifiers evaluate_action_increasing_house_unity = { VALUE = 100 } modifier = { # No if it's a same-sex concubinage and actor isn't accepting of it factor = 0 scope:actor = { allowed_to_marry_same_sex_trigger = no scope:recipient = { sex_same_as = scope:secondary_recipient } } } modifier = { # No if it's a same-sex concubinage and recipient isn't accepting of it factor = 0 scope:recipient = { allowed_to_marry_same_sex_trigger = no sex_same_as = scope:secondary_recipient } } modifier = { # Age considerations factor = 0 scope:recipient = { OR = { age >= scope:secondary_actor.age_plus_10 age <= scope:secondary_actor.age_minus_10 scope:secondary_actor.age >= 30 # Concubines are meant to be young... } } } modifier = { # Incest Filtering: Hard NO! factor = 0 scope:recipient = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } NOR = { accepts_incest_with_trigger = { CHARACTER = scope:secondary_recipient } sexually_liberal_trigger = yes } } } modifier = { # Incest Filtering: Not likely, but keep the door open... factor = 0.2 scope:recipient = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } OR = { accepts_incest_with_trigger = { CHARACTER = scope:secondary_recipient } sexually_liberal_trigger = yes } } } modifier = { # Faith considerations factor = 0 scope:recipient = { faith = { faith_hostility_level = { target = scope:actor.faith value >= faith_hostile_level } } NOR = { has_relation_friend = scope:actor has_relation_best_friend = scope:actor } } } } on_send = { scope:secondary_recipient = { # to block the same character from being offered twice add_character_flag = { flag = has_been_offered_as_concubine days = 5 } } } on_accept = { concubine_offer_on_accept_effect = yes # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_concubinage_offer.desc REVERSE_NON_HOUSE_TARGET = no } } on_decline = { scope:actor = { send_interface_toast = { type = event_toast_effect_bad title = msg_concubine_offer_rejected_title right_icon = scope:recipient left_icon = scope:secondary_recipient custom_tooltip = msg_concubine_offer_rejected } } # 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_concubinage_offer_decline.desc REVERSE_NON_HOUSE_TARGET = no } } send_options_exclusive = no 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" } dismiss_concubine_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = concubine_icon is_shown = { scope:recipient = { is_concubine_of = scope:actor } } is_valid_showing_failures_only = { scope:recipient = { NOT = { has_strong_hook = scope:actor } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:target } text = BOUND_TO_FAMILY_WIDOW } } } auto_accept = yes on_accept = { scope:actor = { stress_impact = { compassionate = minor_stress_impact_gain } hidden_effect = { send_interface_toast = { type = event_toast_effect_neutral title = msg_concubine_dismissed_title right_icon = scope:recipient remove_concubine = scope:recipient } } } scope:recipient = { # No point in sending a notification since the player can't be an unlanded concubine in any case # trigger_event = marriage_interaction.0050 # Being thrown aside is humiliating, even if you didn't want to be a concubine in the first place. add_opinion = { modifier = set_me_aside_opinion target = scope:actor } if = { limit = { scope:actor = { has_relation_lover = scope:recipient } } lover_breakup_effect = { BREAKER = scope:actor LOVER = scope:recipient } } # Figure out where we should go now that we're no longer a concubine. if = { limit = { is_councillor_of = scope:actor } # Then they should remain in court } else_if = { #Dismiss to relevant court, or to pool limit = { any_close_family_member = { is_landed_or_landless_administrative = yes } } random_close_family_member = { limit = { is_child_of = scope:recipient is_landed_or_landless_administrative = yes } alternative_limit = { is_parent_of = scope:recipient is_landed_or_landless_administrative = yes } alternative_limit = { is_landed_or_landless_administrative = yes } add_courtier = scope:recipient } } else = { move_to_pool = yes } } # 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_concubinage_dismissal.desc REVERSE_NON_HOUSE_TARGET = no } } } divorce_character_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = icon_marriage desc = divorce_character_interaction_desc cost = { piety = divorce_cost } is_shown = { scope:actor.faith = { # We are not required to seek approval of a spiritual HoF NAND = { has_doctrine = doctrine_divorce_approval has_doctrine = doctrine_spiritual_head exists = religious_head } # We are not required to seek approval of a house head NAND = { has_doctrine = doctrine_divorce_approval exists = scope:actor.house exists = scope:actor.house.house_head scope:actor = { is_house_head = no } } } scope:recipient = { is_spouse_of = scope:actor is_concubine = no # Can set aside Concubines at any time } } is_valid_showing_failures_only = { custom_tooltip = { NOT = { scope:actor.culture = { has_cultural_parameter = cannot_divorce } } text = CULTURE_FORBIDS_DIVORCE } NOT = { scope:actor.faith = { has_doctrine = doctrine_divorce_disallowed } } scope:recipient = { NOT = { has_strong_hook = scope:actor } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:target } text = BOUND_TO_FAMILY_WIDOW } } } auto_accept = yes on_accept = { scope:actor = { divorce_effect = { DIVORCER = scope:actor DIVORCEE = scope:recipient } if = { limit = { allowed_concubines = yes } custom_tooltip = divorce_cannot_concubine_ex_wife } } scope:recipient = { trigger_event = marriage_interaction.0030 } # 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_divorce.desc REVERSE_NON_HOUSE_TARGET = no } } # AI ai_targets = { ai_recipients = spouses } ai_frequency_by_tier = { barony = 0 county = 72 duchy = 36 kingdom = 36 empire = 36 hegemony = 36 } ai_potential = { is_ruler = yes } ai_will_do = { base = 0 modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile add = 100 scope:actor = { fertility > 0.1 NOT = { any_child = { is_heir_of = scope:actor } } } scope:recipient = { is_ai = yes fertility < 0.1 } } modifier = { # The AI will divorce if they're in a same-sex marriage and their faith changes its stance on the topic add = 100 scope:actor = { sex_same_as = scope:recipient allowed_to_marry_same_sex_trigger = no } } } } divorce_character_house_head_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = icon_marriage cost = { piety = divorce_cost } redirect = { scope:recipient = { save_scope_as = secondary_recipient } if = { limit = { exists = scope:actor.house.house_head } scope:actor.house.house_head = { save_scope_as = recipient } } } greeting = positive notification_text = ASK_FOR_DIVORCE_NOTIFICATION is_shown = { exists = scope:actor.house.house_head scope:actor != scope:actor.house.house_head # no need to ask yourself scope:actor.faith = { has_doctrine = doctrine_divorce_approval } NAND = { exists = scope:actor.faith.religious_head scope:actor.faith = { has_doctrine = doctrine_spiritual_head } } scope:secondary_recipient = { is_spouse_of = scope:actor is_concubine = no # Can set aside Concubines at any time } } is_valid_showing_failures_only = { custom_tooltip = { NOT = { scope:actor.culture = { has_cultural_parameter = cannot_divorce } } text = CULTURE_FORBIDS_DIVORCE } NOT = { scope:secondary_recipient = { has_strong_hook = scope:actor } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:target } text = BOUND_TO_FAMILY_WIDOW } } } ai_accept = { base = 0 # Should be 0 for all interactions divorce_character_ai_accept_modifier = yes modifier = { # Infertility add = 20 desc = DIVORCE_INFERTILE scope:actor = { fertility > 0.1 } scope:secondary_recipient = { fertility < 0.1 is_eunuch_trigger = no NOT = { any_child = { is_child_of = scope:actor } } } } modifier = { # Negative for having given you children add = -50 desc = DIVORCE_GIVEN_CHILDREN scope:secondary_recipient = { any_child = { count >= 3 is_child_of = scope:actor dynasty ?= scope:actor.dynasty } } } modifier = { # They are of the same dynasty as the House Head trigger = { scope:recipient != scope:secondary_recipient } add = -10 desc = THEY_ARE_MY_DYNASTY_MEMBER scope:recipient = { is_lowborn = no exists = dynasty NOR = { is_cousin_of = scope:secondary_recipient is_close_or_extended_family_of = scope:secondary_recipient } dynasty = scope:secondary_recipient.dynasty NOR = { house = scope:secondary_recipient.house is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor AND = { exists = scope:actor.dynasty scope:recipient.dynasty = scope:actor.dynasty } } } } modifier = { # They are of the same house as the House Head trigger = { scope:recipient != scope:secondary_recipient } add = -20 desc = THEY_ARE_MY_HOUSE_MEMBER scope:recipient = { is_lowborn = no NOR = { is_cousin_of = scope:secondary_recipient is_close_or_extended_family_of = scope:secondary_recipient } house = scope:secondary_recipient.house NOR = { house = scope:actor.house is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.house = scope:actor.house } } } modifier = { # They are close kin to the House Head trigger = { scope:recipient != scope:secondary_recipient } add = -35 desc = THEY_ARE_MY_CLOSE_KIN scope:recipient = { OR = { is_cousin_of = scope:secondary_recipient is_close_or_extended_family_of = scope:secondary_recipient } } } modifier = { add = intimidated_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_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 = { # You're in a same-sex marriage and your faith doesn't allow it add = 100 desc = SAME_SEX_MARRIAGE_FAITH_REASON_ACTOR scope:actor.faith = scope:recipient.faith scope:actor = { sex_same_as = scope:secondary_recipient allowed_to_marry_same_sex_trigger = no } } modifier = { # You're in a same-sex marriage and their faith doesn't allow it add = 100 desc = SAME_SEX_MARRIAGE_FAITH_REASON scope:secondary_recipient.faith = scope:recipient.faith scope:secondary_recipient = { sex_same_as = scope:actor allowed_to_marry_same_sex_trigger = no } } # Unity modifiers evaluate_action_decreasing_house_unity = { VALUE = 100 } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:divorce_hook = yes } } send_option = { is_shown = { scope:actor != scope:recipient } is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = divorce_hook localization = GENERIC_SPEND_A_HOOK } should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" send_options_exclusive = no ai_min_reply_days = 1 ai_max_reply_days = 5 on_accept = { if = { limit = { always = scope:divorce_hook } scope:actor = { if = { limit = { has_usable_hook = scope:recipient } use_hook = scope:recipient } } } if = { limit = { scope:actor = scope:actor.house.house_head } scope:actor = { divorce_effect = { DIVORCER = scope:actor DIVORCEE = scope:secondary_recipient } } } else = { show_as_tooltip = { scope:actor = { divorce_effect = { DIVORCER = scope:actor DIVORCEE = scope:secondary_recipient } } } scope:actor = { trigger_event = religious_interaction.2 } } # 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_divorce_grant.desc REVERSE_NON_HOUSE_TARGET = no } } on_decline = { scope:actor = { send_interface_toast = { type = event_toast_effect_bad title = divorce_character_rel_head_interaction_decline_notification right_icon = scope:actor.house.house_head } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_loss DESC = clan_unity_divorce_grant_refusal.desc REVERSE_NON_HOUSE_TARGET = no } } # AI ai_targets = { ai_recipients = spouses } ai_frequency_by_tier = { barony = 0 county = 72 duchy = 36 kingdom = 36 empire = 36 hegemony = 36 } ai_potential = { is_ruler = yes } ai_will_do = { base = 0 modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile add = 100 scope:actor = { fertility > 0.1 NOT = { any_child = { is_heir_of = scope:actor } } } scope:secondary_recipient = { is_ai = yes fertility < 0.1 } } modifier = { # The AI will only use a Hook if they couldn't otherwise do this scope:divorce_hook = yes add = -1 } modifier = { # You're in a same-sex marriage and your faith doesn't allow it add = 100 scope:actor = { sex_same_as = scope:secondary_recipient allowed_to_marry_same_sex_trigger = no } } } } divorce_character_rel_head_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = icon_marriage cost = { piety = divorce_cost } redirect = { scope:recipient = { save_scope_as = secondary_recipient } if = { limit = { exists = scope:actor.faith.religious_head } scope:actor.faith.religious_head = { save_scope_as = recipient } } } greeting = positive notification_text = ASK_FOR_DIVORCE_NOTIFICATION is_shown = { exists = scope:actor.faith.religious_head scope:actor.faith = { has_doctrine = doctrine_spiritual_head has_doctrine = doctrine_divorce_approval } scope:secondary_recipient = { is_spouse_of = scope:actor is_concubine = no # Can set aside Concubines at any time } } is_valid_showing_failures_only = { scope:actor = { NOT = { has_trait = excommunicated } } custom_tooltip = { NOT = { scope:actor.culture = { has_cultural_parameter = cannot_divorce } } text = CULTURE_FORBIDS_DIVORCE } NOT = { scope:secondary_recipient = { has_strong_hook = scope:actor } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:recipient } text = BOUND_TO_FAMILY_WIDOW } } } ai_accept = { base = 0 # Should be 0 for all interactions divorce_character_ai_accept_modifier = yes modifier = { # Divine Family is part of the faith add = -100 desc = DIVORCE_INCESTUOUS scope:actor = { is_close_or_extended_family_of = scope:secondary_recipient faith = { has_doctrine = tenet_divine_marriage } } } modifier = { # More likely if the marriage is incestuous, unless Divine Family is part of the faith add = 100 desc = DIVORCE_INCESTUOUS scope:actor = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } } } modifier = { # They are of the same dynasty as the Head of Faith add = -5 desc = THEY_ARE_MY_DYNASTY_MEMBER scope:recipient = { is_lowborn = no exists = dynasty exists = scope:secondary_recipient.dynasty dynasty = scope:secondary_recipient.dynasty NOR = { house = scope:secondary_recipient.house is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.dynasty = scope:actor.dynasty } } } modifier = { # You are of the same dynasty as the Head of Faith add = 5 desc = YOU_ARE_MY_DYNASTY_MEMBER scope:recipient = { is_lowborn = no exists = dynasty exists = scope:actor.dynasty dynasty = scope:actor.dynasty NOR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.dynasty = scope:secondary_recipient.dynasty } } } modifier = { # They are of the same house as the Head of Faith add = -10 desc = THEY_ARE_MY_HOUSE_MEMBER scope:recipient = { is_lowborn = no exists = house exists = scope:secondary_recipient.house house = scope:secondary_recipient.house NOR = { house = scope:actor.house is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.house = scope:actor.house } } } modifier = { # You are of the same house as the Head of Faith add = 10 desc = YOU_ARE_MY_HOUSE_MEMBER scope:recipient = { is_lowborn = no exists = house exists = scope:actor.house house = scope:actor.house NOR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.house = scope:secondary_recipient.house } } } modifier = { # Related to the Head of Faith add = 25 desc = YOU_ARE_MY_RELATIVE scope:recipient = { OR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor } NOT = { is_child_of = scope:actor } } } modifier = { # Parent of the Head of Faith add = 50 desc = PARENTS #YOU_ARE_MY_PARENT scope:recipient = { is_child_of = scope:actor } } modifier = { add = { add = 10 multiply = scope:actor.num_virtuous_traits } scope:actor.num_virtuous_traits > 0 desc = I_AM_VIRTUOUS } modifier = { add = { add = -10 multiply = scope:secondary_recipient.num_virtuous_traits } scope:secondary_recipient.num_virtuous_traits > 0 desc = THEY_ARE_VIRTUOUS } modifier = { add = { add = -10 multiply = scope:actor.num_sinful_traits } scope:actor.num_sinful_traits > 0 desc = I_AM_SINFUL } modifier = { add = { add = 10 multiply = scope:secondary_recipient.num_sinful_traits } scope:secondary_recipient.num_sinful_traits > 0 desc = THEY_ARE_SINFUL } modifier = { # You're in a same-sex marriage and your faith doesn't allow it add = 100 desc = SAME_SEX_MARRIAGE_FAITH_REASON_ACTOR scope:actor.faith = scope:recipient.faith scope:actor = { sex_same_as = scope:secondary_recipient allowed_to_marry_same_sex_trigger = no } } modifier = { # You're in a same-sex marriage and their faith doesn't allow it add = 100 desc = SAME_SEX_MARRIAGE_FAITH_REASON scope:secondary_recipient.faith = scope:recipient.faith scope:secondary_recipient = { sex_same_as = scope:actor allowed_to_marry_same_sex_trigger = no } } modifier = { # You have denounced them as impotent (ep2_wedding.1061) add = 30 desc = THEY_ARE_ACCUSED_IMPOTENCY scope:secondary_recipient = { has_character_modifier = wedding_accused_impotency_modifier } } # Unity modifiers evaluate_action_decreasing_house_unity = { VALUE = 100 } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:divorce_hook = yes } } send_option = { is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = divorce_hook localization = GENERIC_SPEND_A_HOOK } should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" send_options_exclusive = no ai_min_reply_days = 1 ai_max_reply_days = 5 on_accept = { if = { limit = { always = scope:divorce_hook } scope:actor = { if = { limit = { has_usable_hook = scope:recipient } use_hook = scope:recipient } } } show_as_tooltip = { scope:actor = { divorce_effect = { DIVORCER = scope:actor DIVORCEE = scope:secondary_recipient } } } scope:actor = { trigger_event = religious_interaction.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_alliance.desc REVERSE_NON_HOUSE_TARGET = no } } on_decline = { scope:actor = { send_interface_toast = { type = event_toast_effect_bad title = divorce_character_rel_head_interaction_decline_notification right_icon = scope:actor.faith.religious_head } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_loss DESC = clan_unity_alliance.desc REVERSE_NON_HOUSE_TARGET = no } } # AI ai_targets = { ai_recipients = spouses } ai_frequency_by_tier = { barony = 0 county = 72 duchy = 36 kingdom = 36 empire = 36 hegemony = 36 } ai_potential = { is_ruler = yes } ai_will_do = { base = 0 modifier = { # The AI wants to divorce should they not have an heir that is their own child, and their spouse is infertile add = 100 scope:actor = { fertility > 0.1 NOT = { any_child = { is_heir_of = scope:actor } } } scope:secondary_recipient = { is_ai = yes fertility < 0.1 } } modifier = { # The AI will only use a Hook if they couldn't otherwise do this scope:divorce_hook = yes add = -1 } modifier = { # You're in a same-sex marriage and your faith doesn't allow it add = 100 scope:actor = { sex_same_as = scope:secondary_recipient allowed_to_marry_same_sex_trigger = no } } } } divorce_character_dynast_request_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = icon_dynasty desc = divorce_character_dynast_request_interaction_desc cost = { piety = divorce_cost renown = scope:actor.dynasty.minor_dynasty_prestige_value } redirect = { scope:recipient = { save_scope_as = secondary_actor } if = { limit = { exists = scope:recipient.primary_spouse } scope:recipient.primary_spouse = { save_scope_as = recipient } } } is_shown = { scope:secondary_actor != scope:actor scope:secondary_actor.dynasty.dynast = scope:actor scope:actor.faith = { # We are not required to seek approval of a spiritual HoF NAND = { has_doctrine = doctrine_divorce_approval has_doctrine = doctrine_spiritual_head exists = religious_head } } OR = { AND = { scope:actor.faith != scope:secondary_actor.faith # They are not required to seek approval of a spiritual HoF of the Dynasty Member scope:secondary_actor.faith = { NOT = { has_doctrine = doctrine_divorce_approval } } } scope:actor.faith = scope:secondary_actor.faith } scope:recipient = { is_spouse_of = scope:secondary_actor is_concubine = no # Can set aside Concubines at any time } } is_valid_showing_failures_only = { custom_tooltip = { NOT = { scope:actor.culture = { has_cultural_parameter = cannot_divorce } } text = CULTURE_FORBIDS_DIVORCE } NOT = { scope:actor.faith = { has_doctrine = doctrine_divorce_disallowed } } scope:actor.dynasty = { dynasty_prestige >= minor_dynasty_prestige_value } NOT = { scope:secondary_actor.faith = { has_doctrine = doctrine_divorce_disallowed } } scope:secondary_actor = { NOT = { has_strong_hook = scope:actor } } trigger_if = { limit = { scope:secondary_actor = { NOR = { is_child_of = scope:actor is_grandchild_of = scope:actor is_great_grandchild_of = scope:actor } } } custom_description = { scope:secondary_actor.top_liege = scope:actor.top_liege text = "same_realm_as" } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:target } text = BOUND_TO_FAMILY_WIDOW } } } auto_accept = yes on_accept = { scope:actor = { send_interface_toast = { type = event_toast_effect_good title = divorce_character_dynast_request_interaction_title custom_tooltip = divorce_character_dynast_request_interaction_desc left_icon = scope:secondary_actor right_icon = scope:recipient } } scope:secondary_actor = { divorce_effect = { DIVORCER = scope:secondary_actor DIVORCEE = scope:recipient } add_opinion = { modifier = forced_divorce_opinion target = scope:actor } } if = { limit = { scope:recipient != scope:actor } scope:recipient = { trigger_event = marriage_interaction.0030 add_opinion = { modifier = forced_divorce_opinion target = scope:actor } } } } # AI ai_targets = { ai_recipients = dynasty max = 10 } ai_frequency_by_tier = { barony = 0 county = 144 duchy = 72 kingdom = 72 empire = 72 hegemony = 72 } ai_potential = { is_ruler = yes } ai_will_do = { base = 0 modifier = { # The AI wants to force a divorce if their heir is not from their dynasty and current marriage within the dynasty are not promising add = 100 scope:secondary_actor = { fertility > 0.1 } scope:recipient = { is_ai = yes fertility < 0.1 } exists = scope:actor.primary_heir exists = scope:actor.primary_heir.dynasty scope:actor.primary_heir.dynasty != this.dynasty } #Players should not be targeted modifier = { add = -1000 OR = { scope:secondary_actor = { is_ai = no } scope:recipient = { is_ai = no } } } } } divorce_character_dynast_request_rel_head_interaction = { category = interaction_category_diplomacy use_diplomatic_range = no icon = icon_dynasty cost = { piety = divorce_cost renown = scope:actor.dynasty.minor_dynasty_prestige_value } redirect = { scope:recipient = { save_scope_as = secondary_actor } if = { limit = { exists = scope:recipient.primary_spouse } scope:recipient.primary_spouse = { save_scope_as = secondary_recipient } } if = { limit = { exists = scope:actor.faith.religious_head } scope:actor.faith.religious_head = { save_scope_as = recipient } } } greeting = positive notification_text = ASK_FOR_DIVORCE_NOTIFICATION is_shown = { scope:secondary_actor != scope:actor scope:secondary_actor.dynasty.dynast = scope:actor NOT = { scope:secondary_actor = { is_spouse_of = scope:actor } } exists = scope:secondary_recipient scope:actor.faith = scope:secondary_actor.faith exists = scope:actor.faith.religious_head scope:actor.faith = { has_doctrine = doctrine_spiritual_head has_doctrine = doctrine_divorce_approval } } is_valid_showing_failures_only = { custom_tooltip = { NOT = { scope:actor.culture = { has_cultural_parameter = cannot_divorce } } text = CULTURE_FORBIDS_DIVORCE } scope:actor.dynasty = { dynasty_prestige >= minor_dynasty_prestige_value } scope:secondary_actor = { NOT = { has_strong_hook = scope:actor } } trigger_if = { limit = { scope:secondary_actor = { NOR = { is_child_of = scope:actor is_grandchild_of = scope:actor is_great_grandchild_of = scope:actor } } } custom_description = { scope:secondary_actor.top_liege = scope:actor.top_liege text = "same_realm_as" } } scope:actor = { custom_tooltip = { NOT = { var:family_widow_forbidden_divorce ?= scope:target } text = BOUND_TO_FAMILY_WIDOW } } } ai_accept = { base = 0 # Should be 0 for all interactions divorce_character_ai_accept_modifier = yes modifier = { # Divine Family is part of the faith add = -100 desc = DIVORCE_INCESTUOUS scope:secondary_actor = { is_close_or_extended_family_of = scope:secondary_recipient faith = { has_doctrine = tenet_divine_marriage } } } modifier = { # More likely if the marriage is incestuous, unless Divine Family is part of the faith add = 100 desc = DIVORCE_INCESTUOUS scope:secondary_actor = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:secondary_recipient } } } modifier = { # You are of the same dynasty as the Head of Faith add = 5 desc = YOU_ARE_MY_DYNASTY_MEMBER scope:recipient = { is_lowborn = no dynasty = scope:actor.dynasty NOR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.dynasty = scope:secondary_recipient.dynasty } } } modifier = { # You are of the same house as the Head of Faith add = 10 desc = YOU_ARE_MY_HOUSE_MEMBER scope:recipient = { is_lowborn = no house = scope:actor.house NOR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor is_child_of = scope:actor scope:recipient.house = scope:secondary_recipient.house } } } modifier = { # Related to the Head of Faith add = 25 desc = YOU_ARE_MY_RELATIVE scope:recipient = { OR = { is_close_or_extended_family_of = scope:actor is_cousin_of = scope:actor } NOT = { is_child_of = scope:actor } } } modifier = { # Parent of the Head of Faith add = 50 desc = PARENTS #YOU_ARE_MY_PARENT scope:recipient = { is_child_of = scope:actor } } modifier = { add = { add = 10 multiply = scope:actor.num_virtuous_traits } scope:actor.num_virtuous_traits > 0 desc = I_AM_VIRTUOUS } modifier = { add = { add = -10 multiply = scope:secondary_recipient.num_virtuous_traits } scope:secondary_recipient.num_virtuous_traits > 0 desc = THEY_ARE_VIRTUOUS } modifier = { add = { add = -10 multiply = scope:actor.num_sinful_traits } scope:actor.num_sinful_traits > 0 desc = I_AM_SINFUL } modifier = { add = { add = 10 multiply = scope:secondary_recipient.num_sinful_traits } scope:secondary_recipient.num_sinful_traits > 0 desc = THEY_ARE_SINFUL } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:divorce_hook = yes } } send_option = { is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = divorce_hook localization = GENERIC_SPEND_A_HOOK } should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" send_options_exclusive = no ai_min_reply_days = 1 ai_max_reply_days = 5 on_accept = { if = { limit = { always = scope:divorce_hook } scope:actor = { if = { limit = { has_usable_hook = scope:recipient } use_hook = scope:recipient } } } scope:actor = { trigger_event = religious_interaction.6 } scope:secondary_actor = { divorce_effect = { DIVORCER = scope:secondary_actor DIVORCEE = scope:secondary_recipient } add_opinion = { modifier = forced_divorce_opinion target = scope:actor } } scope:secondary_recipient = { add_opinion = { modifier = forced_divorce_opinion target = scope:actor } } } on_decline = { scope:actor = { send_interface_toast = { type = event_toast_effect_bad title = divorce_character_dynast_request_rel_head_interaction_decline_notification right_icon = scope:actor.faith.religious_head } } } # AI ai_targets = { ai_recipients = dynasty max = 10 } ai_frequency_by_tier = { barony = 0 county = 144 duchy = 72 kingdom = 72 empire = 72 hegemony = 72 } ai_potential = { is_ruler = yes } ai_will_do = { base = 0 modifier = { # The AI wants to force a divorce if their heir is not from their dynasty and current marriage within the dynasty are not promising add = 100 scope:secondary_actor = { fertility > 0.1 } scope:secondary_recipient = { is_ai = yes fertility < 0.1 } exists = scope:actor.primary_heir exists = scope:actor.primary_heir.dynasty scope:actor.primary_heir.dynasty != this.dynasty } modifier = { # The AI will only use a Hook if they couldn't otherwise do this scope:divorce_hook = yes add = -1 } #Players should not be targeted modifier = { add = -1000 OR = { scope:secondary_actor = { is_ai = no } scope:secondary_recipient = { is_ai = no } } } } } elope_interaction = { icon = icon_scheme_elope category = interaction_category_friendly scheme = elope desc = elope_interaction_desc notification_text = elope_interaction_notification ai_targets = { ai_recipients = realm_characters chance = 0.25 } ai_target_quick_trigger = { adult = yes attracted_to_owner = yes owner_attracted = yes } ai_frequency_by_tier = { barony = 0 county = 144 duchy = 36 kingdom = 0 empire = 0 hegemony = 0 } redirect = { scope:recipient = { save_scope_as = secondary_recipient } } is_shown = { scope:actor = { OR = { has_relation_lover = scope:recipient has_relation_soulmate = scope:recipient AND = { has_government = landless_adventurer_government has_perk = accomplished_forger_perk } } } scope:recipient = { is_adult = yes is_courtier = yes NOR = { is_courtier_of = scope:actor is_consort_of = scope:actor } could_marry_character_trigger = { CHARACTER = scope:actor } } } is_valid_showing_failures_only = { scope:actor = { can_start_scheme = { type = elope target_character = scope:recipient } } trigger_if = { #For landless adventurers we check range. limit = { scope:actor = { is_landless_adventurer = yes } } ep3_laamp_diplo_range_trigger = { TARGET = scope:recipient LAAMP = scope:actor } } } ai_accept = { base = 0 elopment_ai_accept_modifier = yes } ai_potential = { is_adult = yes OR = { any_relation = { type = lover } any_relation = { type = soulmate } } NOR = { has_trait = celibate scheme_generic_ai_blocker_trigger = yes } } ai_min_reply_days = 1 ai_max_reply_days = 3 on_accept = { scope:actor = { stress_impact = { honest = minor_stress_impact_gain just = minor_stress_impact_gain } show_as_tooltip = { elope_success_effect = { TARGET = scope:recipient OWNER = scope:actor } } } hidden_effect = { scope:actor = { send_interface_toast = { type = event_toast_effect_good title = elope_interaction_notification left_icon = scope:actor right_icon = scope:recipient begin_scheme_basic_effect = { SCHEME_TYPE = elope TARGET_TYPE = target_character TARGET_SCOPE = scope:recipient } show_as_tooltip = { stress_impact = { honest = minor_stress_impact_gain just = minor_stress_impact_gain } } } } } } on_decline = { scope:actor = { send_interface_toast = { type = event_toast_effect_bad title = elope_interaction_decline_toast left_icon = scope:recipient } } } ai_will_do = { base = 100 } }