@ai_skill_diff_upper_threshold = 8
@ai_skill_diff_lower_threshold = 2
@ai_prestige_bank_threshold = 2

@ai_core_loop_base_value = 4000
@ai_threshold_for_revoke_cyle = 3
@ai_secondary_powers_base_value = 500

###############################################
# #Setup & Misc
#
# CORE DIARCH POWERS
# diarch_revoke_title_interaction		- diarch (actor) takes a title from a vassal of their liege (recipient) with an optional veto for the liege (third_party).
# diarch_retract_vassal_interaction		- diarch (actor) takes a vassal from a vassal of their liege (recipient) with an optional veto for the liege (third_party).
# diarch_imprison_interaction			- diarch (actor) tries to move a character (recipient) within the sub-realm of their liege (third) to their dungeon, with an optional veto for the liege.
# diarch_entrench_regency_interaction	- diarch (actor) shifts the diarchy from temporary to entrenched, making it more difficult for their liege (recipient) to get rid of them.
#
# ANCILLARY DIARCH POWERS
# diarch_legal_meddling_interaction		- diarch (actor) either tests learning or spends prestige to gain an unpressed claim on a title held by a vassal of their liege (recipient).
# diarch_syphon_treasury_interaction	- diarch (actor) either tests stewardship or spends prestige to gain gold at the expense of negative modifiers delivered to the liege (recipient).
# diarch_shift_privileges_interaction	- diarch (actor) either tests diplomacy or spends prestige to give negative modifiers to the lands of a vassal of their liege (secondary recipient), who can't resist.
##################################################










##################################################
# CORE DIARCH POWERS

# Diarch (actor) takes a title from a vassal (recipient) of their liege with an optional veto for the liege (third_party).
diarch_revoke_title_interaction = {
	category = interaction_category_diarch
	common_interaction = no
	interface_priority = 35
	diarch_interaction = yes
	highlighted_reason = HIGHLIGHTED_CAN_DIARCH_REVOKE
	notification_text = DIARCH_REVOKE_TITLE_PROPOSAL
	intermediary_notification_text = diarch_interaction_requesting_sign_off.tt
	intermediary_breakdown_yes = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_YES
	intermediary_breakdown_no = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_NO
	intermediary_breakdown_maybe = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_MAYBE
	intermediary_answer_accept_key = REPLY_ANSWER_ALLOW
	intermediary_answer_reject_key = REPLY_ANSWER_VETO
	pre_answer_yes_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_YES
	pre_answer_no_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_NO
	pre_answer_maybe_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_MAYBE
	icon = revoke_title
	redirect = {
		scope:actor.liege ?= { save_scope_as = intermediary }
	}

	desc = diarch_revoke_title_interaction_desc
	send_name = diarch_revoke_title_interaction.send_name

	special_interaction = diarch_revoke_title
	interface = revoke_title
	target_type = title
	target_filter = recipient_domain_titles
	ai_maybe = yes
	ai_intermediary_maybe = yes
	can_send_despite_rejection = yes
	popup_on_receive = yes
	pause_on_receive = yes

	interface_priority = 60
	ai_min_reply_days = 4
	ai_max_reply_days = 9

	on_decline_summary = diarch_rebel_or_crime_summary
	prompt = RETRACT_VASSAL_SELECT_VASSAL_TO_RETRACT

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			NOT = { this = scope:actor.liege }
			# ... who are appropriately landed.
			is_landed_or_landless_administrative = yes
			scope:recipient.highest_held_title_tier >= tier_county
		}
	}
	
	is_valid = {
		# Here to correct for some dodgy inheritance situations.
		NOT = { scope:actor = scope:intermediary }
	}
	is_valid_showing_failures_only = {
		# Standard validity checks.
		title_revocation_standard_valid_showing_failures_only_trigger = yes
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Plus make sure there's a legal right to revoke.
		scope:actor.liege = {
			trigger_if = {
				limit = { government_has_flag = government_is_tribal }
				custom_description = {
					text = "liege_has_law_allowing_title_revocation_tribal"
					has_realm_law_flag = title_revocation_allowed
				}
			}
			trigger_else_if = {
				limit = { government_has_flag = government_is_administrative }
				custom_description = {
					text = "cannot_diarch_revoke_administrative_titles"
					always = no
				}
			}
			trigger_else = {
				custom_description = {
					text = "liege_has_law_allowing_title_revocation_crown"
					has_realm_law_flag = title_revocation_allowed
				}
			}
		}
		trigger_if = {
			limit = {
				scope:recipient = { vassal_contract_has_flag = vassal_contract_cannot_revoke_titles }
			}
			custom_description = {
				text = liege_vassal_contract_forbids_revocation
				object = scope:recipient
				scope:recipient = {
					NOT = { vassal_contract_has_flag = vassal_contract_cannot_revoke_titles }
				}
			}
		}
		# Diarch revocations require a claim.
		diarch_revocation_has_claim_check_trigger = yes
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_an_entrenched_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege ?= { has_diarchy_active_parameter = unlock_diarch_revoke_title_interaction }
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	cooldown = { years = 1 }
	cooldown_against_recipient = { years = 3 }

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}
	
	is_highlighted = {
		# Diarch revocations require a claim - this is uncommon, so we always highlight it.
		diarch_revocation_has_claim_check_trigger = yes
	}
		
	can_be_picked_title = {
		scope:target = {
			title_revocation_standard_can_pick_title_trigger = yes
			# Plus, must have scope:actor as a claimant.
			custom_description = {
				text = "you_must_have_a_claim_on_the_title"
				scope:actor = { has_claim_on = scope:target }
			}
		}
	}

	# Hooks can be used to force this through.
	## We don't force-force this on/for the player (so no pain but less benefits), but AI regard weak hooks as compulsory from/for other AI.
	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"

	on_send = {
		scope:actor = {
			add_character_flag = {
				flag = flag_hostile_actions_disabled_delay
				days = 10
			}
		}
		# Did a landless diarch send this?
		log_diarch_send_interaction_as_variable_effect = { INTERACTION = revoke }
	}

	on_auto_accept = {
		scope:recipient = { trigger_event = char_interaction.0261 }
	}

	on_accept = {
		# Since this is a confusing interaction, we want to clarify what you're nicking.
		scope:actor = { custom_tooltip = diarch_revoke_title_interaction.tt.gain_title }
		# To keep some other arcane script working.
		save_scope_value_as = {
			name = revoke_title_interaction
			value = yes
		}
		scope:actor = {
			# Tell them that the revocation went through fine.
			trigger_event = char_interaction.0262
		}
		# Otherwise, follow the standard flow for revocation.
		save_scope_value_as = {
			name = use_strife_not_tyranny
			value = yes
		}
		revoke_title_interaction_effect = yes
		scope:actor = {
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# To avoid unlanded regents becoming vassals of the liege's direct vassals, make sure the current liege remains the liege
		hidden_effect = {
			scope:actor = {
				if = {
					limit = { 
						is_landed_or_landless_administrative = no
						NOT = { scope:intermediary = scope:recipient }
					}
					# This has a delay of 1 day (if no delay then the liege change doesn't stick) which really isn't ideal and should be looked into/fixed so that it happens when the action goes into effect
					trigger_event = { id = diarchy.0141 days = 1 }
				}
			}
		}

		# Debug logging.
		debug_log = debug_log.diarch_revoke_title.accepted
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_revoke_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_accept_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_accept_intermediary_list }
		}
	}

	on_intermediary_decline = {
		# Scope:intermediary eats a prestige cost for their veto.
		scope:intermediary = { add_prestige = liege_diarchy_veto_prestige_cost_high }
		scope:actor = {
			# Inform scope:actor that their liege has vetoed them.
			## First, we log which interaction this is for the event's effects.
			save_scope_value_as = {
				name = diarch_interaction
				value = flag:title_revoke
			}
			## Then, fire the event.
			trigger_event = char_interaction.0291
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# Inform scope:recipient that scope:intermediary has their back.
		scope:recipient = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = diarch_action_vetoed.tt
				left_icon = scope:actor
				right_icon = scope:intermediary
				custom_tooltip = diarch_revoke_title_interaction.tt.inform_recipient
			}
		}
		# Flick out some opinions.
		diarch_revoke_title_interaction_intermediary_fail_opinions_effect = yes

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_revoke_veto }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_veto_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_veto_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_veto_intermediary_list }
		}
	}

	on_decline = {
		scope:actor = {
			# Tell them that the revocation ran into issues.
			trigger_event = char_interaction.0263
			# And give a crime reason for both them and the liege.
			show_as_tooltip = {
				random_list = {
					50 = {
						show_chance = no
						desc = char_interaction.0263.result.criminal
						diarch_declare_recipient_criminal_effect = yes
					}
					50 = {
						show_chance = no
						desc = char_interaction.0263.result.war
						diarch_declare_claim_war_effect = yes
					}
				}
			}
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# Flick out some opinions.
		## Scope:recipient is annoyed with scope:actor.
		scope:recipient = {
			add_opinion = {
				target = scope:actor
				modifier = revoked_title
			}
		}

		# Debug logging.
		debug_log = debug_log.diarch_revoke_title.rejected
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_revoke_reject }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_reject_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_reject_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_revoke_reject_intermediary_list }
		}
	}

	auto_accept = {
		scope:recipient = {
			calc_true_if = {
				amount >= 2
				custom_description = {
					text = "prisoner_revocation"
					is_imprisoned_by = scope:actor
				}
				custom_description = {
					text = "spending_hook"
					subject = scope:actor
					object = scope:recipient
					scope:hook = yes
					OR = {
						# Strong hooks generally.
						scope:actor = { has_strong_hook = scope:recipient }
						# Weak hooks in inter-AI interactions count as strong hooks.
						AND = {
							scope:actor = { is_ai = yes }
							scope:recipient = { is_ai = yes }
						}
					}
				}
				custom_description = {
					text = "foreign_prison_revocation"
					subject = scope:actor
					object = scope:recipient
					scope:recipient = {
						is_imprisoned = yes
						NOT = { is_imprisoned_by = scope:actor }
					}
				}
			}
		}
	}

	ai_intermediary_accept = {
		# The AI should be inclined to trust their regent, at least a little.
		base = 0
		modifier = { add = liege_trust_diarch_trilateral_interaction_default_value }

		# Standard modifiers.
		intermediary_liege_will_accept_standard_modifiers = {
			CURRENCY = prestige
			COST = liege_diarchy_veto_prestige_cost_high
		}
		# Misc important reasons.
		## Revoking own capital.
		modifier = {
			add = 50
			desc = AI_TITLE_IS_REALM_CAPITAL
			exists = scope:actor.primary_title.title_capital_county
			OR = {
				scope:landed_title = scope:actor.primary_title.title_capital_county
				scope:landed_title = scope:actor.primary_title.title_capital_county.de_jure_liege
			}
		}
	}
	ai_accept = {
		# Try to make it 0 for most interactions
		base = 0

		# Weak Hook
		modifier = {
			add = 40
			desc = SCHEME_WEAK_HOOK_USED
			scope:hook = yes
		}
		# Opinion Factor
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 0.8
			desc = AI_OPINION_REASON
		}
		# Refusal is Treason
		## It's always treason, but worth pointing it out.
		modifier = {
			add = 20
			desc = AI_REFUSAL_IS_TREASON
		}
		# Revoking own capital.
		modifier = {
			add = 50
			desc = AI_TITLE_IS_REALM_CAPITAL
			exists = scope:actor.primary_title.title_capital_county
			OR = {
				scope:landed_title = scope:actor.primary_title.title_capital_county
				scope:landed_title = scope:actor.primary_title.title_capital_county.de_jure_liege
			}
		}
		# We don't buff claimants because you *have* to be a claimant for a diarch revoke.
		## Compensated for by refusal _always_ being treason.
		# I am a King!
		modifier = {
			add = -20
			desc = offer_vassalization_interaction_aibehavior_amkingtier_tt
			scope:recipient = { highest_held_title_tier = tier_kingdom }
		}
		# Title is part of vassal's primary title de-jure.
		modifier = {
			add = -25
			desc = AI_REFUSAL_IS_DE_JURE_UNDER
			OR = {
				scope:recipient.primary_title = { is_de_jure_liege_or_above_target = scope:landed_title }
				scope:recipient.primary_title = scope:landed_title
			}
		}
		# Dread
		## Intimidation
		modifier = {
			add = intimidated_halved_reason_value
			desc = INTIMIDATED_REASON
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 1
				}
			}
		}
		## Cowing
		modifier = {
			add = cowed_halved_reason_value
			desc = COWED_REASON
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 2
				}
			}
		}
		# Comparative military strength.
		modifier = {
			add = {
				value = 1
					subtract = {
						value = scope:recipient.max_military_strength
						divide = { value = scope:actor.max_military_strength min = 1 }
					}
				multiply = 50
				max = 20
			}
			desc = offer_vassalization_interaction_aibehavior_power_tt
			scope:actor = { is_landed_or_landless_administrative = yes }
		}
		# Legalistic tradition
		modifier = {
			add = legalistic_vassal_punishment_acceptance
			desc = tradition_legalistic_name
			scope:actor = {
				has_revoke_title_reason = scope:recipient
				culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
			}
		}
		# Factor for personality.
		ai_value_modifier = {
			who = scope:recipient
			# Greed is always a factor.
			ai_greed = {
				if = {
					limit = {
						scope:recipient = {
							NOT = { ai_greed = 0 }
						}
					}
					value = -0.75
				}
			}
			# If AI is honourable and the law compels them to obey the liege, AI will be more likely to obey.
			ai_honor = {
				if = {
					limit = {
						scope:recipient = { ai_honor > 0 }
					}
					value = 0.5
				}
			}
		}
		# Bump up landless diarchs if we could survive the transition.
		modifier = {
			add = 100
			scope:actor = { is_ruler = no }
			scope:recipient = {
				any_held_county = { count >= 2 }
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency = 6

	ai_potential = {
		is_diarch = yes
		liege = { has_realm_law_flag = title_revocation_allowed }
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_core_loop_base_value

		# Additions.
		## Opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = 0.25
		}
		## Personality.
		ai_value_modifier = {
			ai_boldness = 0.75
			ai_honor = -0.5
		}
		## Traits.
		### +++ Ambitious.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = ambitious
		}
		### +++ Greedy.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = greedy
		}
		### +++ Vengeful (under certain criteria).
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = vengeful
			has_opinion_modifier = {
				modifier = revoked_title
				target = scope:recipient
			}
		}
		### ++ Arbitrary.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = arbitrary
		}
		### - Generous.
		modifier = {
			add = diarch_ai_desire_minus_1_value
			has_trait = generous
		}
		### -- Just.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = just
		}
		### --- Content.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			has_trait = content
		}
		## Landless characters want land, but also want to focus on taking from those who might give it up.
		### So we prioritise hooked AI counts.
		modifier = {
			add = 100
			is_landed = no
			has_hook = scope:recipient
			scope:recipient = {
				highest_held_title_tier = tier_county
				is_ai = yes
			}
		}
		### Then just hooked AI.
		modifier = {
			add = 50
			is_landed = no
			has_hook = scope:recipient
			scope:recipient = { is_ai = yes }
		}
		## Always revoke preferred capital and capital duchy.
		modifier = {
			add = 1000
			exists = scope:actor.primary_title.title_capital_county
			OR = {
				scope:landed_title = scope:actor.primary_title.title_capital_county
				scope:landed_title = scope:actor.primary_title.title_capital_county.de_jure_liege
			}
		}
		## Slight preference for higher-tier titles.
		modifier = {
			add = {
				value = scope:landed_title.tier
				multiply = 10
			}
		}
		## We avoid wars here too, but only in the resulting event.
		# Factors.
		## Relationships.
		### + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### - Try not to pick on allies of our liege.
		modifier = {
			factor = 0.25
			should_avoid_hostile_action_against_due_to_liege_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on players unless they're of at least a decent size.
		modifier = {
			factor = 0
			scope:recipient = {
				is_ai = no
				any_held_county = { count <= 3 }
			}
		}
		### x0 Don't go into prestige debt!
		modifier = {
			factor = 0
			prestige <= 0
		}
	}
}

# Diarch (actor) takes a vassal from a vassal (recipient) of their liege with an optional veto for the liege (third_party).
diarch_retract_vassal_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	interface_priority = 10
	highlighted_reason = HIGHLIGHTED_CAN_DIARCH_RETRACT
	notification_text = RETRACT_VASSAL_PROPOSAL
	intermediary_notification_text = diarch_interaction_requesting_sign_off.tt
	intermediary_breakdown_yes = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_YES
	intermediary_breakdown_no = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_NO
	intermediary_breakdown_maybe = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_MAYBE
	intermediary_answer_accept_key = REPLY_ANSWER_ALLOW
	intermediary_answer_reject_key = REPLY_ANSWER_VETO
	pre_answer_yes_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_YES
	pre_answer_no_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_NO
	pre_answer_maybe_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_MAYBE
	icon = icon_liege
	redirect = {
		scope:actor.liege ?= { save_scope_as = intermediary }
	}

	desc = diarch_retract_vassal_interaction_desc
	send_name = diarch_retract_vassal_interaction.send_name

	special_interaction = retract_vassal_interaction
	interface = transfer_vassal
	ai_maybe = yes
	ai_intermediary_maybe = yes
	can_send_despite_rejection = yes
	popup_on_receive = yes
	pause_on_receive = yes
	
	interface_priority = 55
	ai_min_reply_days = 4
	ai_max_reply_days = 9
	
	on_decline_summary = diarch_rebel_or_crime_summary.retract

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
			# Plus you need to be landed for this.
			is_landed_or_landless_administrative = yes
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			NOT = { this = scope:actor.liege }
			# ... who are appropriately landed.
			is_landed_or_landless_administrative = yes
			scope:recipient.highest_held_title_tier >= tier_duchy
		}
	}
	
	is_valid = {
		# Here to correct for some dodgy inheritance situations.
		NOT = { scope:actor = scope:intermediary }
	}
	is_valid_showing_failures_only = {
		# Standard validity checks.
		vassal_retraction_standard_valid_showing_failures_only_trigger = yes
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Scope:recipient must hold at least one of scope:actor's de jure vassals.
		scope:actor = {
			custom_description = {
				text = "you_must_have_a_de_jure_vassal_to_retract"
				object = scope:recipient
				any_held_title = {
					tier >= tier_duchy
					any_direct_de_jure_vassal_title = {
						exists = holder
						holder.liege = scope:recipient
					}
				}
			}
		}
		# Plus make sure there's a legal right to retract.
		scope:actor.liege = {
			trigger_if = {
				limit = { government_has_flag = government_is_tribal }
				custom_description = {
					text = "liege_has_law_allowing_vassal_retraction_tribal"
					has_realm_law_flag = vassal_retraction_allowed
				}
			}
			trigger_if = {
				limit = {
					NOT = { government_has_flag = government_is_tribal }
				}
				custom_description = {
					text = "liege_has_law_allowing_vassal_retraction_crown"
					has_realm_law_flag = vassal_retraction_allowed
				}
			}
		}
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_an_entrenched_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege = { has_diarchy_active_parameter = unlock_diarch_retract_vassal_interaction }
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}
	
	cooldown = { years = 1 }
	cooldown_against_recipient = { years = 3 }

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}

	is_highlighted = {
		# Diarch retractions require a de jure claim - this is uncommon, so we always highlight it.
		diarch_retraction_is_de_jure_liege_trigger = yes
	}

	populate_recipient_list = {
		scope:actor = {
			every_held_title = {
				limit = { tier >= tier_duchy }
				every_direct_de_jure_vassal_title = {
					limit = { exists = holder }
					holder = {
						if = {
							limit = { liege = scope:recipient }
							add_to_list = characters
						}
					}
				}
			}
		}
	}

	# Hooks can be used to force this through.
	## We don't force-force this on/for the player (so no pain but less benefits), but AI regard weak hooks as compulsory from/for other AI.
	send_option = {
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		flag = hook
		localization = SCHEME_HOOK
	}
	should_use_extra_icon = {
		scope:actor = { has_usable_hook = scope:recipient }
	}
	extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"

	send_options_exclusive = no
	
	on_send = {
		scope:actor = {
			add_character_flag = {
				flag = flag_hostile_actions_disabled_delay
				days = 10
			}
		}
	}

	on_auto_accept = {
		scope:recipient = { trigger_event = char_interaction.0271 }
	}
	
	on_accept = {
		# Follow the standard flow for retraction.
		save_scope_value_as = {
			name = use_strife_not_tyranny
			value = yes
		}
		retract_vassal_interaction_effect = yes
		scope:actor = {
			# Tell them that the retraction went through fine.
			trigger_event = char_interaction.0272
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}

		# Debug logging.
		debug_log = debug_log.diarch_retract_vassal.accepted
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_retract_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_accept_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_accept_intermediary_list }
		}
	}

	on_intermediary_decline = {
		# Scope:intermediary eats a prestige cost for their veto.
		scope:intermediary = { add_prestige = liege_diarchy_veto_prestige_cost_high }
		scope:actor = {
			# Inform scope:actor that their liege has vetoed them.
			## First, we log which interaction this is for the event's effects.
			save_scope_value_as = {
				name = diarch_interaction
				value = flag:vassal_retract
			}
			## Then, fire the event.
			trigger_event = char_interaction.0291
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# Inform scope:recipient that scope:intermediary has their back.
		scope:recipient = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = diarch_action_vetoed.tt
				left_icon = scope:actor
				right_icon = scope:intermediary
				custom_tooltip = diarch_retract_vassal_interaction.tt.inform_recipient
			}
		}
		# Flick out some opinions.
		diarch_retract_vassal_interaction_intermediary_fail_opinions_effect = yes

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_retract_veto }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_veto_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_veto_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_veto_intermediary_list }
		}
	}
	
	on_decline = {
		scope:actor = {
			# Tell them that the retraction ran into issues.
			trigger_event = char_interaction.0273
			# And give a crime reason for both them and their liege.
			show_as_tooltip = {
				random_list = {
					50 = {
						show_chance = no
						desc = char_interaction.0273.result.criminal
						diarch_declare_recipient_criminal_effect = yes
					}
					50 = {
						show_chance = no
						desc = char_interaction.0273.result.war
						diarch_declare_vassalisation_war_effect = yes
					}
				}
			}
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# Flick out some opinions.
		## Scope:recipient is annoyed with scope:actor.
		scope:recipient = {
			add_opinion = {
				target = scope:actor
				modifier = retracted_vassal
			}
		}

		# Debug logging.
		debug_log = debug_log.diarch_retract_vassal.rejected
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_retract_decline }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_decline_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_decline_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_retract_decline_intermediary_list }
		}
	}
	
	auto_accept = {
		OR = {
			scope:recipient = {
				is_imprisoned_by = scope:actor
			}
			custom_description = {
				text = "spending_hook"
				subject = scope:actor
				object = scope:recipient
				scope:hook = yes
				scope:actor = { has_strong_hook = scope:recipient }
			}
		}
	}

	ai_intermediary_accept = {
		# The AI should be inclined to trust their regent, at least a little.
		base = 0
		modifier = { add = liege_trust_diarch_trilateral_interaction_default_value }

		# Standard modifiers.
		intermediary_liege_will_accept_standard_modifiers = {
			CURRENCY = prestige
			COST = liege_diarchy_veto_prestige_cost_high
		}
		# Misc important reasons.
		## Retracting vassal with own capital.
		modifier = {
			add = 50
			desc = AI_VASSAL_HOLDS_REALM_CAPITAL
			exists = scope:actor.primary_title.title_capital_county
			scope:secondary_recipient = {
				OR = {
					any_sub_realm_county = {
						this = scope:actor.primary_title.title_capital_county
					}
					any_sub_realm_duchy = {
						this = scope:actor.primary_title.title_capital_county.de_jure_liege
					}
				}
			}
		}
	}
	ai_accept = {
		base = 0 # Try to make it 0 for most interactions
	
		# Hook used
		modifier = {
			add = 40
			desc = SCHEME_WEAK_HOOK_USED
			scope:hook = yes
		}
		# Opinion Factor
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 1.0
			desc = AI_OPINION_REASON
		}
		#
		modifier = {
			add = 25
			desc = AI_REFUSAL_IS_TREASON
			scope:actor = { has_realm_law_flag = vassal_refusal_is_treason }
		}
	
		ai_value_modifier = {
			who = scope:recipient
			ai_greed = {
				if = {
					limit = {
						scope:recipient = { NOT = { ai_greed = 0 } }
					}
					value = -0.25
				}
			}
			ai_honor = {
				if = {
					limit = {
						scope:recipient = { #If AI is honorable and the law compels to obey the liege, AI will be more likely to obey.
							ai_honor > 0
						}
						scope:actor = {
							has_realm_law_flag = vassal_refusal_is_treason
						}
					}
					value = 0.75
				}
			}
		}
		modifier = {
			add = 50
			desc = AI_VASSAL_HOLDS_REALM_CAPITAL
			exists = scope:actor.primary_title.title_capital_county
			scope:secondary_recipient = {
				OR = {
					any_sub_realm_county = {
						this = scope:actor.primary_title.title_capital_county
					}
					any_sub_realm_duchy = {
						this = scope:actor.primary_title.title_capital_county.de_jure_liege
					}
				}
			}
		}
	
		modifier = { #Sub-Vassal is NOT De jure of current Vassal.
			add = 25
			desc = AI_REFUSAL_IS_NOT_DE_JURE_LIEGE
			NOT = {
				scope:recipient = {
					any_held_title = {
						is_de_jure_liege_or_above_target = scope:secondary_recipient.primary_title
					}
				}
			}
		}
		modifier = { #Sub-Vassal is De jure of liege title.
			add = 15
			desc = AI_REFUSAL_IS_DE_JURE_LIEGE
			scope:actor = {
				any_held_title = {
					this = scope:secondary_recipient.primary_title.de_jure_liege
				}
			}
		}
		modifier = {
			add = intimidated_halved_reason_value
			desc = INTIMIDATED_REASON
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 1
				}
			}
		}
		modifier = {
			add = cowed_halved_reason_value
			desc = COWED_REASON
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 2
				}
			}
		}
		modifier = { #Comparative military strength.
			add = {
				value = 1
					subtract = {
					value = scope:recipient.max_military_strength
					divide = { value = scope:actor.max_military_strength min = 1 }
					}
				multiply = 100
			}
			desc = offer_vassalization_interaction_aibehavior_power_tt
		}
		modifier = { #Different faith, no pluralism.
			add = {
				value = -25
				if = {
					limit = {
						scope:actor.faith = {
							faith_hostility_level = {
								target = scope:recipient.faith
								value >= faith_hostile_level
							}
						}
					}
					add = -10
				}
				if = {
					limit = {
						scope:actor.faith = {
							faith_hostility_level = {
								target = scope:recipient.faith
								value >= faith_evil_level
							}
						}
					}
					add = -25
				}
			}
			desc = AI_REFUSAL_SPLITTING_SAME_FAITH_VASSALS
			scope:actor.faith = scope:secondary_recipient.faith #Will not care as much if the vassal being retracted is of a different faith.
			scope:actor = {
				NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic.
					faith = scope:recipient.faith
					faith = { has_doctrine = doctrine_pluralism_pluralistic }
				}
			}
		}
	}
	
	can_send_despite_rejection = yes
	
	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency = 24
	
	ai_potential = {
		is_diarch = yes
		has_realm_law_flag = title_revocation_allowed
		primary_title.tier > tier_county
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}
	
	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_secondary_powers_base_value

		# Additions.
		## Opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = 0.25
		}
		## Personality.
		ai_value_modifier = {
			ai_boldness = 0.75
			ai_honor = -0.5
		}
		## Traits.
		### +++ Ambitious.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = ambitious
		}
		### +++ Greedy.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = greedy
		}
		### +++ Vengeful (under certain criteria).
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = vengeful
			has_opinion_modifier = {
				modifier = revoked_title
				target = scope:recipient
			}
		}
		### ++ Arbitrary.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = arbitrary
		}
		### - Generous.
		modifier = {
			add = diarch_ai_desire_minus_1_value
			has_trait = generous
		}
		### -- Just.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = just
		}
		### --- Content.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			has_trait = content
		}
		## Always revoke preferred capital and capital duchy
		modifier = {
			add = 1000
			exists = scope:actor.primary_title.title_capital_county
			OR = {
				scope:actor = {
					any_held_title = { this = scope:actor.primary_title.title_capital_county.de_jure_liege }
				}
				scope:actor.primary_title.title_capital_county.de_jure_liege = { is_title_created = no }
			}
			scope:secondary_recipient = {
				any_sub_realm_county = { this = scope:actor.primary_title.title_capital_county }
			}
		}
		# Always retract preferred capital duchy
		modifier = {
			add = 1000
			exists = scope:actor.primary_title.title_capital_county
			scope:secondary_recipient = {
				any_sub_realm_duchy = { this = scope:actor.primary_title.title_capital_county.de_jure_liege }
			}
		}
		## Slight preference for higher-tier titles
		modifier = {
			add = {
				value = scope:secondary_recipient.highest_held_title_tier
				multiply = 10
			}
		}
		## We avoid wars here too, but only in the resulting event.
		# Factors.
		## Relationships.
		### + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### - Try not to pick on allies of our liege.
		modifier = {
			factor = 0.25
			should_avoid_hostile_action_against_due_to_liege_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on players unless they're of at least a decent size.
		modifier = {
			factor = 0
			scope:recipient = {
				is_ai = no
				any_held_county = { count <= 3 }
			}
		}
		### x0 Exempt the party baron.
		modifier = {
			factor = 0
			scope:recipient = { has_character_flag = is_party_baron }
		}
	}
}

# Diarch (actor) imprisons a character (recipient) who's a sub-realm character of their liege, with an optional veto for the liege (third_party).
diarch_imprison_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	interface_priority = 16
	notification_text = DIARCH_IMPRISON_PROPOSAL
	intermediary_notification_text = diarch_interaction_requesting_sign_off.tt
	intermediary_breakdown_yes = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_YES
	intermediary_breakdown_no = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_NO
	intermediary_breakdown_maybe = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_MAYBE
	intermediary_answer_accept_key = REPLY_ANSWER_ALLOW
	intermediary_answer_reject_key = REPLY_ANSWER_VETO
	pre_answer_yes_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_YES
	pre_answer_no_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_NO
	pre_answer_maybe_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_MAYBE
	icon = prison
	redirect = {
		scope:actor.liege ?= { save_scope_as = intermediary }
	}

	desc = diarch_imprison_interaction_desc
	send_name = diarch_imprison_interaction.send_name

	ai_maybe = yes
	ai_intermediary_maybe = yes
	can_send_despite_rejection = yes
	popup_on_receive = yes
	pause_on_receive = yes

	interface_priority = 60
	ai_min_reply_days = 4
	ai_max_reply_days = 9

	on_decline_summary = diarch_rebel_or_crime_summary.crominal

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
			# The prisoner goes to your dungeon, so we want you to actually have one.
			is_landed_or_landless_administrative = yes
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = { is_imprisoned = no }
		# Scope:recipient can't be visiting elsewhere.
		trigger_if = {
			limit = {
				scope:recipient = { is_courtier = yes }
			}
			NOT = {
				scope:recipient.host = {
					any_foreign_court_guest = { this = scope:recipient }
				}
			}
		}
		# Finally, make sure this isn't someone scope:actor could use the conventional interaction on.
		scope:actor = {
			liege = {
				basic_allowed_to_imprison_character_trigger = { CHARACTER = scope:recipient }
			}
			NOT = {
				basic_allowed_to_imprison_character_trigger = { CHARACTER = scope:recipient }
			}
		}
	}

	is_valid = {
		# Here to correct for some dodgy inheritance situations.
		NOT = { scope:actor = scope:intermediary }
	}
	is_valid_showing_failures_only = {
		scope:actor = {
			advanced_allowed_to_imprison_character_trigger = { CHARACTER = scope:recipient }
		}
		imprison_neutral_is_valid_showing_failures_only_triggers_trigger = yes
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_a_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege = { has_diarchy_active_parameter = unlock_diarch_imprison_interaction }
			scope:actor.liege = {
				trigger_if = {
					limit = { has_realm_law_flag = imprisonment_toggle_enable } #Present on all tribal authority to disable imprisonment
					has_realm_law_flag = imprisonment_toggle_on #Present from tribal authority level 1 to re-enable imprisonment
				}
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	cooldown = { years = 1 }
	cooldown_against_recipient = { years = 3 }

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}
	
	is_highlighted = {
		scope:recipient = { is_imprisoned = no }
		scope:actor = { has_imprisonment_reason = scope:recipient }
	}

	#Use hook
	send_option = {
		is_valid = {
			exists = scope:recipient
			scope:actor = {
				has_usable_hook = scope:recipient
			}
		}
		flag = hook
		localization = SCHEME_HOOK
	}
	should_use_extra_icon = {
		scope:actor = { has_usable_hook = scope:recipient }
	}
	extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"

	send_options_exclusive = no

	on_send = {
		scope:actor = {
			add_character_flag = {
				flag = flag_hostile_actions_disabled_delay
				days = 10
			}
		}
	}

	on_auto_accept = {
		scope:actor = { trigger_event = char_interaction.0281 }
		diarch_imprison_general_accept_effect = yes
	}

	on_accept = {
		if = {
			limit = { scope:hook = yes }
			scope:actor = { use_hook = scope:recipient }
		}
		# Tell them that the imprisonment went through fine.
		scope:actor = { trigger_event = char_interaction.0282 }
		save_scope_value_as = {
			name = use_strife_not_tyranny
			value = yes
		}
		diarch_imprison_general_accept_effect = yes

		# Debug logging.
		debug_log = debug_log.diarch_imprison.accepted
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_imprison_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_accept_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_accept_intermediary_list }
		}
	}

	on_intermediary_decline = {
		# Scope:intermediary eats a prestige cost for their veto.
		scope:intermediary = { add_prestige = liege_diarchy_veto_prestige_cost_medium }
		scope:actor = {
			# Inform scope:actor that their liege has vetoed them.
			## First, we log which interaction this is for the event's effects.
			save_scope_value_as = {
				name = diarch_interaction
				value = flag:imprison
			}
			## Then, fire the event.
			trigger_event = char_interaction.0291
			# Scope:actor can be hostile again.
			clear_hostile_actions_lock_flag_effect = yes
		}
		# Inform scope:recipient that scope:intermediary has their back.
		scope:recipient = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = diarch_action_vetoed.tt
				left_icon = scope:actor
				right_icon = scope:intermediary
				custom_tooltip = diarch_imprison_interaction.tt.inform_recipient
			}
		}
		# Flick out some opinions.
		diarch_imprison_interaction_intermediary_fail_opinions_effect = yes

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_imprison_veto }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_veto_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_veto_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_veto_intermediary_list }
		}
	}

	on_decline = {
		scope:actor = { 
			imprison_HoF_consequences_effect = yes 
			imprison_tyranny_effect = yes
		}
		# Do we want a war or an escape?
		scope:recipient = {
			# If target is count or higher, we want the option to start a war.
			if = {
				limit = {
					is_landed_or_landless_administrative = yes
					highest_held_title_tier >= tier_county
				}
				# Send the choosing event.
				scope:actor = { trigger_event = char_interaction.0283 }
				# Display the choices in advance.
				show_as_tooltip = {
					random_list = {
						50 = {
							show_chance = no
							desc = char_interaction.0263.result.criminal
							diarch_declare_recipient_criminal_effect = yes
						}
						50 = {
							show_chance = no
							desc = char_interaction.0263.result.war
							scope:recipient = {
								start_war = {
									casus_belli = remove_regent_cb
									target = scope:actor
								}
							}
						}
					}
				}
			}
			#If target is a baron or unlanded, have them escape.
			else = {
				if = { #To block them from being instantly rehired
					limit = {
						is_councillor_of = scope:actor
						can_be_fired_from_council_trigger = { COURT_OWNER = scope:actor }
					}
					set_variable = {
						name = escaped_imprisonment_from
						value = scope:actor
						years = 20
					}
				}
				if = {
					limit = { is_landed_or_landless_administrative = yes }
					depose_effect = { DEPOSER = root }
				}
				if = {
					limit = {
						is_playable_character = no
						trigger_if = {
							limit = { is_councillor = yes }
							can_be_fired_from_council_trigger = { COURT_OWNER = scope:recipient.liege }
						}
						trigger_if = {
							limit = { exists = scope:actor.faith.religious_head }
							NOT = { scope:actor.faith.religious_head = scope:recipient }
						}
					}
					custom_tooltip = deposed_and_become_wanderer
					select_and_move_to_pool_effect = yes
				}
				add_opinion = {
					target = scope:actor
					modifier = attempted_imprisonment_opinion
				}
			}
		}

		#Remove them as guardian/ward for any courtier (feedback given in char_interaction.0230)
		scope:actor = {
			if = {
				limit = {
					any_courtier = { has_relation_guardian = scope:recipient }
				}
				every_courtier = {
					limit = { has_relation_guardian = scope:recipient }
					save_scope_as = ward
					remove_guardian_effect = {
						GUARDIAN = scope:recipient
						WARD = scope:ward
						RETURN_WARD = yes
						HIDE_OPINION = no
					}
					add_to_list = ward_children
				}
			}
			if = {
				limit = {
					any_courtier = { has_relation_ward = scope:recipient }
				}
				random_courtier = {
					limit = { has_relation_ward = scope:recipient }
					save_scope_as = guardian
					show_as_tooltip = {
						remove_guardian_effect = {
							GUARDIAN = scope:guardian
							WARD = scope:recipient
							RETURN_WARD = yes
							HIDE_OPINION = no
						}
					}
					add_to_list = guardian_list
				}
				hidden_effect = {
					scope:guardian = {
						send_interface_message = {
							type = event_childhood_neutral
							title = remove_guardian_interaction_notification
							left_icon = scope:recipient
							right_icon = scope:guardian
							remove_guardian_effect = {
								GUARDIAN = scope:guardian
								WARD = scope:recipient
								RETURN_WARD = yes
								HIDE_OPINION = no
							}
						}
					}
				}
			}
		}
		# Misc clean-up stuff.
		scope:actor = {
			if = {
				limit = {
					scope:recipient = {
						OR = {
							is_playable_character = no
							AND = {
								is_landed_or_landless_administrative = yes
								primary_title.tier = tier_barony
							}
						}
					}
				}
				trigger_event = char_interaction.0230
			}
		}
		if = {
			limit = {
				scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
			scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
		}

		# Debug logging.
		debug_log = debug_log.diarch_imprison.rejected
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_imprison_decline }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_decline_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_decline_recipient_list }
		}
		scope:intermediary = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_imprison_decline_intermediary_list }
		}
	}

	auto_accept = no
	
	ai_intermediary_accept = {
		# The AI should be inclined to trust their regent, at least a little.
		base = 0
		modifier = { add = liege_trust_diarch_trilateral_interaction_default_value }

		# Standard modifiers.
		intermediary_liege_will_accept_standard_modifiers = {
			CURRENCY = prestige
			COST = liege_diarchy_veto_prestige_cost_medium
		}
	}
	ai_accept = {
		base = 0 # Try to make it 0 for most interactions

		modifier = {
			add = {
				value = scope:actor.intrigue
				multiply = 1
			}
			desc = IMPRISON_INTRIGUE_ACTOR
		}
		modifier = {
			add = {
				value = scope:recipient.intrigue
				multiply = -2
			}
			desc = IMPRISON_INTRIGUE_RECIPIENT
		}

		modifier = {
			add = 30
			desc = SCHEME_HOOK_USED
			scope:hook = yes
		}
		opinion_modifier = { # Opinion Factor
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 0.5
			desc = AI_OPINION_REASON
		}
		ai_value_modifier = {
			who = scope:recipient
			ai_boldness = {
				if = {
					limit = {
						scope:recipient = { NOT = { ai_boldness = 0 } }
					}
					value = -0.5
				}
			}
		}
		modifier = {
			add = 20
			desc = AI_REFUSAL_IS_TREASON
			scope:actor = {
				any_vassal_or_below = { this = scope:recipient }
				has_realm_law_flag = vassal_refusal_is_treason
			}
		}
		modifier = {
			add = 50
			desc = AI_PRISON_FEUDAL_COMPLEX_PERK
			scope:actor = {
				has_perk = prison_feudal_complex_perk
			}
		}
		modifier = { #I am a King!
			add = -40
			desc = offer_vassalization_interaction_aibehavior_amkingtier_tt
			scope:recipient = { highest_held_title_tier = tier_kingdom }
		}
		modifier = { #Courtiers.
			add = 50
			desc = AI_REFUSAL_COURTIER
			scope:recipient = { is_ruler = no }
		}
		modifier = { # Your young children can't really stop you
			add = 200
			desc = AI_REFUSAL_YOUNG_CHILD
			scope:recipient = {
				is_child_of = scope:actor
				is_courtier_of = scope:actor
				is_adult = no
			}
		}
		modifier = { #They're a claimant against you
			add = -70
			desc = AI_CLAIMANT_PENALTY
			scope:actor = {
				OR = {
					any_targeting_faction = {
						faction_is_type = claimant_faction
						faction_is_at_war = yes
						exists = special_character
						special_character = scope:recipient
					}
					AND = {
						exists = var:claimant_faction_sent_demand
						var:claimant_faction_sent_demand = scope:recipient
					}
				}
			}
		}
		modifier = { #Rank difference.
			add = {
				value = -15
				if = {
					limit = {
						scope:actor = {
							tier_difference = {
								target = scope:recipient
								value >= 2
							}
						}
					}
					add = 5
				}
				if = {
					limit = {
						scope:actor = {
							tier_difference = {
								target = scope:recipient
								value >= 3
							}
						}
					}
					add = 5
				}
				if = { #King asking Baron, modifier becomes positive.
					limit = {
						scope:actor = {
							tier_difference = {
								target = scope:recipient
								value >= 4
							}
						}
					}
					add = 10
				}
			}
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:recipient = {
				is_ruler = yes
				highest_held_title_tier < tier_kingdom
			}
		}
		modifier = {
			add = intimidated_external_reason_value
			desc = INTIMIDATED_REASON
			scope:recipient = {
				NOT = { target_is_liege_or_above = scope:actor }
				has_dread_level_towards = {
					target = scope:actor
					level = 1
				}
			}
		}
		modifier = {
			add = cowed_external_reason_value
			desc = COWED_REASON
			scope:recipient = {
				NOT = { target_is_liege_or_above = scope:actor }
				has_dread_level_towards = {
					target = scope:actor
					level = 2
				}
			}
		}
		modifier = { #Comparative military strength.
			add = {
				value = 1
					subtract = {
					value = scope:recipient.max_military_strength
					divide = { value = scope:actor.max_military_strength min = 1 }
					}
				multiply = 100
				min = -1000
				# This max needs to match the loc in offer_vassalization_interaction_aibehavior_power_tt
				max = 20
			}
			desc = offer_vassalization_interaction_aibehavior_power_tt
			scope:actor = { is_ruler = yes }
			scope:recipient = { is_ruler = yes }
		}
		modifier = { #Rivalry modifier.
			add = -50
			desc = offer_vassalization_interaction_aibehavior_rival_tt
			scope:recipient = {
				has_relation_rival = scope:actor
				NOT = { has_relation_nemesis = scope:actor }
			}
		}
		modifier = { #Nemesis modifier.
			add = -100
			desc = offer_vassalization_interaction_aibehavior_nemesis_tt
			scope:recipient = {
				has_relation_nemesis = scope:actor
			}
		}
		modifier = {
			add = 10
			desc = GRANDEUR_REASON
			scope:recipient = { has_royal_court = no }
			scope:actor = {
				has_royal_court = yes
				has_dlc_feature = royal_court
				court_grandeur_current_level >= 7
				court_grandeur_current_level < 9
			}
		}
		modifier = {
			add = 20
			desc = GRANDEUR_REASON
			scope:recipient = { has_royal_court = no }
			scope:actor = {
				has_royal_court = yes
				has_dlc_feature = royal_court
				court_grandeur_current_level >= 9
			}
		}
		modifier = { # Legalistic tradition
			add = legalistic_vassal_punishment_acceptance
			desc = tradition_legalistic_name
			scope:actor = {
				has_imprisonment_reason = scope:recipient
				culture = { has_cultural_parameter = vassals_more_likely_accept_punishments }
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_targets = { ai_recipients = scripted_relations }
	ai_frequency = 12

	ai_will_do = {
		# You should have a _reason_ to try to imprison someone.
		base = 0

		# Additions.
		## Opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = 0.5
		}
		## Personality.
		ai_value_modifier = {
			ai_vengefulness = 1
			ai_boldness = 0.5
		}
		## Flag Management.
		### Make sure the AI uses hooks for this as it's % based
		modifier = {
			add = 1
			scope:hook = yes
		}
		## Traits.
		### +++ Sadistic.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = greedy
		}
		### +++ Vengeful.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = vengeful
		}
		### ++ Just (under certain circumstances).
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = just
			has_imprisonment_reason = scope:recipient
		}
		### -- Compassionate.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = compassionate
		}
		### --- Forgiving.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			has_trait = forgiving
		}
		## We avoid wars here too, but only in the resulting event.
		## Agenda impact
		modifier = {
			add = {
				value = 0
				if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_important }
							has_character_flag = agenda_towards_escalation
						}
					}
					add = 200
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_important }
						}
					}
					add = -100
				}
			}
			any_character_struggle = { involvement = involved }
		}
		modifier = {
			add = {
				value = 0
				if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_detractor }
							has_trait = fp3_struggle_supporter
						}
					}
					add = 200
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_detractor }
						}
					}
					add = -100
				}
			}
			any_character_struggle = { involvement = involved }
		}
		modifier = {
			add = {
				value = 0
				if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_supporter }
							has_trait = fp3_struggle_detractor
						}
					}
					add = 200
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = { phase_has_catalyst = catalyst_imprison_supporter }
						}
					}
					add = -100
				}
			}
			any_character_struggle = { involvement = involved }
		}
		# Factors.
		## Relationships.
		### + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### - Try not to pick on allies of our liege.
		modifier = {
			factor = 0.25
			should_avoid_hostile_action_against_due_to_liege_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		### x0 Don't pick on people without due reason unless we really hate them.
		#### Doesn't quite double up with the above factor increase for folks we hate - we want to prioritise them, but we also want to enable them for arbitrary punishment.
		modifier = {
			factor = 0
			NOR = {
				has_imprisonment_reason = scope:recipient
				has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient }
				# Sadists wants to torture folks.
				has_trait = sadistic
				# Agents get a time-out.
				any_targeting_scheme = {
					hostile_scheme_trigger = yes
					is_scheme_agent_exposed = scope:recipient
				}
				# Prior crimes annoy people.
				has_any_major_revenge_opinion_against_character_trigger = { CHARACTER = scope:recipient }
				# Vengeful characters can be a pain over even minor matters.
				AND = {
					OR = {
						has_trait = vengeful
						ai_vengefulness >= very_high_positive_ai_value
					}
					has_any_petty_revenge_opinion_against_character_trigger = { CHARACTER = scope:recipient }
				}
			}
		}
	}	
}

# Diarch (actor) offers to boost the CA/TA/IB of liege (recipient), taking on the costs and negatives themselves so that they can use their diarch powers.
diarch_subsidise_crown_authority_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	notification_text = DIARCH_SUBSIDISE_AUTHORITY_PROPOSAL
	icon = icon_contract_modification_single

	desc = diarch_subsidise_crown_authority_interaction_desc

	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			liege_has_co_emperorship_trigger = no
		}
		# Same sub-realm only.
		OR = {
			scope:actor.liege = scope:recipient
			scope:recipient = {
				any_liege_or_above = { this = scope:actor.liege }
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = diarch_can_subsidise_liege_authority }
		# Can't subisidise past the point needed.
		custom_tooltip = {
			text = diarch_subsidise_crown_authority_interaction.tt.cannot_subsidise_past_necessary
			scope:recipient = {
				NOT = { has_realm_law_flag = diarchs_want_to_subsidise_without_this_flag }
			}
		}
		# And the liege can't have the max level of authority.
		custom_tooltip = {
			text = diarch_subsidise_crown_authority_interaction.tt.liege_cannot_have_max_authority
			scope:recipient = {
				NOT = { has_realm_law_flag = max_authority_level }
			}
		}
		# Aaaand, if you're not tribal/administrative, we need to check some innovations.
		scope:recipient = {
			# CA0 -> CA1.
			trigger_if = {
				limit = { has_realm_law = crown_authority_0 }
				can_pass_law_ca1_trigger = yes
			}
			# CA1 -> CA2.
			trigger_if = {
				limit = { has_realm_law = crown_authority_1 }
				can_pass_law_ca2_trigger = yes
			}
			# CA2 -> CA3.
			trigger_if = {
				limit = { has_realm_law = crown_authority_2 }
				can_pass_law_ca3_trigger = yes
			}
			
			# If the liege is administrative, they have to be independent.
			trigger_if = {
				limit = { has_government = administrative_government }
				is_independent_ruler = yes
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	# Why the hell not? If your liege dies several times in quick succession, sure, centralise all the power you like. That'll go well.
	cooldown_against_recipient = { years = 10 }

	cost = {
		prestige = {
			value = scope:recipient.increase_crown_authority_prestige_cost
			multiply = subsidised_liege_authority_discount_value
		}
	}
	
	on_accept = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = diarch_subsidise_crown_authority_interaction.tt.accepted
				left_icon = scope:recipient
				scope:recipient = {
					# Try to change authority.
					increase_crown_authority_effect = yes
					increase_tribal_authority_effect = yes
					increase_imperial_bureaucracy_effect = yes
					# No one blames the liege for this.
					add_character_modifier = {
						modifier = liege_authority_boost_has_scapegoat_modifier
						years = 10
					}
				}
				# Aaaaand everyone knows what you did.
				change_strife_opinion = massive_strife_gain
			}
		}
	}

	on_decline = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_bad
				title = diarch_subsidise_crown_authority_interaction.tt.declined
				left_icon = scope:recipient
				add_opinion = {
					target = scope:recipient
					modifier = refusal_opinion
					opinion = -20
				}
			}
		}
	}
	
	ai_accept = {
		base = 0

		# You want to do _what_? For free?
		modifier = {
			add = 100
			desc = diarch_subsidise_crown_authority_interaction.tt.absolutely_yes_please
			always = yes
		}
	}

	auto_accept = {
		custom_description = {
			text = auto_accept_interaction_ai	
			object = scope:recipient
			scope:recipient = {
				is_ai = yes
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 24
	ai_potential = {
		is_diarch = yes
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
		# You also need prestige left over afterwards to use other interactions, so make sure the AI doesn't bankrupt itself on this.
		prestige >= {
			value = liege.increase_crown_authority_prestige_cost
			multiply = subsidised_liege_authority_discount_value
			add = major_prestige_value
		}
	}

	ai_will_do = {
		base = 0

		# Government situation.
		## Does your liege's gubermint allow you to bully people and take their stuff? No? Then you want to take this interaction; anyone who wouldn't has been pre-filtered.
		modifier = {
			add = 1000
			liege = {
				NOR = {
					has_realm_law_flag = title_revocation_allowed
					has_realm_law_flag = vassal_retraction_allowed
				}
			}
		}
	}
}

# Diarch (actor) requests an adjustment of liege's (recipient's) IB, taking on the costs and negatives themselves _or_ reducing their strife, depending on whether they boost centralisation or decrease it.
diarch_adjust_bureaucracy_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	interface_priority = 9
	notification_text = {
		first_valid = {
			# Decentralise.
			triggered_desc = {
				trigger = { scope:decrease_centralisation = yes }
				desc = DIARCH_ADJUST_BUREAUCRACY_PROPOSAL.DECENTRALISE
			}
			# Centralise.
			desc = DIARCH_ADJUST_BUREAUCRACY_PROPOSAL.CENTRALISE
		}
	}
	icon = icon_contract_modification_single

	desc = diarch_adjust_bureaucracy_interaction_desc

	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			liege_has_co_emperorship_trigger = yes
		}
		# Same sub-realm only.
		OR = {
			scope:actor.liege = scope:recipient
			scope:recipient = {
				any_liege_or_above = { this = scope:actor.liege }
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = unlock_adjust_imperial_bureaucracy_interaction }
		# And the liege can't have the max level of authority.
		custom_tooltip = {
			text = diarch_subsidise_crown_authority_interaction.tt.liege_cannot_have_max_authority
			scope:recipient = {
				NOT = { has_realm_law_flag = max_authority_level }
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	# Co-emperors can't keep doing this in quick succession.
	cooldown = { years = 10 }

	cost = {
		prestige = {
			value = scope:recipient.increase_crown_authority_prestige_cost
			if = {
				limit = { scope:increase_centralisation = yes }
				multiply = subsidised_liege_authority_discount_value
			}
			else = { multiply = lowered_liege_authority_discount_value }
		}
	}

	# Increase IB
	send_option = {
		flag = increase_centralisation
		is_valid = {
			scope:recipient = {
				NOT = { has_realm_law = imperial_bureaucracy_3 }
			}
		}
		localization = increase_centralisation_name
		current_description = increase_centralisation
		starts_enabled = { always = yes }
	}
	# Decrease IB
	## The AI doesn't use this.
	send_option = {
		flag = decrease_centralisation
		is_valid = {
			scope:recipient = {
				NOT = { has_realm_law = imperial_bureaucracy_0 }
			}
		}
		localization = decrease_centralisation_name
		current_description = decrease_centralisation
	}
	
	on_send = {
		# Tell the AI to set their only send option.
		if = {
			limit = {
				scope:actor = { is_ai = yes }
			}
			save_scope_value_as = {
				name = increase_centralisation
				value = yes
			}
		}
	}

	on_accept = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = diarch_subsidise_crown_authority_interaction.tt.accepted
				left_icon = scope:recipient
				scope:recipient = {
					# Try to change authority.
					if = {
						limit = { scope:increase_centralisation = yes }
						increase_imperial_bureaucracy_effect = yes
						# No one blames the liege for this.
						add_character_modifier = {
							modifier = liege_authority_boost_has_scapegoat_modifier
							years = 10
						}
					}
					else = { decrease_imperial_bureaucracy_effect = yes }
				}
				# Aaaaand everyone knows what you did.
				## For good.
				if = {
					limit = { scope:increase_centralisation = yes }
					change_strife_opinion = massive_strife_gain
				}
				## Or for ill.
				else = { change_strife_opinion = massive_strife_loss }
			}
		}
	}

	on_decline = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_bad
				title = diarch_subsidise_crown_authority_interaction.tt.declined
				left_icon = scope:recipient
				add_opinion = {
					target = scope:recipient
					modifier = refusal_opinion
					opinion = -20
				}
			}
		}
	}
	
	ai_accept = {
		base = -25

		# Opinion Factor
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 0.5
			desc = AI_OPINION_REASON
		}
		# Your level of influence.
		## Impotent
		modifier = {
			add = -10
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPOTENT
			scope:actor.influence_level = 0
		}
		## Influential
		### Would be zero, so it wouldn't appear.
		## Persuasive
		modifier = {
			add = 10
			desc = AI_OPINION_INFLUENCE_LEVEL_PERSUASIVE
			scope:actor.influence_level = 2
		}
		## Controlling
		modifier = {
			add = 20
			desc = AI_OPINION_INFLUENCE_LEVEL_CONTROLLING
			scope:actor.influence_level = 3
		}
		## Authoritative
		modifier = {
			add = 30
			desc = AI_OPINION_INFLUENCE_LEVEL_AUTHORITATIVE
			scope:actor.influence_level = 4
		}
		## Imperious
		modifier = {
			add = 40
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPERIOUS
			scope:actor.influence_level = 5
		}
		# Traits.
		## --- Arrogant
		modifier = {
			add = -30
			desc = ai_acceptance_trait_arrogant
			scope:recipient = { has_trait = arrogant }
		}
		## --- Ambitious
		modifier = {
			add = -30
			desc = ai_acceptance_trait_ambitious
			scope:recipient = { has_trait = ambitious }
		}
		## --- Stubborn
		modifier = {
			add = -30
			desc = ai_acceptance_trait_stubborn
			scope:recipient = { has_trait = stubborn }
		}
		## -- Paranoid
		modifier = {
			add = -20
			desc = ai_acceptance_trait_paranoid
			scope:recipient = { has_trait = paranoid }
		}
		## + Craven
		modifier = {
			add = 10
			desc = ai_acceptance_trait_craven
			scope:recipient = { has_trait = craven }
		}
		## ++ Trusting
		modifier = {
			add = 20
			desc = ai_acceptance_trait_trusting
			scope:recipient = { has_trait = trusting }
		}
		## ++ Fickle
		modifier = {
			add = 20
			desc = ai_acceptance_trait_fickle
			scope:recipient = { has_trait = fickle }
		}
		## +++ Content
		modifier = {
			add = 30
			desc = ai_acceptance_trait_content
			scope:recipient = { has_trait = content }
		}
		## +++ Humble
		modifier = {
			add = 30
			desc = ai_acceptance_trait_humble
			scope:recipient = { has_trait = humble }
		}
		# Factor for personality.
		ai_value_modifier = {
			who = scope:recipient
			# The meeker they are, the more they'll go along with your wishes.
			ai_boldness = {
				if = {
					limit = {
						scope:recipient = {
							NOT = { ai_boldness = 0 }
						}
					}
					value = -1
				}
			}
			# And the lazier.
			ai_energy = {
				if = {
					limit = {
						scope:recipient = { ai_energy > 0 }
					}
					value = 0.5
				}
			}
		}
	}

	auto_accept = {
		custom_description = {
			text = auto_accept_interaction_ai	
			object = scope:recipient
			scope:recipient = {
				is_ai = yes
				scope:increase_centralisation = yes
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 24
	ai_potential = {
		is_diarch = yes
		liege_has_co_emperorship_trigger = yes
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
		# You also need prestige left over afterwards to use other interactions, so make sure the AI doesn't bankrupt itself on this.
		prestige >= {
			value = liege.increase_crown_authority_prestige_cost
			multiply = subsidised_liege_authority_discount_value
			add = major_prestige_value
		}
	}

	ai_will_do = {
		base = 0

		# Government situation.
		## Does your liege's gubermint allow you to bully people and take their stuff? No? Then you want to take this interaction; anyone who wouldn't has been pre-filtered.
		modifier = {
			add = 1000
			liege = {
				NOR = {
					has_realm_law_flag = title_revocation_allowed
					has_realm_law_flag = vassal_retraction_allowed
				}
			}
		}
		# Otherwise, there's just a slight constant chance based on energy.
		ai_value_modifier = {
			ai_energy = 2
			# Assuming you're the heir, as otherwise...
			trigger = { liege.player_heir ?= root }
		}
	}
}











##################################################
# ANCILLARY DIARCH POWERS

# Diarch (actor) either tests learning or spends prestige to gain an unpressed claim on a title held by a vassal of their liege (recipient).
diarch_legal_meddling_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	interface_priority = 165
	diarch_interaction = yes
	icon = vassal_claim_liege_title_interaction

	desc = diarch_legal_meddling_interaction_desc

	ai_intermediary_maybe = yes
	target_type = title
	target_filter = recipient_domain_titles
	popup_on_receive = yes

	interface_priority = 60

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			NOT = { this = scope:actor.liege }
			# ... who are appropriately landed.
			is_landed_or_landless_administrative = yes
			scope:recipient.highest_held_title_tier >= tier_county
		}	
	}
	
	is_valid_showing_failures_only = {
		# You can't claim a title from someone if you already have claims on all their titles.
		custom_tooltip = {
			text = diarch_legal_meddling_interaction.tt.they_must_have_at_least_one_unclaimed_title
			scope:recipient = {
				any_held_title = {
					diarch_legal_meddling_claimable_title_trigger = { ACTOR = scope:actor }
				}
			}
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_a_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege = { has_diarchy_active_parameter = unlock_legal_meddling_interaction }
		}
		# Must select something.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:diarch_legal_meddling_interaction_duel_learning = yes
					scope:diarch_legal_meddling_interaction_pay_prestige_partial = yes
					scope:diarch_legal_meddling_interaction_pay_prestige_full = yes
				}
			}
		}
	}

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}

	cooldown = { months = 6 }
	cooldown_against_recipient = { years = 3 }
	
	can_be_picked_title = {
		scope:target = {
			# Really anything you don't already have a claim on and which isn't special.
			diarch_legal_meddling_claimable_title_trigger = { ACTOR = scope:actor }
		}
	}

	# Attempt Methods
	send_options_exclusive = yes
	## Duel for it.
	send_option = {
		# You can always try to duel for it.
		flag = diarch_legal_meddling_interaction_duel_learning
	}
	## Pay partial prestige.
	send_option = {
		is_valid = {
			scope:actor = {
				prestige >= {
					value = legal_meddling_interaction_title_discounted_cost_value
					multiply = -1
				}
			}
		}
		flag = diarch_legal_meddling_interaction_pay_prestige_partial
	}
	## Pay full prestige.
	send_option = {
		is_valid = {
			scope:actor = {
				prestige >= {
					value = legal_meddling_interaction_title_cost_value
					multiply = -1
				}
			}
		}
		flag = diarch_legal_meddling_interaction_pay_prestige_full
	}

	on_send = {
		# Did a landless diarch send this?
		log_diarch_send_interaction_as_variable_effect = { INTERACTION = forge_claim }
	}

	on_accept = {
		scope:actor = {
			# Resolution method.
			## If we're duelling, then we duel.
			if = {
				limit = { scope:diarch_legal_meddling_interaction_duel_learning = yes }
				# Now: FIGHT! WITH WORDS!
				duel = {
					skill = learning
					target = scope:recipient
					# Victory! A claim for you.
					50 = {
						compare_modifier = {
							value = scope:duel_value
							multiplier = 3.5
							min = -49
						}
						desc = diarch_legal_meddling_interaction.tt.success
						diarch_legal_meddling_interaction_apply_success_effect = yes
					}
					# Defeat! Into the loser's bin you go.
					50 = {
						compare_modifier = {
							value = scope:duel_value
							multiplier = -3.5
							min = -49
						}
						desc = diarch_legal_meddling_interaction.tt.failure
						diarch_legal_meddling_interaction_apply_fail_effect = yes
					}
				}
			}
			## Otherwise we can take an uneven gamble against a reduced prestige cost..
			else_if = {
				limit = { scope:diarch_legal_meddling_interaction_pay_prestige_partial = yes }
				random_list = {
					# Victory! A claim for you.
					100 = {
						desc = diarch_legal_meddling_interaction.tt.success
						diarch_legal_meddling_interaction_apply_success_effect = yes
					}
					# Defeat! Into the loser's bin you go.
					100 = {
						desc = diarch_legal_meddling_interaction.tt.failure
						diarch_legal_meddling_interaction_apply_fail_effect = yes
					}
				}
			}
			## Or pay the full price.
			else = {
				custom_tooltip = diarch_legal_meddling_interaction.tt.success
				diarch_legal_meddling_interaction_apply_success_effect = yes
			}
		}

		# Debug logging.
		debug_log = debug_log.legal_meddling.attempt_made
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency = 6

	ai_potential = {
		is_diarch = yes
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_core_loop_base_value

		# Additions.
		## Weight for opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -1
		}
		## Weight for personality.
		ai_value_modifier = {
			ai_boldness = 0.25
			ai_greed = 0.5
			ai_honor = 0.5
		}
		## Flag Management.
		### Duel for it if we're massively superior.
		modifier = {
			add = 100
			scope:diarch_legal_meddling_interaction_duel_learning = yes
			learning_diff = {
				target = scope:recipient
				value >= @ai_skill_diff_upper_threshold
			}
		}
		### Else  we'll try to pay full prestige, if we've got lots to spare.
		modifier = {
			add = 50
			scope:diarch_legal_meddling_interaction_pay_prestige_full = yes
			prestige >= {
				value = shift_privileges_interaction_target_cost_value
				multiply = @ai_prestige_bank_threshold
			}
		}
		### Or else we'll to chance it, if we can afford that + some slack.
		modifier = {
			add = 25
			scope:diarch_legal_meddling_interaction_pay_prestige_partial = yes
			prestige < {
				value = shift_privileges_interaction_target_cost_value
				multiply = @ai_prestige_bank_threshold
			}
			prestige >= {
				value = shift_privileges_interaction_target_discounted_cost_value
				multiply = @ai_prestige_bank_threshold
			}
		}
		### Otherwise we'll risk a regular duel.
		## Weight up for bordering or de jure areas.
		modifier = {
			add = 50
			is_landed_or_landless_administrative = yes
			any_sub_realm_county = {
				any_neighboring_county = {
					holder = {
						OR = {
							this = scope:recipient
							any_liege_or_above = { this = scope:recipient }
						}
					}
				}
			}
		}
		modifier = {
			add = 50
			is_landed_or_landless_administrative = yes
			scope:actor = {
				any_held_title = {
					any_direct_de_jure_vassal_title = {
						exists = holder
						holder = {
							OR = {
								this = scope:recipient
								this = {
									any_liege_or_above = { this = scope:recipient }
								}
							}
						}
					}
				}
			}
		}
		## Weight down for folks outside of our de jure kingdom.
		modifier = {
			add = -100
			is_landed_or_landless_administrative = yes
			scope:recipient.primary_title.kingdom ?= {
				NOT = { this = scope:actor.primary_title.kingdom }
			}
		}
		## Landless characters want land, but also want to focus on taking from those who might give it up.
		### So we prioritise hooked AI counts.
		modifier = {
			add = 100
			is_landed = no
			has_hook = scope:recipient
			scope:recipient = {
				highest_held_title_tier = tier_county
				is_ai = yes
			}
		}
		### Then just hooked AI.
		modifier = {
			add = 50
			is_landed = no
			has_hook = scope:recipient
			scope:recipient = { is_ai = yes }
		}
		# Factors.
		## + Weight up if we're lacking valid claims
		modifier = {
			factor = 1.5
			NOR = {
				is_claimant = yes
				any_claim = {
					exists = holder
					exists = holder.liege
					holder.liege = scope:actor.liege
				}
			}
		}
		## + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## + If we're landless, turbo charge this when we lack suitable claims.
		modifier = {
			factor = 3
			scope:actor = {
				is_ruler = no
				any_claim = {
					count < @ai_threshold_for_revoke_cyle
					diarch_legal_meddling_claimable_title_trigger = { ACTOR = scope:actor }
				}
			}
		}
		## + If we're landless, try to prioritise anyone we've got a hook on.
		modifier = {
			factor = 2
			scope:actor = {
				is_ruler = no
				has_usable_hook = scope:recipient
			}
		}
		## - Try not to pick on allies of our liege.
		modifier = {
			factor = 0.25
			should_avoid_hostile_action_against_due_to_liege_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## x0 Don't pick on players unless they're of at least a decent size.
		modifier = {
			factor = 0
			scope:recipient = {
				is_ai = no
				any_held_county = { count <= 3 }
			}
		}
		## x0 If we're landless, don't claim more titles if we've already got enough we can try to action.
		modifier = {
			factor = 0
			scope:actor = {
				is_ruler = no
				any_claim = {
					count >= @ai_threshold_for_revoke_cyle
					diarch_legal_meddling_claimable_title_trigger = { ACTOR = scope:actor }
				}
			}
		}
		## x0 If we're landless, don't pick on people who won't give their lands up.
		modifier = {
			factor = 0
			scope:actor = { is_ruler = no }
			scope:recipient = {
				any_held_county = { count <= 1 }
			}
		}
		### x0 Don't go into prestige debt!
		modifier = {
			factor = 0
			prestige < 0
		}
	}
}

# Diarch (actor) either tests stewardship or spends prestige to gain gold at the expense of negative modifiers delivered to the liege (recipient).
diarch_syphon_treasury_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	icon = icon_gold
	common_interaction = yes

	desc = diarch_syphon_treasury_interaction_desc


	interface_priority = 60

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			OR = {
				# We only target the liege...
				this = scope:actor.liege
				# ... but we want to see it for peer-vassals and such.
				any_liege_or_above = { this = scope:actor.liege }
			}
		}
	}
	
	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# If scope:actor's stewardship is too crap, then we need to make sure they haven't somehow managed to riddle scope:recipient's lands with negative modifiers already.
		trigger_if = {
			limit = { scope:actor.stewardship < syphon_treasury_stewardship_medium }
			custom_tooltip = {
				text = diarch_syphon_treasury_interaction.tt.not_enough_marks_or_stewardship
				scope:recipient = {
					any_held_county = { diarch_syphon_treasury_embezzlement_modifiers_trigger = no }
				}
			}
		}
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_a_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege = { has_diarchy_active_parameter = unlock_syphon_treasury_interaction }
		}
		# Must have selected an amount to embezzle.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
				custom_tooltip = {
				text = diarch_interactions.tt.must_embezzle_something
				OR = {
					scope:diarch_syphon_treasury_sum_small = yes
					scope:diarch_syphon_treasury_sum_medium = yes
					scope:diarch_syphon_treasury_sum_large = yes
					scope:diarch_syphon_treasury_sum_huge = yes
				}
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}

	cooldown = { years = 3 }

	# Attempt Methods
	send_options_exclusive = yes
	## Steal a small sum.
	### Bonus to scope:actor.
	send_option = {
		flag = diarch_syphon_treasury_sum_small
		# We're doing gross overrides here so that we don't need to relocalise some perfectly good stuff.
		localization = diarch_syphon_treasury_sum_small_name
		current_description = diarch_syphon_treasury_sum_small
	}
	## Steal a moderate sum.
	### No bonus, no malus.
	send_option = {
		flag = diarch_syphon_treasury_sum_medium
		# We're doing gross overrides here so that we don't need to relocalise some perfectly good stuff.
		localization = diarch_syphon_treasury_sum_medium_name
		current_description = diarch_syphon_treasury_sum_medium
		starts_enabled = { always = yes }
	}
	## Steal a large sum.
	### Malus to scope:actor
	send_option = {
		flag = diarch_syphon_treasury_sum_large
		# We're doing gross overrides here so that we don't need to relocalise some perfectly good stuff.
		localization = diarch_syphon_treasury_sum_large_name
		current_description = diarch_syphon_treasury_sum_large
	}
	## Steal a _huge_sum.
	### _Huge_ malus to scope:actor.
	send_option = {
		flag = diarch_syphon_treasury_sum_huge
		# We're doing gross overrides here so that we don't need to relocalise some perfectly good stuff.
		localization = diarch_syphon_treasury_sum_huge_name
		current_description = diarch_syphon_treasury_sum_huge
	}

	on_send = {
		# Did a landless diarch send this?
		log_diarch_send_interaction_as_variable_effect = { INTERACTION = embezzle }
	}

	on_accept = {
		# Time for a skill duel!
		scope:actor = {
			duel = {
				skill = stewardship
				value = syphon_treasury_duel_target_value
				# Victory! Gold for scope:actor, maluses for the liege.
				50 = {
					compare_modifier = {
						value = scope:duel_value
						multiplier = 3.5
						min = -49
					}
					# Bonus for smaller amounts.
					modifier = {
						add = 25
						always = scope:diarch_syphon_treasury_sum_small
					}
					# You always have some kind of a chance.
					min = 10
					desc = diarch_syphon_treasury_interaction.tt.success
					# Inform scope:actor what type of embezzlement they'll be pursuing.
					## Very high stewardship characters syphon development growth from a few counties.
					if = {
						limit = { stewardship >= syphon_treasury_stewardship_very_high }
						custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_development_growth
					}
					## High stewardship characters syphon some control from various counties.
					else_if = {
						limit = { stewardship >= syphon_treasury_stewardship_high }
						custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_control_several_counties
					}
					## Medium stewardship characters syphon lots of control from one county.
					else_if = {
						limit = { stewardship >= syphon_treasury_stewardship_medium }
						custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_control_county
					}
					## Low stewardship characters apply county modifiers.
					else = { custom_tooltip = diarch_syphon_treasury_interaction.tt.success.apply_county_modifier }
					# Now we sort the actual effects.
					## A nice toast to tell us about our new gold.
					send_interface_toast = {
						type = event_toast_effect_good
						title = diarch_syphon_treasury_interaction.tt.success
						left_icon = scope:recipient
						# Transfer gold.
						## Small amount.
						if = {
							limit = { always = scope:diarch_syphon_treasury_sum_small }
							give_or_update_embezzler_secret_effect = {
								TARGET = scope:recipient
								STAKE = syphon_treasury_gold_gain_low
							}
							add_gold = syphon_treasury_gold_gain_low
						}
						## Medium amount.
						else_if = {
							limit = { always = scope:diarch_syphon_treasury_sum_medium }
							give_or_update_embezzler_secret_effect = {
								TARGET = scope:recipient
								STAKE = syphon_treasury_gold_gain_medium
							}
							add_gold = syphon_treasury_gold_gain_medium
						}
						## Large amount.
						else_if = {
							limit = { always = scope:diarch_syphon_treasury_sum_large }
							give_or_update_embezzler_secret_effect = {
								TARGET = scope:recipient
								STAKE = syphon_treasury_gold_gain_high
							}
							add_gold = syphon_treasury_gold_gain_high
						}
						## Huge amount.
						else_if = {
							limit = { always = scope:diarch_syphon_treasury_sum_huge }
							give_or_update_embezzler_secret_effect = {
								TARGET = scope:recipient
								STAKE = syphon_treasury_gold_gain_very_high
							}
							add_gold = syphon_treasury_gold_gain_very_high
						}
					}
					## Plus the maluses for the liege.
					scope:recipient = {
						# Very high stewardship characters syphon development growth from a few counties.
						if = {
							limit = { scope:actor.stewardship >= syphon_treasury_stewardship_very_high }
							# Gold transfer was...
							## Very high.
							if = {
								limit = { always = scope:diarch_syphon_treasury_sum_huge }
								diarch_syphon_treasury_interaction_syphon_development_growth_effect = { LOSS = massive_development_progress_loss }
							}
							## High.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_large }
								diarch_syphon_treasury_interaction_syphon_development_growth_effect = { LOSS = major_development_progress_loss }
							}
							## Medium.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_medium }
								diarch_syphon_treasury_interaction_syphon_development_growth_effect = { LOSS = medium_development_progress_loss }
							}
							## Low.
							else = {
								diarch_syphon_treasury_interaction_syphon_development_growth_effect = { LOSS = minor_development_progress_loss }
							}
						}
						# High stewardship characters syphon some control from various counties.
						else_if = {
							limit = { scope:actor.stewardship >= syphon_treasury_stewardship_high }
							# Gold transfer was...
							## Very high.
							if = {
								limit = { always = scope:diarch_syphon_treasury_sum_huge }
								diarch_syphon_treasury_interaction_syphon_control_effect = { LOSS = monumental_county_control_loss }
							}
							## High.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_large }
								diarch_syphon_treasury_interaction_syphon_control_effect = { LOSS = extreme_county_control_loss }
							}
							## Medium.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_medium }
								diarch_syphon_treasury_interaction_syphon_control_effect = { LOSS = major_county_control_loss }
							}
							## Low.
							else = {
								diarch_syphon_treasury_interaction_syphon_control_effect = { LOSS = medium_county_control_loss }
							}
						}
						# Medium stewardship characters syphon lots of control from one county.
						else_if = {
							limit = { scope:actor.stewardship >= syphon_treasury_stewardship_medium }
							# Gold transfer was...
							## Very high.
							if = {
								limit = { always = scope:diarch_syphon_treasury_sum_huge }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = {
										NOT = { this = scope:recipient.capital_county }
									}
									alternative_limit = { always = yes }
									change_county_control = monumental_county_control_loss
								}
							}
							## High.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_large }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = {
										NOT = { this = scope:recipient.capital_county }
									}
									alternative_limit = { always = yes }
									change_county_control = extreme_county_control_loss
								}
							}
							## Medium.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_medium }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = {
										NOT = { this = scope:recipient.capital_county }
									}
									alternative_limit = { always = yes }
									change_county_control = major_county_control_loss
								}
							}
							## Low.
							else = {
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = {
										NOT = { this = scope:recipient.capital_county }
									}
									alternative_limit = { always = yes }
									change_county_control = medium_county_control_loss
								}
							}
						}
						# Low stewardship characters apply county modifiers.
						else = {
							# Gold transfer was...
							## Very high.
							if = {
								limit = { always = scope:diarch_syphon_treasury_sum_huge }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = { diarch_syphon_treasury_embezzlement_modifiers_trigger = no }
									add_county_modifier = {
										modifier = syphon_treasury_massive_sum_modifier
										years = 5
									}
								}
							}
							## High.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_large }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = { diarch_syphon_treasury_embezzlement_modifiers_trigger = no }
									add_county_modifier = {
										modifier = syphon_treasury_large_sum_modifier
										years = 5
									}
								}
							}
							## Medium.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_medium }
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = { diarch_syphon_treasury_embezzlement_modifiers_trigger = no }
									add_county_modifier = {
										modifier = syphon_treasury_medium_sum_modifier
										years = 5
									}
								}
							}
							## Low.
							else = {
								random_held_county = {
									# Try to prefer against the capital, as that's more noticeable.
									limit = { diarch_syphon_treasury_embezzlement_modifiers_trigger = no }
									add_county_modifier = {
										modifier = syphon_treasury_small_sum_modifier
										years = 5
									}
								}
							}
						}
					}
				}
				# Defeat! No gold, just strife & a crime opinion.
				50 = {
					compare_modifier = {
						value = scope:duel_value
						multiplier = -3.5
						min = -49
					}
					# Malus for higher amounts.
					modifier = {
						add = 25
						always = scope:diarch_syphon_treasury_sum_large
					}
					# Chungus malus for chungus higher amounts.
					modifier = {
						add = 100
						always = scope:diarch_syphon_treasury_sum_huge
					}
					# You can always fail.
					min = 20
					desc = diarch_syphon_treasury_interaction.tt.failure.actor
					send_interface_toast = {
						type = event_toast_effect_bad
						title = diarch_syphon_treasury_interaction.tt.failure.actor
						left_icon = scope:recipient
						show_as_tooltip = { diarch_syphon_treasury_interaction_caught_embezzling_effect = yes }
					}
					hidden_effect = {
						scope:recipient = {
							send_interface_toast = {
								type = event_toast_effect_neutral
								title = diarch_syphon_treasury_interaction.tt.failure.recipient
								left_icon = scope:actor
								diarch_syphon_treasury_interaction_caught_embezzling_effect = yes
							}
						}
					}
				}
			}
		}

		# Debug logging.
		debug_log = debug_log.syphon_treasury.attempt_made
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 12

	ai_potential = {
		is_diarch = yes
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
		# Honest and generous characters never embezzle.
		NOR = {
			has_trait = honest
			has_trait = generous
		}
	}

	ai_will_do = {
		# Embezzlement is serious, so you need actual reasons for it.
		base = 0

		# Additions.
		## Weight for opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -1
		}
		## Weight for personality.
		ai_value_modifier = {
			ai_boldness = 0.25
			ai_greed = 1
			ai_honor = -0.5
		}
		## Flag Management.
		### The AI never goes for a huge sum, that's just there to tempt the player.
		### We prefer a large sum if we've got a massive skill disparity.
		modifier = {
			add = 100
			scope:diarch_syphon_treasury_sum_large = yes
			stewardship_diff = {
				target = scope:recipient
				value >= @ai_skill_diff_upper_threshold
			}
		}
		### But a moderate sum does well if we're more evenly matched.
		modifier = {
			add = 50
			scope:diarch_syphon_treasury_sum_medium = yes
			stewardship_diff = {
				target = scope:recipient
				value < @ai_skill_diff_upper_threshold
			}
			stewardship_diff = {
				target = scope:recipient
				value >= @ai_skill_diff_lower_threshold
			}
		}
		### Aaaand otherwise we'll accept a small amount.
		modifier = {
			add = 25
			scope:diarch_syphon_treasury_sum_small = yes
			stewardship_diff = {
				target = scope:recipient
				value < @ai_skill_diff_lower_threshold
			}
		}
		## Less likely in tribal societies with less bookwork to hide theft in.
		modifier = {
			add = -50
			scope:recipient = { government_has_flag = government_is_tribal }
		}
		## Debt is a great motivator for theft.
		### Is slightly in debt.
		modifier = {
			add = 10
			debt_level = 1
		}
		### Is one year in debt.
		modifier = {
			add = 25
			debt_level = 2
		}
		### Is two years in debt.
		modifier = {
			add = 40
			debt_level = 3
		}
		### Is three years in debt.
		modifier = {
			add = 60
			debt_level = 4
		}
		### Is four years in debt.
		modifier = {
			add = 100
			debt_level = 5
		}
		### Is over five years in debt.
		modifier = {
			add = 200
			debt_level >= 6
		}
		## Certain traits can affect likelihood directly.
		### It's intentional that these don't sync up value-wise with their opposite traits.
		### Honest/generous excluded because they're hard locked out of the interaction for the AI.
		### +++ Greedy.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = greedy
		}
		### ++ Deceitful.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = deceitful
		}
		### + Arbitrary.
		modifier = {
			add = diarch_ai_desire_plus_1_value
			has_trait = arbitrary
		}
		### -- Just.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = just
		}
		## Skill considerations.
		### Very low negative comparative stewardship.
		modifier = {
			add = -50
			stewardship_diff = {
				target = scope:recipient
				value <= 10
			}
			# Filter out arrogant characters, who can't believe they suck.
			NOT = { has_trait = arrogant }
		}
		### Low negative comparative stewardship.
		modifier = {
			add = -25
			stewardship_diff = {
				target = scope:recipient
				value <= 5
			}
			# Filter out arrogant characters, who can't believe they suck.
			NOT = { has_trait = arrogant }
		}
		### High positive comparative stewardship.
		modifier = {
			add = 25
			stewardship_diff = {
				target = scope:recipient
				value >= 5
			}
			# Filter out humble characters, who give their liege too much credit.
			NOT = { has_trait = humble }
		}
		### Very high positive comparative stewardship.
		modifier = {
			add = 50
			stewardship_diff = {
				target = scope:recipient
				value >= 10
			}
			# Filter out humble characters, who give their liege too much credit.
			NOT = { has_trait = humble }
		}
		# Factors.
		## + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## We're happy to bully players here, since we're not taking their land.
	}
}

# Diarch (actor) either tests diplomacy or spends prestige to give negative modifiers to the lands of a vassal of their liege (secondary recipient), who can't resist.
diarch_shift_privileges_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	icon = icon_shift_privileges
	common_interaction = yes

	ai_intermediary_maybe = yes
	desc = diarch_shift_privileges_interaction_desc

	popup_on_receive = yes

	interface_priority = 285

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			NOT = { this = scope:actor.liege }
			# ... who are appropriately landed.
			is_landed_or_landless_administrative = yes
			scope:recipient.highest_held_title_tier >= tier_county
		}
	}
	
	is_valid_showing_failures_only = {
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Diarch revocations require a claim.
		custom_tooltip = {
			text = diarch_shift_privileges_interaction.tt.no_affectable_counties
			scope:recipient = {
				any_held_county = { diarch_shift_privileges_valid_target_title_trigger = yes }
			}
		}
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_an_entrenched_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege = { has_diarchy_active_parameter = unlock_shift_privileges_interaction }
		}
		# Must select something.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:diarch_shift_privileges_interaction_duel_diplomacy = yes
					scope:diarch_shift_privileges_interaction_pay_prestige_partial = yes
					scope:diarch_shift_privileges_interaction_pay_prestige_full = yes
				}
			}
		}
	}

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}

	cooldown = { months = 6 }
	cooldown_against_recipient = { years = 3 }

	# Attempt Methods
	send_options_exclusive = yes
	## Duel for it.
	send_option = {
		# You can always try to duel for it.
		flag = diarch_shift_privileges_interaction_duel_diplomacy
	}
	## Pay partial prestige.
	send_option = {
		is_valid = {
			scope:actor = {
				prestige >= {
					value = shift_privileges_interaction_target_discounted_cost_value
					multiply = -1
				}
			}
		}
		flag = diarch_shift_privileges_interaction_pay_prestige_partial
	}
	## Pay full prestige.
	send_option = {
		is_valid = {
			scope:actor = {
				prestige >= {
					value = shift_privileges_interaction_target_cost_value
					multiply = -1
				}
			}
		}
		flag = diarch_shift_privileges_interaction_pay_prestige_full
	}

	on_send = {
		# Did a landless diarch send this?
		log_diarch_send_interaction_as_variable_effect = { INTERACTION = shift_privileges }
	}

	on_accept = {
		scope:actor = {
			# Resolution method.
			## If we're duelling, then we duel.
			if = {
				limit = { scope:diarch_shift_privileges_interaction_duel_diplomacy = yes }
				# Now: FIGHT! WITH WORDS!
				duel = {
					skill = diplomacy
					target = scope:recipient
					# Victory! Cash for you, negative modifier for your opponent.
					50 = {
						compare_modifier = {
							value = scope:duel_value
							multiplier = 3.5
							min = -49
						}
						desc = diarch_shift_privileges_interaction.tt.success
						diarch_shift_privileges_interaction_apply_success_effect = yes
					}
					# Defeat! Into the loser's bin you go.
					50 = {
						compare_modifier = {
							value = scope:duel_value
							multiplier = -3.5
							min = -49
						}
						desc = diarch_shift_privileges_interaction.tt.failure
						diarch_shift_privileges_interaction_apply_fail_effect = yes
					}
				}
			}
			## Otherwise we can take an even gamble against a reduced prestige cost..
			else_if = {
				limit = { scope:diarch_shift_privileges_interaction_pay_prestige_partial = yes }
				random_list = {
					# Victory! A claim for you.
					100 = {
						desc = diarch_shift_privileges_interaction.tt.success
						diarch_shift_privileges_interaction_apply_success_effect = yes
					}
					# Defeat! Into the loser's bin you go.
					100 = {
						desc = diarch_shift_privileges_interaction.tt.failure
						diarch_shift_privileges_interaction_apply_fail_effect = yes
					}
				}
			}
			## Or pay the full price.
			else = {
				custom_tooltip = diarch_shift_privileges_interaction.tt.success
				diarch_shift_privileges_interaction_apply_success_effect = yes
			}
			# Prestige costs.
			## Point out the lack of cost.
			if = {
				limit = { scope:diarch_shift_privileges_interaction_duel_diplomacy = yes }
				custom_tooltip = diarch_interaction_pay_prestige_none
			}
			## Point out the discount.
			else_if = {
				limit = { scope:diarch_shift_privileges_interaction_pay_prestige_partial = yes }
				add_prestige = shift_privileges_interaction_target_discounted_cost_value
			}
			## Soz mate, yerr payin' full price.
			else = { add_prestige = shift_privileges_interaction_target_cost_value }
		}

		# Debug logging.
		debug_log = debug_log.shift_privileges.attempt_made
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency = 6

	ai_potential = {
		is_diarch = yes
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_secondary_powers_base_value

		# Additions.
		## Weight for opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -1
		}
		## Weight for personality.
		ai_value_modifier = {
			ai_boldness = 0.25
			ai_greed = 0.5
			ai_honor = 0.5
		}
		## Flag Management.
		### Duel for it if we're massively superior.
		modifier = {
			add = 100
			scope:diarch_shift_privileges_interaction_duel_diplomacy = yes
			diplomacy_diff = {
				target = scope:recipient
				value >= @ai_skill_diff_upper_threshold
			}
		}
		### Else we'll try to pay full prestige, if we've got lots to spare.
		modifier = {
			add = 50
			scope:diarch_shift_privileges_interaction_pay_prestige_full = yes
			prestige >= {
				value = shift_privileges_interaction_target_cost_value
				multiply = @ai_prestige_bank_threshold
			}
		}
		### Or else we'll chance it, if we can afford that + some slack.
		modifier = {
			add = 25
			scope:diarch_shift_privileges_interaction_pay_prestige_partial = yes
			prestige < {
				value = shift_privileges_interaction_target_cost_value
				multiply = @ai_prestige_bank_threshold
			}
			prestige >= {
				value = shift_privileges_interaction_target_discounted_cost_value
				multiply = @ai_prestige_bank_threshold
			}
		}
		### Otherwise we'll risk a regular duel.
		## Landless AI want to do this more.
		modifier = {
			add = 25
			is_ruler = no
		}
		## AI who are in debt seek ways out of it.
		modifier = {
			add = 100
			debt_level >= 0
		}
		## Certain traits make it either very likely or very unlikely.
		### +++ Arbitrary.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = arbitrary
		}
		### --- Just.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			has_trait = just
		}
		# Factors.
		## + Do pick on people we hate.
		modifier = {
			factor = 1.5
			should_prioritise_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## - Try not to pick on allies of our liege.
		modifier = {
			factor = 0.25
			should_avoid_hostile_action_against_due_to_liege_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## x0 Don't pick on our friends or allies.
		modifier = {
			factor = 0
			should_avoid_hostile_action_against_due_to_personal_relations_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
		## x0 Don't pick on players unless they're of at least a decent size.
		modifier = {
			factor = 0
			scope:recipient = {
				is_ai = no
				any_held_county = { count <= 3 }
			}
		}
		### x0 Don't go into prestige debt!
		modifier = {
			factor = 0
			prestige < 0
		}
	}
}

# Diarch (actor) requests use of a special CB from liege (recipient), allowing them to powerfully expand the empire's borders and harvest influence.
diarch_request_imperial_expedition_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	notification_text = DIARCH_REQUESTS_IMPERIAL_EXPEDITION
	icon = invasion
	interface_priority = 5

	desc = diarch_request_imperial_expedition_interaction_desc

	ai_maybe = yes
	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			liege = { has_diarchy_parameter = unlock_diarch_requests_military_expedition_interaction }
		}
		# Same sub-realm only.
		OR = {
			scope:actor.liege = scope:recipient
			scope:recipient = {
				any_liege_or_above = { this = scope:actor.liege }
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = unlock_diarch_requests_military_expedition_interaction }
		# And you have to have _some_ troops of your own.
		custom_tooltip = {
			text = diarch_request_imperial_expedition_interaction.tt.minimum_troop_count
			scope:actor.max_military_strength >= request_imperial_expedition_minimum_troop_count_value
		}
		# _And_ you don't already have a charge.
		custom_tooltip = {
			text = diarch_request_imperial_expedition_interaction.tt.actor_already_has_charge
			scope:actor = {
				NOT = { has_variable = imperial_expedition_charged }
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	# Hefty cooldown on this guy, as you shouldn't be able to do these often.
	cooldown_against_recipient = { years = 25 }

	cost = {
		influence = {
			if = {
				limit = { scope:influence_major = yes }
				add = request_imperial_expedition_influence_stake_major_value
			}
			else_if = {
				limit = { scope:influence_medium = yes }
				add = request_imperial_expedition_influence_stake_medium_value
			}
			else_if = {
				limit = { scope:influence_minor = yes }
				add = request_imperial_expedition_influence_stake_minor_value
			}
		}
	}
	
	# How much influence do we want to outlay on this?
	## A cheapy amount.
	send_option = {
		# Always valid.
		flag = influence_minor
		localization = diarch_request_imperial_expedition_interaction.tt.influence_minor_name
	}
	## A medium amount.
	send_option = {
		is_valid = { scope:actor.influence >= request_imperial_expedition_influence_stake_medium_value }
		flag = influence_medium
		localization = diarch_request_imperial_expedition_interaction.tt.influence_medium_name
	}
	## A large amount.
	send_option = {
		is_valid = { scope:actor.influence >= request_imperial_expedition_influence_stake_major_value }
		flag = influence_major
		localization = diarch_request_imperial_expedition_interaction.tt.influence_major_name
	}
	## Use a hook instead.
	send_option = {
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		flag = 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"

	on_auto_accept = {
		# Fire the notification event telling scope:recipient what's been done.
		scope:recipient = { trigger_event = diarchy.8003 }
	}

	on_accept = {
		scope:actor = {
			# Display effects in the interaction.
			show_as_tooltip = { diarch_request_imperial_expedition_accepted_effect = yes }
			# Fire the notification event.
			trigger_event = diarchy.8001
		}
	}

	on_decline = {
		scope:actor = {
			# Display effects in the interaction.
			show_as_tooltip = { diarch_request_imperial_expedition_rejected_effect = yes }
			# Fire the notification event.
			trigger_event = diarchy.8002
		}
	}
	
	auto_accept = {
		scope:recipient = {
			trigger_if = {
				limit = { scope:hook = yes }
				custom_description = {
					text = "spending_hook"
					subject = scope:actor
					object = scope:recipient
					scope:hook = yes
				}
			}
			trigger_else_if = {
				limit = { scope:influence_major = yes }
				influence < request_imperial_expedition_influence_stake_major_value
			}
			trigger_else_if = {
				limit = { scope:influence_medium = yes }
				influence < request_imperial_expedition_influence_stake_medium_value
			}
			trigger_else_if = {
				limit = { scope:influence_minor = yes }
				influence < request_imperial_expedition_influence_stake_minor_value
			}
			trigger_else = { always = no }
		}
	}

	ai_accept = {
		base = -25

		# Opinion Factor
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 1
			desc = AI_OPINION_REASON
		}
		# Your level of influence.
		## Impotent
		modifier = {
			add = -10
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPOTENT
			scope:actor.influence_level = 0
		}
		## Influential
		### Would be zero, so it wouldn't appear.
		## Persuasive
		modifier = {
			add = 10
			desc = AI_OPINION_INFLUENCE_LEVEL_PERSUASIVE
			scope:actor.influence_level = 2
		}
		## Controlling
		modifier = {
			add = 20
			desc = AI_OPINION_INFLUENCE_LEVEL_CONTROLLING
			scope:actor.influence_level = 3
		}
		## Authoritative
		modifier = {
			add = 30
			desc = AI_OPINION_INFLUENCE_LEVEL_AUTHORITATIVE
			scope:actor.influence_level = 4
		}
		## Imperious
		modifier = {
			add = 40
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPERIOUS
			scope:actor.influence_level = 5
		}
		# Traits.
		## ---- Paranoid
		modifier = {
			add = -50
			desc = ai_acceptance_trait_paranoid
			scope:recipient = { has_trait = paranoid }
		}
		## --- Stubborn
		modifier = {
			add = -30
			desc = ai_acceptance_trait_stubborn
			scope:recipient = { has_trait = stubborn }
		}
		## --- Content
		modifier = {
			add = -30
			desc = ai_acceptance_trait_content
			scope:recipient = { has_trait = content }
		}
		## - Humble
		modifier = {
			add = -10
			desc = ai_acceptance_trait_humble
			scope:recipient = { has_trait = humble }
		}
		## + Arrogant
		modifier = {
			add = 10
			desc = ai_acceptance_trait_arrogant
			scope:recipient = { has_trait = arrogant }
		}
		## + Ambitious
		modifier = {
			add = 10
			desc = ai_acceptance_trait_ambitious
			scope:recipient = { has_trait = ambitious }
		}
		## ++ Trusting
		modifier = {
			add = 20
			desc = ai_acceptance_trait_trusting
			scope:recipient = { has_trait = trusting }
		}
		## ++ Fickle
		modifier = {
			add = 20
			desc = ai_acceptance_trait_fickle
			scope:recipient = { has_trait = fickle }
		}
		## ++ Lazy
		modifier = {
			add = 20
			desc = ai_acceptance_trait_lazy
			scope:recipient = { has_trait = lazy }
		}
		## +++ Craven
		modifier = {
			add = 30
			desc = ai_acceptance_trait_craven
			scope:recipient = { has_trait = craven }
		}
		# Factor for personality.
		ai_value_modifier = {
			who = scope:recipient
			# The meeker they are, the more they'll go along with your wishes.
			ai_boldness = {
				if = {
					limit = {
						scope:recipient = {
							NOT = { ai_boldness = 0 }
						}
					}
					value = -1
				}
			}
			# And the lazier.
			ai_energy = {
				if = {
					limit = {
						scope:recipient = { ai_energy > 0 }
					}
					value = 0.5
				}
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 24
	ai_potential = {
		is_diarch = yes
		liege = { has_diarchy_active_parameter = unlock_diarch_requests_military_expedition_interaction }
		NOR = {
			has_trait = craven
			has_trait = lazy
			has_trait = content
		}
	}

	ai_will_do = {
		base = -50

		# Personality.
		ai_value_modifier = {
			ai_energy = 2
			ai_boldness = 1
			ai_greed = 1
		}
		# Traits.
		## Brave
		modifier = {
			add = 25
			has_trait = brave
		}
		## Ambitious
		modifier = {
			add = 50
			has_trait = ambitious
		}
		## Arrogant
		modifier = {
			add = 25
			has_trait = arrogant
		}
		## Loyal & Disloyal (same result, different motivations)
		modifier = {
			add = 25
			OR = {
				has_trait = loyal
				has_trait = disloyal
			}
		}
		## Diligent
		modifier = {
			add = 25
			has_trait = diligent
		}
		## We've already filtered out craven, lazy, & content by this point.
		# Military.
		## For every thousand troops we can put in ourselves, make us more likely to ask.
		modifier = {
			add = {
				value = scope:actor.max_military_strength
				divide = 100
				floor = yes
			}
			always = yes
		}
		# Flag Management.
		## Make sure the AI uses hooks for this as it's % based
		modifier = {
			add = 1
			scope:hook = yes
		}
		## Otherwise, try to spend the most influence possible whenever we can.
		modifier = {
			add = 3
			scope:influence_minor = yes
		}
		modifier = {
			add = 2
			scope:influence_medium = yes
		}
		modifier = {
			add = 1
			scope:influence_major = yes
		}
	}
}

# Diarch (actor) requests a kingdom governor title from liege (recipient).
diarch_demand_despotate_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	notification_text = DIARCH_DEMANDS_DESPOTATE
	icon = icon_found_despotate
	interface_priority = 15

	desc = diarch_demand_despotate_interaction_desc

	target_type = title
	target_filter = secondary_recipient_de_jure_titles
	can_be_picked_title = {
		scope:target = { valid_kingdom_for_diarch_to_demand_as_despotate_trigger = yes }
	}
	has_valid_target_showing_failures_only = {
		# Only show kingdoms.
		scope:target.tier = tier_kingdom
		# Don't show the empire's capital kingdom.
		NOT = {
			scope:recipient.capital_county = { target_is_de_jure_liege_or_above = scope:target }
		}
	}
	# We do this via redirects because recipient_de_jure_titles did not turn up for work today.
	redirect = {
		scope:recipient = { save_scope_as = secondary_recipient }
	}
	ai_maybe = yes
	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			liege = { has_diarchy_parameter = unlock_diarch_demand_kingdom_interaction }
		}
		# Same sub-realm only.
		OR = {
			scope:actor.liege = scope:recipient
			scope:recipient = {
				any_liege_or_above = { this = scope:actor.liege }
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = unlock_diarch_demand_kingdom_interaction }
		# You do not already have a kingdom tier title
		custom_tooltip = {
			text = diarch_demand_despotate_interaction.tt.already_have_high_titles
			scope:actor.highest_held_title_tier < tier_kingdom
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	# Hefty cooldown on this guy, as you shouldn't be able to pester about this often.
	cooldown_against_recipient = { years = 25 }

	cost = {
		influence = {
			if = {
				limit = { scope:influence_major = yes }
				add = diarch_demand_despotate_interaction_stake_major_value
			}
			else_if = {
				limit = { scope:influence_medium = yes }
				add = diarch_demand_despotate_interaction_stake_medium_value
			}
			else_if = {
				limit = { scope:influence_minor = yes }
				add = diarch_demand_despotate_interaction_stake_minor_value
			}
		}
	}
	
	# How much influence do we want to outlay on this?
	## A cheapy amount.
	send_option = {
		# Always valid.
		flag = influence_minor
		localization = diarch_demand_despotate_interaction.tt.influence_minor_name
	}
	## A medium amount.
	send_option = {
		is_valid = { scope:actor.influence >= diarch_demand_despotate_interaction_stake_medium_value }
		flag = influence_medium
		localization = diarch_demand_despotate_interaction.tt.influence_medium_name
	}
	## A large amount.
	send_option = {
		is_valid = { scope:actor.influence >= diarch_demand_despotate_interaction_stake_major_value }
		flag = influence_major
		localization = diarch_demand_despotate_interaction.tt.influence_major_name
	}
	## Use a hook instead.
	send_option = {
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		flag = 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"

	on_auto_accept = {
		# Fire the notification event telling scope:recipient what's been done.
		scope:recipient = { trigger_event = diarchy.8033 }
	}

	on_accept = {
		# Notify the player of how to force their liege's hand.
		if = {
			limit = {
				scope:influence_major = yes
				scope:recipient.influence >= diarch_demand_despotate_interaction_stake_to_raise_major_inverted_value
			}
			custom_tooltip = diarch_demand_despotate_interaction_stake_to_raise_major_value.tt.liege_can_refuse
		}
		else_if = {
			limit = {
				scope:influence_medium = yes
				scope:recipient.influence >= diarch_demand_despotate_interaction_stake_to_raise_medium_inverted_value
			}
			custom_tooltip = diarch_demand_despotate_interaction_stake_to_raise_medium_value.tt.liege_can_refuse
		}
		else_if = {
			limit = {
				scope:influence_minor = yes
				scope:recipient.influence >= diarch_demand_despotate_interaction_stake_to_raise_minor_inverted_value
			}
			custom_tooltip = diarch_demand_despotate_interaction_stake_to_raise_minor_value.tt.liege_can_refuse
		}
		scope:actor = {
			# Display effects in the interaction.
			show_as_tooltip = { diarch_demand_despotate_interaction_accepted_effect = yes }
			# Fire the notification event.
			trigger_event = diarchy.8031
		}
	}

	on_decline = {
		scope:actor = {
			# Display effects in the interaction.
			show_as_tooltip = { diarch_demand_despotate_interaction_rejected_effect = yes }
			# Fire the notification event.
			trigger_event = diarchy.8032
		}
	}
	
	auto_accept = {
		scope:recipient = {
			trigger_if = {
				limit = { scope:hook = yes }
				custom_description = {
					text = "spending_hook"
					subject = scope:actor
					object = scope:recipient
					scope:hook = yes
				}
			}
			trigger_else_if = {
				limit = { scope:influence_major = yes }
				influence < diarch_demand_despotate_interaction_stake_to_raise_major_inverted_value
			}
			trigger_else_if = {
				limit = { scope:influence_medium = yes }
				influence < diarch_demand_despotate_interaction_stake_to_raise_medium_inverted_value
			}
			trigger_else_if = {
				limit = { scope:influence_minor = yes }
				influence < diarch_demand_despotate_interaction_stake_to_raise_minor_inverted_value
			}
			trigger_else = { always = no }
		}
	}

	ai_accept = {
		base = -50

		# Opinion Factor
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 1
			desc = AI_OPINION_REASON
		}
		# Your level of influence.
		## Impotent
		modifier = {
			add = -10
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPOTENT
			scope:actor.influence_level = 0
		}
		## Influential
		### Would be zero, so it wouldn't appear.
		## Persuasive
		modifier = {
			add = 10
			desc = AI_OPINION_INFLUENCE_LEVEL_PERSUASIVE
			scope:actor.influence_level = 2
		}
		## Controlling
		modifier = {
			add = 20
			desc = AI_OPINION_INFLUENCE_LEVEL_CONTROLLING
			scope:actor.influence_level = 3
		}
		## Authoritative
		modifier = {
			add = 30
			desc = AI_OPINION_INFLUENCE_LEVEL_AUTHORITATIVE
			scope:actor.influence_level = 4
		}
		## Imperious
		modifier = {
			add = 40
			desc = AI_OPINION_INFLUENCE_LEVEL_IMPERIOUS
			scope:actor.influence_level = 5
		}
		# Traits.
		## ---- Paranoid
		modifier = {
			add = -50
			desc = ai_acceptance_trait_paranoid
			scope:recipient = { has_trait = paranoid }
		}
		## --- Stubborn
		modifier = {
			add = -30
			desc = ai_acceptance_trait_stubborn
			scope:recipient = { has_trait = stubborn }
		}
		## --- Greedy
		modifier = {
			add = -30
			desc = ai_acceptance_trait_greedy
			scope:recipient = { has_trait = greedy }
		}
		## -- Arrogant
		modifier = {
			add = -20
			desc = ai_acceptance_trait_arrogant
			scope:recipient = { has_trait = arrogant }
		}
		## ++ Humble
		modifier = {
			add = 20
			desc = ai_acceptance_trait_humble
			scope:recipient = { has_trait = humble }
		}
		## ++ Trusting
		modifier = {
			add = 20
			desc = ai_acceptance_trait_trusting
			scope:recipient = { has_trait = trusting }
		}
		## ++ Fickle
		modifier = {
			add = 20
			desc = ai_acceptance_trait_fickle
			scope:recipient = { has_trait = fickle }
		}
		## ++ Lazy
		modifier = {
			add = 20
			desc = ai_acceptance_trait_lazy
			scope:recipient = { has_trait = lazy }
		}
		## ++ Generous
		modifier = {
			add = 20
			desc = ai_acceptance_trait_generous
			scope:recipient = { has_trait = generous }
		}
		# Factor for personality.
		ai_value_modifier = {
			who = scope:recipient
			# The meeker they are, the more they'll go along with your wishes.
			ai_boldness = {
				if = {
					limit = {
						scope:recipient = {
							NOT = { ai_boldness = 0 }
						}
					}
					value = -1
				}
			}
			# And the lazier.
			ai_energy = {
				if = {
					limit = {
						scope:recipient = { ai_energy > 0 }
					}
					value = 0.5
				}
			}
		}
	}

	# AI
	ai_set_target = {
		scope:recipient = {
			# Grab our empires.
			every_held_title = {
				limit = { tier >= tier_empire }
				add_to_list = empires_list
			}
			# Then from that, formulate our kingdoms.
			every_in_list = {
				list = empires_list
				every_in_de_jure_hierarchy = {
					limit = {
						tier = tier_kingdom
						valid_kingdom_for_diarch_to_demand_as_despotate_trigger = yes
					}
					continue = { tier >= tier_kingdom }
					add_to_list = kingdoms_list
				}
			}
			# Now pick our best shot.
			ordered_in_list = {
				list = kingdoms_list
				order_by = {
					# Tell the AI to grab its own kingdom first of all.
					if = {
						limit = { this = scope:actor.capital_county.kingdom }
						add = 1000
					}
					# Otherwise, go for the biggest within the empire.
					else = {
						every_de_jure_county_holder = {
							limit = { top_liege = scope:recipient }
							add = 1
						}
					}
				}
				save_scope_as = target
			}
		}
	}
	ai_targets = { ai_recipients = liege }
	ai_frequency = 24
	ai_potential = {
		is_diarch = yes
		liege = { has_diarchy_active_parameter = unlock_diarch_demand_kingdom_interaction }
		NOR = {
			has_trait = humble
			has_trait = content
		}
		# Loyal diarchs don't ask for what their liege could give freely.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		base = 25

		# Personality.
		ai_value_modifier = {
			ai_greed = 1
			ai_boldness = 1
			ai_energy = 0.25
		}
		# Opinion.
		## The more we like our emperor, the less likely we are to want to interfere in their planned setup.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -0.25
		}
		# Traits.
		## +++ Ambitious.
		modifier = {
			add = 50
			has_trait = ambitious
		}
		## +++ Arrogant.
		modifier = {
			add = 50
			has_trait = arrogant
		}
		## ++ Greedy.
		modifier = {
			add = 25
			has_trait = greedy
		}
		## ++ Diligent.
		modifier = {
			add = 25
			has_trait = diligent
		}
		## -- Generous.
		modifier = {
			add = -25
			has_trait = generous
		}
		## --- Lazy.
		modifier = {
			add = -50
			has_trait = lazy
		}
		## Humble & Content have both been pre-filtered out.
		# Flag Management.
		## Make sure the AI uses hooks for this as it's % based
		modifier = {
			add = 4
			scope:hook = yes
		}
		## Otherwise, try to spend the most influence possible whenever we can.
		modifier = {
			add = 3
			scope:influence_minor = yes
		}
		modifier = {
			add = 2
			scope:influence_medium = yes
		}
		modifier = {
			add = 1
			scope:influence_major = yes
		}
	}
}










##################################################
# DIARCH COUP LIEGE INTERACTIONS

diarch_coup_liege_interaction = {
	category = interaction_category_diarch
	diarch_interaction = yes
	icon = icon_scheme_claim_throne
	interface_priority = 50
	pre_answer_no_breakdown_key = diarch_coup_liege_interaction_pre_answer_no_breakdown_key
	pre_answer_yes_breakdown_key = diarch_coup_liege_interaction_pre_answer_yes_breakdown_key

	desc = diarch_coup_liege_interaction_desc

	# First, grab every other powerful vassal of your liege & plonk them in a list.
	populate_recipient_list = {
		scope:actor.liege = {
			every_powerful_vassal = {
				limit = {
					NOT = { this = scope:actor }
				}
				add_to_list = characters
			}
			every_powerful_family = {
				limit = {
					NOR = {
						house_head = scope:actor
						house_head = scope:recipient
					}
				}
				house_head = { add_to_list = characters }
			}
		}
	}
	redirect = {
		# Turn the old scope:recipient into the target.
		if = {
			limit = {
				NOR = {
					scope:recipient = scope:actor
					scope:recipient = scope:actor.liege
				}
			}
			scope:recipient = { save_scope_as = secondary_recipient }
		}
		# Always make sure we're targeting your liege as the recipient for UX consistency.
		scope:actor.liege = { save_scope_as = recipient }
	}

	interface_priority = 20

	is_shown = {
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			OR = {
				AND = {
					exists = liege
					is_diarch_of_target = liege
				}
				is_designated_diarch = yes
			}
		}
		# Valid on vassals of your liege or your liege themselves.
		## More complex triggers don't generally work because redirect brings the interaction back to targeting the liege as scope:recipient, so we're left with this.
		### Don't try to improve it, it's not worth it, but if you _do_, then test your changes thoroughly.
		#### When this breaks (which it does easily), it tends to mean the interaction shows up as valid against _every_ other character in diplomatic range.
		OR = {
			scope:recipient = scope:actor.liege
			scope:secondary_recipient.liege ?= scope:actor.liege
		}
	}

	is_valid_showing_failures_only = {
		# Diarch must be able to act.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		# Loyalty hooks, per the name, will tend to block this.
		custom_tooltip = {
			text = diarch_coup_liege_interaction.tt.action_blocked_by_loyalty_hook
			NOT = {
				diarch_loyalty_due_to_hook_trigger = {
					LIEGE = scope:recipient
					DIARCH = scope:actor
				}
			}
		}
		# They can't already be in the list.
		custom_tooltip = {
			text = diarch_coup_liege_interaction.tt.secondary_recipient_is_already_in_list
			NOT = {
				scope:actor = {
					any_in_list = {
						variable = coup_pv_supporters_list
						this = scope:secondary_recipient
					}
				}
			}
		}
		# Must be in an actual diarchy — we show most interactions greyed out for designated diarchs.
		custom_tooltip = {
			text = diarch_interactions.tt.you_must_be_in_an_entrenched_regency_to_access
			scope:actor = { is_diarch = yes }
		}
		# And, relatedly, there's some checks that we don't show you unless you *are* already in a diarchy.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch = yes }
			}	
			# Diarchs must have unlocked the appropriate power.
			scope:actor.liege ?= { has_diarchy_active_parameter = regents_can_try_to_overthrow_present_lieges }
		}
		trigger_if = {
			limit = { exists = scope:secondary_recipient }
			# Must be available.
			## So no kids.
			scope:secondary_recipient = { is_adult = yes }
			## & no one in prison.
			scope:secondary_recipient = { is_imprisoned = no }
			# Plus, currently, humans can't be part of these plots.
			scope:secondary_recipient = { is_ai = yes }
		}
		# Must select something — tooltips'll knacker otherwise + just for consistency.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:promise_nothing = yes
					scope:promise_hook_weak = yes
					scope:promise_hook_strong = yes
					scope:promise_gold_medium = yes
					scope:promise_gold_large = yes
				}
			}
		}
		# Cannot be at war with your liege.
		NOT = {
			scope:actor = { is_at_war_with = scope:actor.liege }
		}
	}

	can_send = {
		# We check this here to make the interaction generally findable, so you can get at the list easily, but prevent you from inviting randos to the coup.
		## It's actually technically harmless - they won't help but don't get their payout if they're not powerful when the coup hits.
		trigger_if = {
			limit = {
				scope:recipient = { government_has_flag = government_is_administrative }
			}
			scope:secondary_recipient.house = { is_powerful_family = yes }
		}
		trigger_else = {
			scope:secondary_recipient = { is_powerful_vassal = yes }
		}
	}

	# Promise bugger all.
	send_option = {
		flag = promise_nothing
		localization = PROMISE_NOTHING
	}
	# Promise hook.
	send_option = {
		is_valid = {
			# Can't offer a hook if they've already got any type of hook on you.
			NOT = {
				scope:secondary_recipient ?= { has_hook = scope:actor }
			}
		}
		flag = promise_hook_weak
		localization = PROMISE_HOOK_WEAK
	}
	# Promise strong hook.
	send_option = {
		is_valid = {
			# Can't offer a strong hook if they've already got a strong hook on you.
			NOT = {
				scope:secondary_recipient ?= { has_strong_hook = scope:actor }
			}
		}
		flag = promise_hook_strong
		localization = PROMISE_HOOK_STRONG
	}
	# Promise gold.
	send_option = {
		flag = promise_gold_medium
		localization = PROMISE_GOLD_MEDIUM
	}
	# Promise piles of gold.
	send_option = {
		flag = promise_gold_large
		localization = PROMISE_GOLD_LARGE
	}

	on_accept = {
		if = {
			limit = { exists = scope:secondary_recipient }
			scope:actor = {
				# Scope:secondary_recipient joins your conspiracy. 
				custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.joins_conspiracy
				## Send a notification just for a bit of extra feedback.
				send_interface_toast = {
					type = event_toast_effect_good
					title = diarch_coup_liege_interaction.tt.secondary_recipient.joins_conspiracy
					left_icon = scope:secondary_recipient
				}
				# HerHis reward is collected if you succeed.
				if = {
					limit = { scope:promise_nothing = no }
					custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.reward
				}
				# Certain scope:secondary_recipients may betray their liege in the throne room itself.
				## Chancellors in diplo coups.
				if = {
					limit = { scope:secondary_recipient ?= scope:recipient.cp:councillor_chancellor }
					custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.chancellor_sabotage
				}
				## Spymasters in intrigue coups.
				if = {
					limit = { scope:secondary_recipient ?= scope:recipient.cp:councillor_spymaster }
					custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.spymaster_sabotage
				}
				## Personal Champions in prowess coups.
				if = {
					limit = {
						scope:secondary_recipient = { has_court_position = champion_court_position }
					}
					custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.champion_sabotage
					# Yes, there are other candidates, but we're not tooltipping every conceivable case. Rulers are gonna have supporters.
					custom_tooltip = diarch_coup_liege_interaction.tt.secondary_recipient.champion_sabotage.others
				}
				# Right, actually record them.
				## Including in the variable.
				add_to_variable_list = {
					name = coup_pv_supporters_list
					target = scope:secondary_recipient
				}
				## And their promised payment, if anything.
				### Weak hooks.
				if = {
					limit = { scope:promise_hook_weak = yes }
					add_to_variable_list = {
						name = coup_promise_list_weak_hook
						target = scope:secondary_recipient
					}
				}
				### Strong hooks.
				else_if = {
					limit = { scope:promise_hook_strong = yes }
					add_to_variable_list = {
						name = coup_promise_list_strong_hook
						target = scope:secondary_recipient
					}
				}
				### Cash.
				else_if = {
					limit = { scope:promise_gold_medium = yes }
					add_to_variable_list = {
						name = coup_promise_list_gold
						target = scope:secondary_recipient
					}
				}
				### Big Cash.
				else_if = {
					limit = { scope:promise_gold_large = yes }
					add_to_variable_list = {
						name = coup_promise_list_big_gold
						target = scope:secondary_recipient
					}
				}
			}
		}
	}

	# Disguise the interaction from players.
	ai_min_reply_days = 0
	ai_max_reply_days = 0

	ai_accept = {
		# Base reluctance to commit to a risky, treasonous plan.
		base = -50

		# Opinion.
		## Of scope:actor.
		opinion_modifier = {
			who = scope:secondary_recipient
			opinion_target = scope:actor
			multiplier = 1
		}
		## Of scope:recipient.
		opinion_modifier = {
			who = scope:secondary_recipient
			opinion_target = scope:recipient
			multiplier = -0.5
		}
		# Personality.
		## Values.
		ai_value_modifier = {
			who = scope:secondary_recipient
			ai_honor = -1
			ai_boldness = 0.25
		}
		## Traits.
		### +++ Disloyal.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.disloyal
			scope:secondary_recipient = { has_trait = disloyal }
		}
		### +++ Ambitious.
		modifier = {
			add = diarch_ai_desire_plus_3_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.ambitious
			scope:secondary_recipient = { has_trait = ambitious }
		}
		### ++ Arbitrary.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.arbitrary
			scope:secondary_recipient = { has_trait = arbitrary }
		}
		### + Fickle.
		modifier = {
			add = diarch_ai_desire_plus_1_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.fickle
			scope:secondary_recipient = { has_trait = fickle }
		}
		### - Stubborn.
		modifier = {
			add = diarch_ai_desire_minus_1_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.stubborn
			scope:secondary_recipient = { has_trait = stubborn }
		}
		### -- Just.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.just
			scope:secondary_recipient = { has_trait = just }
		}
		### --- Content.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.content
			scope:secondary_recipient = { has_trait = content }
		}
		### --- Loyal.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook.tt.has_trait.loyal
			scope:secondary_recipient = { has_trait = loyal }
		}
		# Hooks.
		## Weak hooks are happy to have you in power.
		modifier = {
			add = 25
			scope:secondary_recipient = { has_weak_hook = scope:actor }
		}
		## Strong hooks are *very* happy to have you in power.
		modifier = {
			add = 75
			scope:secondary_recipient = { has_strong_hook = scope:actor }
		}
		## And conversely, don't want you to coup scope:recipient if they've already got a strong hook on them.
		modifier = {
			add = -100
			scope:secondary_recipient = { has_strong_hook = scope:recipient }
		}
		## Loyalty hooks stop the AI signing up.
		modifier = {
			add = -1000
			desc = diarch_coup_liege_interaction.tt.liege_has_loyalty_hook
			diarch_loyalty_due_to_hook_trigger = {
				LIEGE = scope:recipient
				DIARCH = scope:secondary_recipient
			}
		}
		# Various.
		## Scope:secondary_recipient generally doesn't want to betray an ally.
		modifier = {
			add = {
				value = -100
				# Reduce the malus a little if also allied to scope:actor.
				if = {
					limit = {
						scope:secondary_recipient = { is_allied_to = scope:actor }
					}
					add = 50
				}
			}
			scope:secondary_recipient = { is_allied_to = scope:recipient }
		}
		## Heirs don't generally want to betray scope:recipient, as they'll lose out.
		modifier = {
			add = -100
			desc = diarch_coup_liege_interaction.tt.heir_will_not_side_against_benefactor
			scope:recipient = {
				any_heir = { this = scope:secondary_recipient }
			}
		}
		# Promises.
		## Weak hook.
		modifier = {
			add = {
				value = 25
				# Multiply this...
				## ... down for folks who wouldn't care...
				if = {
					limit = { has_trait = honest }
					multiply = 0.5
				}
				## ... & and up for those who would.
				if = {
					limit = { has_trait = deceitful }
					multiply = 2
				}
			}
			desc = diarch_coup_liege_interaction.tt.wants_hook
			scope:promise_hook_weak = yes
		}
		## Strong hook.
		modifier = {
			add = {
				value = 50
				# Multiply this...
				## ... down for folks who wouldn't care...
				if = {
					limit = { has_trait = honest }
					multiply = 0.5
				}
				## ... & and up for those who would.
				if = {
					limit = { has_trait = deceitful }
					multiply = 2
				}
			}
			desc = diarch_coup_liege_interaction.tt.wants_strong_hook
			scope:promise_hook_strong = yes
		}
		## Gold.
		modifier = {
			add = {
				value = 25
				# Multiply this...
				## ... down for folks who wouldn't care...
				if = {
					limit = { has_trait = generous }
					multiply = 0.5
				}
				## ... & and up for those who would.
				if = {
					limit = { has_trait = greedy }
					multiply = 2
				}
			}
			desc = diarch_coup_liege_interaction.tt.wants_gold
			scope:promise_gold_medium = yes
		}
		## Lotsa gold.
		modifier = {
			add = {
				value = 50
				# Multiply this...
				## ... down for folks who wouldn't care...
				if = {
					limit = { has_trait = generous }
					multiply = 0.5
				}
				## ... & and up for those who would.
				if = {
					limit = { has_trait = greedy }
					multiply = 2
				}
			}
			desc = diarch_coup_liege_interaction.tt.wants_strong_gold
			scope:promise_gold_large = yes
		}
	}

	# AI
	## The AI doesn't use this interaction automatically - they try it manually upon hitting the required threshold.
}









##################################################
# LIEGE ON DIARCH POWERS

# Liege (actor) transfers vizier's (recipient's) extravagance modifiers into their own gold.
mulct_vizier_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	icon = icon_gold

	desc = mulct_vizier_interaction_desc

	is_shown = {
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			diarch ?= scope:recipient
			# Plus only on viziers.
			has_diarchy_active_parameter = unlock_mulct_vizier_interaction
		}
	}

	is_valid_showing_failures_only = {
		scope:actor = {
			# Some basic checks.
			is_available_adult = yes
			# Shouldn't happen, but just in case.
			NOT = { is_at_war_with = scope:recipient }
		}
		# Must select something.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:mulct_vizier_interaction_minimal = yes
					scope:mulct_vizier_interaction_minor = yes
					scope:mulct_vizier_interaction_medium = yes
					scope:mulct_vizier_interaction_major = yes
					scope:mulct_vizier_interaction_massive = yes
				}
			}
		}
	}

	# Don't squeeze them too often.
	cooldown = { years = 10 }
	
	# Attempt Methods
	send_options_exclusive = yes
	## Minimal.
	### Always show this'un.
	send_option = { flag = mulct_vizier_interaction_minimal }
	## Minor.
	send_option = { flag = mulct_vizier_interaction_minor }
	## Medium.
	send_option = { flag = mulct_vizier_interaction_medium }
	## Major.
	send_option = { flag = mulct_vizier_interaction_major }
	## Massive.
	send_option = { flag = mulct_vizier_interaction_massive }

	can_send = {
		trigger_if = {
			limit = { scope:mulct_vizier_interaction_minor = yes }
			custom_tooltip = {
				text = mulct_vizier_interaction.extravagances_required.t1
				scope:recipient = {
					OR = {
						has_character_modifier = vizier_extravagance_t1_treasure_modifier
						has_character_modifier = vizier_extravagance_t1_activities_modifier
						has_character_modifier = vizier_extravagance_t1_property_modifier
						has_character_modifier = vizier_extravagance_t1_charity_modifier
					}
				}
			}
			custom_tooltip = {
				text = mulct_vizier_interaction.scales_too_swung.tt
				scope:actor.vizier_mulct_swing_check_value >= vizier_mulct_swing_gain_minor_value
			}
		}
		trigger_if = {
			limit = { scope:mulct_vizier_interaction_medium = yes }
			custom_tooltip = {
				text = mulct_vizier_interaction.extravagances_required.t2
				scope:recipient = {
					OR = {
						has_character_modifier = vizier_extravagance_t2_treasure_modifier
						has_character_modifier = vizier_extravagance_t2_activities_modifier
						has_character_modifier = vizier_extravagance_t2_property_modifier
						has_character_modifier = vizier_extravagance_t2_charity_modifier
					}
				}
			}
			custom_tooltip = {
				text = mulct_vizier_interaction.scales_too_swung.tt
				scope:actor.vizier_mulct_swing_check_value >= vizier_mulct_swing_gain_medium_value
			}
		}
		trigger_if = {
			limit = { scope:mulct_vizier_interaction_major = yes }
			custom_tooltip = {
				text = mulct_vizier_interaction.extravagances_required.t3
				scope:recipient = {
					OR = {
						has_character_modifier = vizier_extravagance_t3_treasure_modifier
						has_character_modifier = vizier_extravagance_t3_activities_modifier
						has_character_modifier = vizier_extravagance_t3_property_modifier
						has_character_modifier = vizier_extravagance_t3_charity_modifier
					}
				}
			}
			custom_tooltip = {
				text = mulct_vizier_interaction.scales_too_swung.tt
				scope:actor.vizier_mulct_swing_check_value >= vizier_mulct_swing_gain_major_value
			}
		}
		trigger_if = {
			limit = { scope:mulct_vizier_interaction_massive = yes }
			custom_tooltip = {
				text = mulct_vizier_interaction.extravagances_required.t4
				scope:recipient = {
					OR = {
						has_character_modifier = vizier_extravagance_t4_treasure_modifier
						has_character_modifier = vizier_extravagance_t4_activities_modifier
						has_character_modifier = vizier_extravagance_t4_property_modifier
						has_character_modifier = vizier_extravagance_t4_charity_modifier
					}
				}
			}
			custom_tooltip = {
				text = mulct_vizier_interaction.scales_too_swung.tt
				scope:actor.vizier_mulct_swing_check_value >= vizier_mulct_swing_gain_massive_value
			}
		}
	}

	on_accept = {
		# Sort the gold transfer.
		mulct_vizier_for_cash_effect = { VIZIER = scope:recipient }
		scope:recipient = {
			# How angry is scope:recipient?
			if = {
				limit = { scope:mulct_vizier_interaction_minimal = yes }
				mulct_vizier_for_cash_opinion_reaction_effect = { MULT = 1 }
			}
			if = {
				limit = { scope:mulct_vizier_interaction_minor = yes }
				mulct_vizier_for_cash_opinion_reaction_effect = { MULT = 2 }
			}
			if = {
				limit = { scope:mulct_vizier_interaction_medium = yes }
				mulct_vizier_for_cash_opinion_reaction_effect = { MULT = 3 }
			}
			if = {
				limit = { scope:mulct_vizier_interaction_major = yes }
				mulct_vizier_for_cash_opinion_reaction_effect = { MULT = 4 }
			}
			if = {
				limit = { scope:mulct_vizier_interaction_massive = yes }
				mulct_vizier_for_cash_opinion_reaction_effect = { MULT = 5 }
			}
			# How much stress is this causing them?
			stress_impact = {
				ambitious = major_stress_impact_loss
				arrogant = medium_stress_impact_loss
				generous = minor_stress_impact_loss
				greedy = major_stress_impact_gain
			}
		}

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_vizmulct_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_vizmulct_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_vizmulct_accept_recipient_list }
		}
	}
	
	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 120
	ai_potential = {
		has_active_diarchy = yes
		has_diarchy_parameter = unlock_mulct_vizier_interaction
	}

	ai_will_do = {
		# You generally want to do this if you can.
		base = 100

		# Circumstances.
		## Are we in debt?
		modifier = {
			add = 100
			gold <= -1
		}
		## Are we at war?
		modifier = {
			add = 100
			is_at_war = yes
		}

		# Vizier Extravagances.
		## Are they in the upper tiers?
		modifier = {
			add = 50
			scope:recipient = {
				OR = {
					has_character_modifier = vizier_extravagance_t3_treasure_modifier
					has_character_modifier = vizier_extravagance_t3_activities_modifier
					has_character_modifier = vizier_extravagance_t3_property_modifier
					has_character_modifier = vizier_extravagance_t3_charity_modifier
				}
			}
		}
		## Are they in the uppermost tier?
		modifier = {
			add = 25
			scope:recipient = {
				OR = {
					has_character_modifier = vizier_extravagance_t4_treasure_modifier
					has_character_modifier = vizier_extravagance_t4_activities_modifier
					has_character_modifier = vizier_extravagance_t4_property_modifier
					has_character_modifier = vizier_extravagance_t4_charity_modifier
				}
			}
		}

		# Traits.
		## Greedy characters'll do it whenever they can.
		modifier = {
			add = 50
			has_trait = greedy
		}
		## Generous characters'll only do it occasionally.
		modifier = {
			add = -50
			has_trait = generous
		}

		# Send Option Usage.
		## These teach the AI how to use the send options.
		## These are linear; basically, prefer the largest number you're valid for (since the can_send'll block whatever you can't mulct).
		modifier = {
			add = 1
			scope:mulct_vizier_interaction_minimal = yes
		}
		modifier = {
			add = 2
			scope:mulct_vizier_interaction_minor = yes
		}
		modifier = {
			add = 3
			scope:mulct_vizier_interaction_medium = yes
		}
		modifier = {
			add = 4
			scope:mulct_vizier_interaction_major = yes
		}
		modifier = {
			add = 5
			scope:mulct_vizier_interaction_massive = yes
		}
	}
}










##################################################
# BOTH-WAYS POWERS

# Diarch or liege target their opposite number and inflict negative realm opinion equivalent to the multiplied difference between intrigue or diplomacy in exchange for influence.
scapegoat_counterpart_interaction = {
	category = interaction_category_diarch
	icon = icon_scheme_slander

	desc = scapegoat_counterpart_interaction_desc

	interface_priority = 25

	is_shown = {
		# You must be one of the partners in a diarchy.
		is_in_scapegoating_diarchy_visibility_trigger = { PARAMETER_TYPE = has_diarchy_parameter }
	}

	is_valid_showing_failures_only = {
		# Free adults only: you can't issue this type of decree from prison, and it wouldn't be fair to stop you from slandering a child but let a child slander you.
		scope:actor = {
			is_imprisoned = no
			is_adult = yes
		}
		# And you can't blame a literal child.
		scope:recipient = { is_adult = yes }
		# Nor can you blame the opposing party if you're a deactivated diarch.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch_of_target = scope:recipient }
			}
			diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
		}
		custom_tooltip = {
			text = scapegoat_counterpart_interaction.tt.skill_requirements
			OR = {
				scope:actor.diplomacy > scope:recipient.diplomacy
				scope:actor.intrigue > scope:recipient.intrigue
			}
		}
		is_in_scapegoating_diarchy_visibility_trigger = { PARAMETER_TYPE = has_diarchy_active_parameter }
		# Cannot be at war with each other.
		NOT = {
			scope:actor = { is_at_war_with = scope:recipient }
		}
	}

	cooldown = { years = 3 }

	cost = {
		# Non-ruler diarchs have all the time to do this the slow way.
		prestige = {
			if = {
				limit = {
					scope:actor = { is_ruler = yes }
				}
				value = medium_prestige_value
			}
		}
	}

	# Diplomacy
	## Small amount
	send_option = {
		is_valid = {
			custom_tooltip = {
				text = scapegoat_counterpart_interaction.diplomacy_small.is_valid
				scope:actor.diplomacy > scope:recipient.diplomacy
			}
		}
		flag = diplomacy_small
		localization = scapegoat_counterpart_interaction.diplomacy_small.t
	}
	## Large amount
	send_option = {
		is_valid = {
			custom_tooltip = {
				text = scapegoat_counterpart_interaction.diplomacy_large.is_valid
				scope:actor.diplomacy > scope:recipient.diplomacy
			}
		}
		flag = diplomacy_large
		localization = scapegoat_counterpart_interaction.diplomacy_large.t
	}
	# Intrigue
	## Small amount
	send_option = {
		is_valid = {
			custom_tooltip = {
				text = scapegoat_counterpart_interaction.intrigue_small.is_valid
				scope:actor.intrigue > scope:recipient.intrigue
			}
		}
		flag = intrigue_small
		localization = scapegoat_counterpart_interaction.intrigue_small.t
	}
	## Large amount
	send_option = {
		is_valid = {
			custom_tooltip = {
				text = scapegoat_counterpart_interaction.intrigue_large.is_valid
				scope:actor.intrigue > scope:recipient.intrigue
			}
		}
		flag = intrigue_large
		localization = scapegoat_counterpart_interaction.intrigue_large.t
	}

	on_accept = {
		scope:recipient = {
			# Send out our effects for the diarch.
			if = {
				limit = { is_diarch_of_target = scope:actor }
				trigger_event = diarchy.8041
				every_player = {
					limit = {
						top_liege = scope:actor.top_liege
						NOR = {
							this = scope:actor
							this = scope:recipient
						}
					}
					trigger_event = diarchy.8041
				}
				scapegoat_counterpart_interaction_process_results_effect = {
					REALM_OPINION_ACTOR = add_tyranny
					REALM_OPINION_RECIPIENT = change_strife_opinion
				}
			}
			# And our effects for the liege.
			else = {
				trigger_event = diarchy.8042
				every_player = {
					limit = {
						top_liege = scope:actor.top_liege
						NOR = {
							this = scope:actor
							this = scope:recipient
						}
					}
					trigger_event = diarchy.8042
				}
				scapegoat_counterpart_interaction_process_results_effect = {
					REALM_OPINION_ACTOR = change_strife_opinion
					REALM_OPINION_RECIPIENT = add_tyranny
				}
			}
		}
		# Regardless of what happens, scope:recipient is a bit miffed.
		scope:recipient = {
			add_opinion = {
				target = scope:actor
				modifier = slandered_me_opinion
				opinion = {
					value = scope:multiplied_diff
					divide = -20
					max = -10
				}
			}
		}
		custom_tooltip = scapegoat_counterpart_interaction.tt.infighting_sullies_the_realm
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 12

	ai_potential = {
		OR = {
			# Either they're a liege.
			AND = {
				has_active_diarchy = yes
				# With suitable skill diffs to give some kind of a gain.
				OR = {
					diplomacy_diff = {
						target = diarch
						value >= 5
					}
					intrigue_diff = {
						target = diarch
						value >= 5
					}
				}
			}
			# Or they're the diarch.
			AND = {
				is_diarch = yes
				# With suitable skill diffs to give some kind of a gain.
				OR = {
					diplomacy_diff = {
						target = liege
						value >= 5
					}
					intrigue_diff = {
						target = liege
						value >= 5
					}
				}
				# Loyal diarchs don't engage in skullduggery.
				diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
			}
		}
		# Filter out some traits that would never do this.
		NOR = {
			has_trait = just
			has_trait = honest
			has_trait = loyal
		}
	}

	ai_will_do = {
		base = -50

		# Opinion.
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -2.5
		}
		## Plus weight up a bit further for bad relationships.
		first_valid = {
			# Nemeses.
			modifier = {
				add = 200
				has_relation_nemesis = scope:recipient
			}
			# Rivals.
			modifier = {
				add = 50
				has_relation_rival = scope:recipient
			}
		}
		# Traits.
		## +++ Deceitful
		modifier = {
			add = 30
			has_trait = deceitful
		}
		## +++ Ambitious
		modifier = {
			add = 30
			has_trait = ambitious
		}
		## ++ Arrogant
		modifier = {
			add = 20
			has_trait = arrogant
		}
		## ++ Arbitrary
		modifier = {
			add = 20
			has_trait = arbitrary
		}
		## ++ Vengeful & doesn't like you
		modifier = {
			add = 20
			has_trait = vengeful
			opinion = {
				target = scope:recipient
				value <= -1
			}
		}
		## + Sadistic
		modifier = {
			add = 10
			has_trait = sadistic
		}
		## + Fickle
		modifier = {
			add = 10
			has_trait = fickle
		}
		## + Eccentric
		modifier = {
			add = 10
			has_trait = eccentric
		}
		## + Greedy
		modifier = {
			add = 10
			has_trait = greedy
		}
		## - Generous
		modifier = {
			add = -10
			has_trait = generous
		}
		## -- Compassionate
		modifier = {
			add = -20
			has_trait = compassionate
		}
		## -- Craven
		modifier = {
			add = -20
			has_trait = craven
		}
		## --- Forgiving
		modifier = {
			add = -30
			has_trait = forgiving
		}
		## --- Humble
		modifier = {
			add = -30
			has_trait = humble
		}
		## ---- Content
		modifier = {
			add = -50
			has_trait = content
		}
		## We've already pre-filtered out Honest & Just.
		# Dread.
		## Intimidated.
		modifier = {
			add = -50
			scope:actor = {
				has_dread_level_towards = {
					target = scope:recipient
					level = 1
				}
			}
		}
		## Cowed.
		modifier = {
			add = -100
			scope:actor = {
				has_dread_level_towards = {
					target = scope:recipient
					level = 2
				}
			}
		}
		# Flag Management.
		## Okay, we want to try and pick the larger of either our diplo diff or our intrigue diff.
		### If our diplo diff is higher than our intrigue diff, go for diplo.
		modifier = {
			add = 4
			scope:diplomacy_large = yes
			scapegoat_counterpart_interaction_calc_diplo_diff_treshhold_value >= scapegoat_counterpart_interaction_calc_intrigue_diff_treshhold_value
		}
		### Else, go for intrigue.
		modifier = {
			add = 3
			scope:intrigue_large = yes
		}
		### These two should never trigger, but we've got them here as fallbacks.
		modifier = {
			add = 2
			scope:diplomacy_small = yes
		}
		modifier = {
			add = 1
			scope:intrigue_small = yes
		}
		### And then the AI otherwise doesn't worry about which smaller send option to pick.
		# Influence status.
		## Swimming in influence? Not worth it.
		modifier = {
			factor = 0
			scope:actor.influence >= 500
		}
		## In debt? Weight it up.
		modifier = {
			factor = 2
			scope:actor.influence <= -1
		}
	}
}










##################################################
# MANAGE DIARCHY INTERACTIONS

# Diarch or liege target their opposite number and sink currency to reaffirm their influence in the realm.
swing_scales_currency_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	highlighted_reason = HIGHLIGHTED_CAN_SWING_SCALES
	icon = scroll_scales

	desc = swing_scales_currency_interaction_desc

	interface_priority = 20

	is_shown = {
		# You must be one of the partners in a diarchy.
		OR = {
			scope:actor = { is_diarch_of_target = scope:recipient }
			scope:recipient = { is_diarch_of_target = scope:actor }
		}
	}

	is_valid_showing_failures_only = {
		# Forbid when we're at max swing...
		## ... for the regent.
		trigger_if = {
			limit = {
				scope:actor = { is_diarch_of_target = scope:recipient }
			}
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.scales_max_swung
				scope:recipient.diarchy_swing < 100
			}
		}
		## ... and for the liege.
		trigger_if = {
			limit = {
				NOT = {
					scope:actor = { has_diarchy_active_parameter = liege_may_voluntarily_cede_authority }
				}
				scope:recipient = { is_diarch_of_target = scope:actor }
			}
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.scales_max_swung
				scope:actor.diarchy_swing > 0
			}
		}
		# As long as you're able to give something even vaguely like an order to someone who might advocate on your behalf, you're gucci.
		scope:actor = {
			is_imprisoned = no
			age >= 8
		}
		# Must select something.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:swing_influence = yes
					scope:swing_cede_authority = yes
					scope:swing_prestige = yes
					scope:swing_piety = yes
					scope:swing_gold = yes
					scope:swing_hook = yes
					scope:swing_hof = yes
				}
			}
		}
		# And in the _rare_ circumstance that a diarch is a child, they must be at least this tall.
		## Note that we _don't_ do this for the liege, since we want the player to be able to manage their regency — assume that _someone_ is looking out for the child's best interests.
		scope:actor = {
			trigger_if = {
				limit = {
					is_diarch_of_target = scope:recipient
					is_adult = no
				}
				age >= 8
			}
		}
		# Cannot be at war with each other.
		NOT = {
			scope:actor = { is_at_war_with = scope:recipient }
		}
	}

	cooldown = { years = 2 }

	cost = {
		influence = {
			if = {
				limit = { always = scope:swing_influence }
				value = scope:actor.swing_scales_influence_cost_value
				# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
				if = {
					limit = { scope:actor = { is_valid_for_legitimacy_change = yes } }
					multiply = legitimacy_regent_swing_scale_multipler_value
				}
			}
		}
		prestige = {
			if = {
				limit = { always = scope:swing_prestige }
				value = scope:actor.swing_scales_prestige_cost_value
				# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
				if = {
					limit = { scope:actor = { is_valid_for_legitimacy_change = yes } }
					multiply = legitimacy_regent_swing_scale_multipler_value
				}
			}
		}
		piety = {
			if = {
				limit = {
					OR = {
						always = scope:swing_piety
						always = scope:swing_hof
					}
				}
				value = scope:actor.swing_scales_piety_cost_value
				# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
				if = {
					limit = { scope:actor = { is_valid_for_legitimacy_change = yes } }
					multiply = legitimacy_regent_swing_scale_multipler_value
				}
			}
		}
		gold = {
			if = {
				limit = {
					OR = {
						always = scope:swing_gold
						always = scope:swing_hof
					}
				}
				value = scope:actor.swing_scales_cash_cost_value
				# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
				if = {
					limit = { scope:actor = { is_valid_for_legitimacy_change = yes } }
					multiply = legitimacy_regent_swing_scale_multipler_value
				}
			}
		}
	}

	# Influence
	send_option = {
		is_shown = {
			# Make sure influence would be relevant.
			OR = {
				AND = {
					scope:recipient.liege ?= scope:actor
					scope:actor = { has_government = administrative_government }
				}
				AND = {
					scope:actor.liege ?= scope:recipient
					scope:recipient = { has_government = administrative_government }
				}
			}
		}
		is_valid = {
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		starts_enabled = { scope:actor.influence >= scope:actor.swing_scales_influence_cost_value }
		flag = swing_influence
		localization = SWING_INFLUENCE
		current_description = SWING_INFLUENCE_DESC
	}
	# Cede control voluntarily.
	send_option = {
		is_shown = {
			scope:actor = { has_diarchy_active_parameter = liege_may_voluntarily_cede_authority }
			scope:recipient = { is_diarch_of_target = scope:actor }
		}
		is_valid = {
			# Can't be a liege with the scales swung too far in favour of their diarch.
			custom_tooltip = {
				text = mulct_vizier_interaction.scales_too_swung.tt
				scope:actor.diarchy_swing <= 90
			}
		}
		starts_enabled = { scope:actor.influence >= scope:actor.swing_scales_influence_cost_value }
		flag = swing_cede_authority
		localization = SWING_CEDE_AUTHORITY
		current_description = SWING_CEDE_AUTHORITY_DESC
	}
	# Prestige
	send_option = {
		starts_enabled = { scope:actor.prestige >= scope:actor.swing_scales_prestige_cost_value }
		is_valid = {
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		flag = swing_prestige
		localization = SWING_PRESTIGE
		current_description = SWING_PRESTIGE_DESC
	}
	# Piety
	send_option = {
		is_valid = {
			# You must share a HoF to be able to petition one.
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.no_shared_hof
				# We're also secretly just testing if characters are the same faith.
				OR = {
					scope:actor.faith = scope:recipient.faith
					AND = {
						exists = scope:actor.faith.religious_head
						exists = scope:recipient.faith.religious_head
						scope:actor.faith.religious_head = scope:recipient.faith.religious_head
					}
				}
			}
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		starts_enabled = { scope:actor.piety >= scope:actor.swing_scales_piety_cost_value }
		flag = swing_piety
		localization = SWING_PIETY
		current_description = SWING_PIETY_DESC
	}
	# Gold
	send_option = {
		is_shown = {
			# Filter out for the liege in vizierates - they can mulct the vizier, so we don't give them the chance to spend that gold back.
			interaction_actor_is_liege_with_vizierate_trigger = no
		}
		starts_enabled = { scope:actor.gold >= scope:actor.swing_scales_cash_cost_value }
		is_valid = {
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		flag = swing_gold
		localization = SWING_GOLD
		current_description = SWING_GOLD_DESC
	}
	# Hook
	send_option = {
		starts_enabled = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		flag = swing_hook
		localization = SWING_HOOK
		current_description = SWING_HOOK_DESC
	}
	# HoF
	send_option = {
		is_shown = {
			# Filter out for the liege in vizierates - they can mulct the vizier, so we don't give them the chance to spend that gold back.
			interaction_actor_is_liege_with_vizierate_trigger = no
		}
		is_valid = {
			diarch_swing_scales_valid_shared_hof_trigger = yes
			# Can't be a liege with the scales swung completely towards them.
			trigger_if = {
				limit = {
					scope:recipient = { is_diarch_of_target = scope:actor }
				}
				custom_tooltip = {
					text = swing_scales_currency_interaction.tt.scales_max_swung
					scope:actor.diarchy_swing > 0
				}
			}
		}
		# Top of the prio order for enablement.
		starts_enabled = { diarch_swing_scales_valid_shared_hof_trigger = yes }
		flag = swing_hof
		localization = SWING_HOF
		current_description = SWING_HOF_DESC
	}

	on_accept = {
		# Swing the scales in the direction of scope:actor.
		scope:recipient = {
			# Swing the scales up if we're ceding power.
			if = {
				limit = { scope:swing_cede_authority = yes }
				send_interface_message = {
					type = msg_mandate_results_neutral_effect
					title = swing_scales_interaction_by_liege.t
					right_icon = scope:actor
					scope:actor = {
						# Viziers give you more bang for your buck when swinging against 'em.
						# Perk check for Voyager perk
						if = {
							limit = { 
								has_diarchy_active_parameter = lieges_swing_more_against_diarchs 
								has_perk = power_at_home_perk
								is_travelling = yes
							}
							update_diarchy_swing_with_perspective_effect = {
								SWING = monumental_sop_swing_diarch_gain
								LIEGE = scope:actor
							}
						}
						# Perk or Vizier
						else_if = {
							limit = {
								OR = {
									has_diarchy_active_parameter = lieges_swing_more_against_diarchs 
									AND = {
										has_perk = power_at_home_perk
										is_travelling = yes
									}
								}
							}
							update_diarchy_swing_with_perspective_effect = {
								SWING = massive_sop_swing_diarch_gain
								LIEGE = scope:actor
							}
						}
						# Neither
						else = {
							update_diarchy_swing_with_perspective_effect = {
								SWING = major_sop_swing_diarch_gain
								LIEGE = scope:actor
							}
						}
						diarch_swing_scales_guts_effect = yes
						# Plus, everyone benefits.
						change_influence = {
							value = 200
							# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
							multiply = legitimacy_regent_swing_scale_multipler_value
							round = yes
						}
						scope:recipient = {
							change_influence = {
								value = 200
								# LEGITIMACY OF RULER AFFECTS COSTS FOR REGENTS
								multiply = legitimacy_regent_swing_scale_multipler_value
								round = yes
							}
						}
					}
				}
			}
			# Swing the scales down if this is the liege.
			else_if = {
				limit = { is_diarch_of_target = scope:actor }
				send_interface_message = {
					type = msg_mandate_results_bad_effect
					title = swing_scales_interaction_by_liege.t
					right_icon = scope:actor
					scope:actor = {
						# Viziers give you more bang for your buck when swinging against 'em.
						# Perk check for Voyager perk
						if = {
							limit = { 
								has_diarchy_active_parameter = lieges_swing_more_against_diarchs 
								has_perk = power_at_home_perk
								is_travelling = yes
							}
							update_diarchy_swing_with_perspective_effect = {
								SWING = massive_sop_swing_liege_gain
								LIEGE = scope:actor
							}
						}
						# Perk or Vizier
						else_if = {
							limit = {
								OR = {
									has_diarchy_active_parameter = lieges_swing_more_against_diarchs 
									AND = {
										has_perk = power_at_home_perk
										is_travelling = yes
									}
								}
							}
							update_diarchy_swing_with_perspective_effect = {
								SWING = major_sop_swing_liege_gain
								LIEGE = scope:actor
							}
						}
						# Neither
						else = {
							update_diarchy_swing_with_perspective_effect = {
								SWING = medium_sop_swing_liege_gain
								LIEGE = scope:actor
							}
						}
						diarch_swing_scales_guts_effect = yes
					}
				}
			}
			# And up if this is the diarch.
			else = {
				send_interface_message = {
					type = msg_mandate_results_bad_effect
					title = swing_scales_interaction_by_diarch.t
					right_icon = scope:actor
					if = {
						limit = {
							scope:actor = {
								has_perk = power_at_home_perk
								is_travelling = yes
							}
						}
						update_diarchy_swing_with_perspective_effect = {
							SWING = major_sop_swing_diarch_gain
							LIEGE = scope:recipient
						}
					}
					else = {
						update_diarchy_swing_with_perspective_effect = {
							SWING = medium_sop_swing_diarch_gain
							LIEGE = scope:recipient
						}
					}
					scope:actor = { diarch_swing_scales_guts_effect = yes }
				}
			}
		}
		# Unless you gave power to them, scope:recipient is a bit miffed.
		scope:recipient = {
			# We're actually giving them swing, so gain opinion.
			## We lessen the gains from this over time, as they become more and more entitled.
			if = {
				limit = { scope:swing_cede_authority = yes }
				# Actual gains.
				if = {
					limit = {
						OR = {
							NOT = { has_variable = diarch_authority_ceded }
							var:diarch_authority_ceded < diarch_authority_ceded_opinion_value
						}
					}
					# First, check to see how much opinion we should give.
					save_scope_value_as = {
						name = opinion_gain
						value = {
							value = diarch_authority_ceded_opinion_value
							if = {
								limit = { has_variable = diarch_authority_ceded }
								subtract = var:diarch_authority_ceded
							}
						}
					}
					# Then, adjust the opinion.
					add_opinion = {
						target = scope:actor
						modifier = pleased_opinion
						opinion = scope:opinion_gain
					}
					# And decrease our gain next time.
					increment_variable_effect = {
						VAR = diarch_authority_ceded
						VAL = 5
					}
				}
				# Otherwise, a paltry amount.
				## We're deliberately giving you basically nothing here — the 1 is for comedic effect.
				else = {
					add_opinion = {
						target = scope:actor
						modifier = pleased_opinion
						opinion = 1
					}
				}
			}
			# Co-monarchs are more annoyed.
			else_if = {
				limit = {
					OR = {
						AND = {
							scope:actor = { is_diarch_of_target = scope:recipient }
							scope:recipient = { has_diarchy_active_parameter = diarchy_is_co_rulership }
						}
						AND = {
							scope:recipient = { is_diarch_of_target = scope:actor }
							scope:actor = { has_diarchy_active_parameter = diarchy_is_co_rulership }
						}
					}
				}
				add_opinion = {
					target = scope:actor
					modifier = frustrated_opinion
					opinion = -20
				}
			}
			# Take away a normal amount.
			else = {
				add_opinion = {
					target = scope:actor
					modifier = frustrated_opinion
					opinion = -10
				}
			}
		}
		# Some diarchs might be swinging as a prelude to a coup attempt.
		ai_diarch_check_to_see_if_should_launch_coup_effect = yes

		# Debug & object explorer logging.
		## Diarch swung.
		if = {
			limit = {
				exists = scope:recipient.diarch
				scope:actor = scope:recipient.diarch
			}
			debug_log = debug_log.swing_scales.diarch_swung
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_swung_diarch }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_swung_diarch_list }
			}
		}
		## Else liege swung.
		else = {
			debug_log = debug_log.swing_scales.liege_swung
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_swung_liege }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_swung_liege_list }
			}
		}
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 24

	ai_potential = {
		OR = {
			# Either they're a liege.
			AND = {
				has_active_diarchy = yes
				# With some kind of valid cause to worry.
				OR = {
					# Lieges don't care unless your regency is entrenched _and_ it's looking to stay that way...
					has_diarchy_active_parameter = regency_cant_be_ended_above_this_point
					# ... unless they could get out of it.
					can_leave_diarchy_trigger = yes
				}
			}
			# Or they're the diarch.
			AND = {
				is_diarch = yes
				# Loyal diarchs don't engage in skullduggery.
				diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
			}
		}
	}

	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_secondary_powers_base_value

		# Additions.
		## Flag management.
		### Influence.
		modifier = {
			add = 6
			scope:swing_influence = yes
		}
		### Cede Authority.
		#### Only do this if you're also humble.
		modifier = {
			add = 10
			scope:swing_cede_authority = yes
			has_trait = humble
		}
		### Prestige.
		modifier = {
			add = 2
			scope:swing_prestige = yes
		}
		### Piety.
		modifier = {
			add = 3
			scope:swing_piety = yes
		}
		### Gold.
		modifier = {
			add = 1
			scope:swing_gold = yes
		}
		### Hook.
		modifier = {
			add = 5
			scope:swing_hook = yes
		}
		### HoF - combined Gold/Piety.
		modifier = {
			add = 4
			scope:swing_hof = yes
		}
		# Factors.
		## x0 Don't go into prestige debt!
		modifier = {
			factor = 0
			scope:swing_prestige = yes
			prestige < 0
		}
		## We otherwise take care of these in the ai_potential block, because otherwise the AI interacts very, very weirdly with them.
	}
}

# For titleless diarchs: anyone playable uses the regular interaction.
diarch_swing_scales_currency_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	diarch_interaction = yes
	highlighted_reason = HIGHLIGHTED_CAN_SWING_SCALES
	icon = scroll_scales

	desc = swing_scales_currency_interaction_desc

	interface_priority = 20

	is_shown = {
		scope:recipient = scope:actor.liege
		# This is for landless diarchs only, and we pre-filter them, so we don't really care about this block.
		## But filter out players anyway for that _seamless_ debug play experience.
		scope:actor = { is_ai = yes }
	}

	is_valid_showing_failures_only = {
		# Forbid when we're at max swing.
		scope:recipient = {
			# Plus also weed out some weird errors where we got confused and looked at ourselves.
			has_active_diarchy = yes
			# Now the actual check.
			trigger_if = {
				limit = { has_active_diarchy = yes }
				diarchy_swing < 100
			}
			trigger_else = { always = no }
		}
		# As long as you're able to give something even vaguely like an order to someone who might advocate on your behalf, you're gucci.
		scope:actor = { is_imprisoned = no }
		# And in the _rare_ circumstance that a diarch is a child, they must be at least this tall.
		## Note that we _don't_ do this for the liege, since we want the player to be able to manage their regency — assume that _someone_ is looking out for the child's best interests.
		scope:actor = {
			trigger_if = {
				limit = {
					is_diarch_of_target = scope:recipient
					is_adult = no
				}
				age >= 8
			}
		}
	}

	cooldown = { years = 2 }
	
	cost = {
		influence = {
			if = {
				limit = { always = scope:swing_influence }
				# Diarch version.
				if = {
					limit = {
						scope:actor = { is_diarch_of_target = scope:recipient }
					}
					# Costs should always be applied on the diarch.
					add = scope:actor.swing_scales_influence_cost_value
				}
				# Liege version.
				else = {
					# Costs should always be applied on the diarch.
					add = scope:recipient.swing_scales_influence_cost_value
				}
				# Cost scaling mults.
				multiply = scope:actor.swing_scales_discounts_multiplier_value
			}
		}
		prestige = {
			if = {
				limit = { always = scope:swing_prestige }
				# Diarch version.
				if = {
					limit = {
						scope:actor = { is_diarch_of_target = scope:recipient }
					}
					# Costs should always be applied on the diarch.
					add = scope:actor.swing_scales_prestige_cost_value
				}
				# Liege version.
				else = {
					# Costs should always be applied on the diarch.
					add = scope:recipient.swing_scales_prestige_cost_value
				}
				# Cost scaling mults.
				multiply = scope:actor.swing_scales_discounts_multiplier_value
			}
		}
		piety = {
			if = {
				limit = {
					OR = {
						always = scope:swing_piety
						always = scope:swing_hof
					}
				}
				# Diarch version.
				if = {
					limit = {
						scope:actor = { is_diarch_of_target = scope:recipient }
					}
					# Costs should always be applied on the diarch.
					add = scope:actor.swing_scales_piety_cost_value
				}
				# Liege version.
				else = {
					# Costs should always be applied on the diarch.
					add = scope:recipient.swing_scales_piety_cost_value
				}
				# Cost scaling mults.
				multiply = scope:actor.swing_scales_discounts_multiplier_value
			}
		}
		gold = {
			if = {
				limit = {
					OR = {
						always = scope:swing_gold
						always = scope:swing_hof
					}
				}
				# Diarch version.
				if = {
					limit = {
						scope:actor = { is_diarch_of_target = scope:recipient }
					}
					# Costs should always be applied on the diarch.
					add = scope:actor.swing_scales_cash_cost_value
				}
				# Liege version.
				else = {
					# Costs should always be applied on the diarch.
					add = scope:recipient.swing_scales_cash_cost_value
				}
				# Cost scaling mults.
				multiply = scope:actor.swing_scales_discounts_multiplier_value
			}
		}
	}

	# Influence
	send_option = {
		is_shown = {
			# Make sure influence would be relevant.
			OR = {
				AND = {
					scope:recipient.liege ?= scope:actor
					scope:actor = { has_government = administrative_government }
				}
				AND = {
					scope:actor.liege ?= scope:recipient
					scope:recipient = { has_government = administrative_government }
				}
			}
		}
		starts_enabled = { scope:actor.influence >= scope:actor.swing_scales_influence_cost_value }
		flag = swing_influence
		localization = SWING_INFLUENCE
		current_description = SWING_INFLUENCE_DESC
	}
	# Prestige
	send_option = {
		starts_enabled = { scope:actor.prestige >= scope:actor.swing_scales_prestige_cost_value }
		flag = swing_prestige
		localization = SWING_PRESTIGE
	}
	# Piety
	send_option = {
		is_valid = {
			# You must share a HoF to be able to petition one.
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.no_shared_hof
				# We're also secretly just testing if characters are the same faith.
				OR = {
					scope:actor.faith = scope:recipient.faith
					AND = {
						exists = scope:actor.faith.religious_head
						exists = scope:recipient.faith.religious_head
						scope:actor.faith.religious_head = scope:recipient.faith.religious_head
					}
				}
			}
		}
		starts_enabled = { scope:actor.piety >= scope:actor.swing_scales_piety_cost_value }
		flag = swing_piety
		localization = SWING_PIETY
	}
	# Gold
	send_option = {
		starts_enabled = { scope:actor.gold >= scope:actor.swing_scales_cash_cost_value }
		flag = swing_gold
		localization = SWING_GOLD
	}
	# Hook
	send_option = {
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		starts_enabled = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		flag = swing_hook
		localization = SWING_HOOK
	}
	# HoF
	send_option = {
		is_valid = { diarch_swing_scales_valid_shared_hof_trigger = yes }
		# Top of the prio order for enablement.
		starts_enabled = { diarch_swing_scales_valid_shared_hof_trigger = yes }
		flag = swing_hof
		localization = SWING_HOF
	}

	on_accept = {
		# Swing the scales down, since scope:actor is always a landless diarch.
		scope:recipient = {
			# Slight chance delays may lead to a diarchy ending before this is received.
			if = {
				limit = { has_active_diarchy = yes }
				send_interface_message = {
					type = msg_mandate_results_bad_effect
					title = swing_scales_interaction_by_diarch.t
					right_icon = scope:actor
					update_diarchy_swing_with_perspective_effect = {
						SWING = medium_sop_swing_diarch_gain
						LIEGE = scope:recipient
					}
					scope:actor = { diarch_swing_scales_guts_effect = yes }
				}
			}
			# Scope:recipient is a bit miffed.
			add_opinion = {
				target = scope:actor
				modifier = frustrated_opinion
				opinion = -10
			}
		}
		# Some diarchs might be swinging as a prelude to a coup attempt.
		ai_diarch_check_to_see_if_should_launch_coup_effect = yes

		# Debug logging.
		debug_log = debug_log.swing_scales.diarch_swung
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_swung_diarch }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_swung_diarch_list }
		}
	}

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	# We turn the frequency up higher than the cooldown so that diarchs don't take two years to get into the loop.
	ai_frequency = 6

	ai_potential = {
		# Double check due to some irritating errors.
		is_diarch = yes
		liege = { has_active_diarchy = yes }
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		# We're generally ruthless here.
		base = @ai_core_loop_base_value

		# Additions.
		## Flag management.
		### Influence.
		modifier = {
			add = 6
			scope:swing_influence = yes
		}
		### Prestige.
		modifier = {
			add = 2
			scope:swing_prestige = yes
		}
		### Piety.
		modifier = {
			add = 3
			scope:swing_piety = yes
		}
		### Gold.
		modifier = {
			add = 1
			scope:swing_gold = yes
		}
		### Hook.
		modifier = {
			add = 5
			scope:swing_hook = yes
		}
		### HoF - combined Gold/Piety.
		modifier = {
			add = 4
			scope:swing_hof = yes
		}
		# Factors.
		## x0 Don't go into prestige debt!
		modifier = {
			factor = 0
			scope:swing_prestige = yes
			prestige < 0
		}
	}
}

# Diarch (actor) shifts from a Temporary Regency to an Entrenched Regency.
diarch_entrench_regency_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	diarch_interaction = yes
	highlighted_reason = HIGHLIGHTED_CAN_DIARCH_ENTRENCH_REGENCY
	icon = icon_entrench_regency

	desc = diarch_entrench_regency_interaction_desc

	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			# With the extra consideration that we only want this to appear for Temporary Regencies.
			liege = { has_diarchy_parameter = unlock_entrench_regency_interaction }
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = unlock_entrench_regency_interaction }
		# You must be able to act as diarch.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
	}
	
	on_accept = {
		scope:recipient = {
			# Tell scope:recipient what's up.
			send_interface_toast = {
				type = msg_start_diarchy
				title = diarch_entrench_regency_interaction.tt.recipient_notification
				left_icon = scope:actor
				# Change the diarchy type to entrenched.
				set_diarchy_type = regency
				# Set our power level down a bit, but still higher than entrenched regencies that *start* that way would be.
				set_diarchy_swing = 40
			}
			# Plus scope:recipient probably isn't super happy about this.
			add_opinion = {
				target = scope:actor
				modifier = suspicion_opinion
				opinion = -20
			}
		}
		# Bit o'prestige for your hard work.
		scope:actor = { add_prestige = medium_prestige_gain }

		# Debug logging.
		debug_log = debug_log.entrench_regency.attempt_made
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entrench }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entrench_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entrench_recipient_list }
		}
	}
	
	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 6
	ai_potential = {
		is_diarch = yes
		# Don't entrench for no reason — we want to have a bit of a delay so that the AI can go off travelling or get locked in prison once in a while.
		liege = { years_in_diarchy >= 2 }
	}

	ai_will_do = {
		# You never _don't_ want to do this.
		base = 1000
	}
}

# Diarch (actor) shifts from an Entrenched Regency to Co-Emperorship.
diarch_regent_appoints_self_co_emperor_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	diarch_interaction = yes
	icon = icon_entrench_regency

	desc = diarch_regent_appoints_self_co_emperor_interaction_desc

	popup_on_receive = yes
	pause_on_receive = yes

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = liege
			is_diarch_of_target = liege
			# With the extra consideration that we only want this to appear for those who can actually _have_ co-emperors.
			liege = {
				has_diarchy_parameter = diarch_can_appoint_self_co_emperor
				may_appoint_co_emperors_trigger = yes
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure scope:recipient is the liege.
		custom_tooltip = {
			text = custom_description.tt.must_target_liege
			scope:recipient = scope:actor.liege
		}
		# Diarchs must have unlocked the appropriate power.
		scope:actor.liege = { has_diarchy_active_parameter = diarch_can_appoint_self_co_emperor }
		# You must be able to act as diarch.
		diarch_cannot_be_disabled_trigger = { DIARCH = scope:actor }
	}

	cost = {
		influence = {
			# Rulers pay influence, non-rulers get a freebie (since they otherwise likely won't accrue the requisite influence).
			if = {
				limit = {
					scope:actor = { is_ruler = yes }
				}
				value = 500
			}
			# If we're doing this vs. someone who could leave a regency, it's significantly costlier.
			if = {
				limit = {
					scope:recipient = { regency_for_personal_reasons_trigger = no }
				}
				add = 1000
			}
		}
	}
	
	on_accept = {
		scope:recipient = {
			#TODO_CD_EP3_POLISH; this should really be a letter event rather than just a notification, plus notifications for player governors.
			# Tell scope:recipient what's up.
			send_interface_toast = {
				type = msg_start_diarchy
				title = diarch_regent_appoints_self_co_emperor_interaction.tt.recipient_notification
				left_icon = scope:actor
				# Change the diarchy type to a co-emperorship.
				custom_tooltip = {
					text = diarch_regent_appoints_self_co_emperor_interaction.tt.become_co_emperorship
					set_diarchy_type = co_emperorship
				}
				# Set our power level down a bit, we've just got one helluva prize.
				custom_tooltip = {
					text = diarch_regent_appoints_self_co_emperor_interaction.tt.set_swing
					set_diarchy_swing = diarch_regent_appoints_self_co_emperor_interaction_sop_swing_set_value
				}
				add_legitimacy = minor_legitimacy_loss
			}
			# Plus scope:recipient probably isn't super happy about this.
			add_opinion = {
				target = scope:actor
				modifier = suspicion_opinion
				opinion = -50
			}
		}
		# Notify the player about the price spike.
		if = {
			limit = {
				scope:recipient = { regency_for_personal_reasons_trigger = yes }
			}
			custom_tooltip = diarch_regent_appoints_self_co_emperor_interaction.tt.adults_cost_more
		}
		else = { custom_tooltip = diarch_regent_appoints_self_co_emperor_interaction.children_cost_less }
		# Bit o'prestige for your hard work.
		scope:actor = { add_prestige = medium_prestige_gain }
	}
	
	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 12
	ai_potential = {
		is_diarch = yes
		# Filter us down nice'n'tight.
		liege = { may_appoint_co_emperors_trigger = yes }
		# Loyal diarchs don't engage in skullduggery.
		diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
	}

	ai_will_do = {
		# You never _don't_ want to do this.
		base = 1000
	}
}

# Liege (actor) ends a Temporary Regency.
liege_dismiss_temporary_regency_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	icon = icon_dismiss_temporary_regency

	desc = liege_dismiss_temporary_regency_interaction_desc


	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = diarch
			diarch = scope:recipient
			# With the extra consideration that we only want this to appear for Temporary Regencies.
			has_diarchy_parameter = can_be_instantly_dismissed
		}
	}

	is_valid_showing_failures_only = {
		# Basic requirements must be fulfilled.
		scope:actor = { can_leave_diarchy_trigger = yes }
	}
	
	on_accept = {
		scope:actor = {
			# Tell scope:recipient what's up.
			send_interface_toast = {
				type = event_toast_effect_neutral
				title = liege_dismiss_temporary_regency_interaction.tt.recipient_notification
				left_icon = scope:actor
				# End the diarchy.
				end_diarchy = yes
				scope:recipient = {
					# Bit o'prestige for your hard work.
					if = {
						limit = {
							exists = dynasty
							NOT = {
								exists = scope:actor.dynasty.dynast
								dynasty.dynast = scope:actor.dynasty.dynast
							}
						}
						custom_tooltip = liege_dismiss_temporary_regency_interaction.tt.dynasty_receives_prestige
						hidden_effect = {
							dynasty = { add_dynasty_prestige = liege_dismiss_temporary_regency_interaction_dynasty_prestige_value }
						}
					}
					else = { add_prestige = medium_prestige_gain }
				}
			}
		}

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_dismtemp_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_dismtemp_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_dismtemp_accept_recipient_list }
		}
	}
	
	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 24
	ai_potential = { has_active_diarchy = yes }

	ai_will_do = {
		# You never _don't_ want to do this.
		base = 1000
	}
}

# Liege (actor) moves to end an Entrenched Regency.
liege_dismiss_entrenched_regency_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	notification_text = liege_dismiss_entrenched_regency_interaction_proposal
	icon = icon_dismiss_entrenched_regency

	desc = liege_dismiss_entrenched_regency_interaction_desc

	ai_maybe = yes
	can_send_despite_rejection = yes
	popup_on_receive = yes
	pause_on_receive = yes

	interface_priority = 60
	ai_min_reply_days = 4
	ai_max_reply_days = 9

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			exists = diarch
			diarch = scope:recipient
			# With the extra consideration that we only want this to appear for Entrenched Regencies.
			has_diarchy_parameter = dismissal_requires_gift
		}
	}

	cooldown = { years = 1 }

	is_valid_showing_failures_only = {
		# Basic requirements must be fulfilled.
		scope:actor = { can_leave_diarchy_trigger = yes }
		# And you mustn't be locked in by your regent's power.
		scope:actor = {
			NOT = { has_diarchy_active_parameter = regency_cant_be_ended_above_this_point }
		}
		# Must select something.
		trigger_if = {
			# AI won't exploit and need this exception, as they don't actually open the windows, so they'll be blocked from taking the interaction otherwise.
			limit = {
				scope:actor = { is_ai = no }
			}
			custom_tooltip = {
				text = interactions_general.tt.must_select_one_option
				OR = {
					scope:diarchy_ending_gift_unnecessary = yes
					scope:diarchy_ending_gift_stiffed = yes
					scope:diarchy_ending_gift_hook = yes
					scope:diarchy_ending_gift_dynasty_prestige = yes
					scope:diarchy_ending_gift_piety = yes
					scope:diarchy_ending_gift_cash = yes
				}
			}
		}
	}

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}

	# Ending gifts.
	send_options_exclusive = yes
	## No gift required.
	send_option = {
		flag = diarchy_ending_gift_unnecessary
		current_description = diarchy_ending_gift_unnecessary_desc
		is_shown = {
			scope:actor = {
				NOT = { has_diarchy_active_parameter = regency_free_end_below_this_point }
			}
		}
	}
	## Stiff scope:recipient for opinion loss.
	send_option = {
		flag = diarchy_ending_gift_stiffed
		current_description = diarchy_ending_gift_stiffed_desc
		is_shown = {
			scope:actor = { has_diarchy_active_parameter = regency_free_end_below_this_point }
		}
	}
	## A hook for scope:recipient on scope:actor.
	send_option = {
		flag = diarchy_ending_gift_hook
		current_description = diarchy_ending_gift_hook_desc
		is_shown = {
			scope:recipient = {
				NOT = { has_hook = scope:actor }
			}
		}
	}
	## Transfer some of your prestige into their dynasty prestige.
	send_option = {
		flag = diarchy_ending_gift_dynasty_prestige
		current_description = diarchy_ending_gift_dynasty_prestige_desc
		is_shown = {
			# Filter out characters with no dynasty.
			exists = scope:recipient.dynasty
			# And make sure that they don't share a dynasty.
			trigger_if = {
				limit = { exists = scope:actor.dynasty }
				NOT = {
					scope:actor.dynasty = scope:recipient.dynasty
				}
			}
		}
	}
	## Pray for them to transfer piety.
	### Requires same-HoF.
	send_option = {
		flag = diarchy_ending_gift_piety
		current_description = diarchy_ending_gift_piety_desc
		is_shown = {
			shared_faith_or_hof_trigger = {
				ACTOR = scope:actor
				RECIPIENT = scope:recipient
			}
		}
	}
	## Cash.
	send_option = {
		flag = diarchy_ending_gift_cash
		current_description = diarchy_ending_gift_cash_desc
	}

	on_send = {
		scope:actor = {
			add_character_flag = {
				flag = flag_hostile_actions_disabled_delay
				days = 10
			}
			# Remove the waiting flag.
			add_character_flag = trying_to_dismiss_regent
		}
	}

	on_accept = {
		# End the diarchy.
		scope:actor = { end_diarchy = yes }
		scope:recipient = {
			# Transfer a gift.
			## ... or don't, 'cause one isn't necessary!
			if = {
				limit = { scope:diarchy_ending_gift_unnecessary = yes }
				custom_tooltip = liege_dismiss_entrenched_regency_interaction.tt.no_gift_necessary
			}
			## Give 'em *nothing*, even though they earnt it.
			if = {
				limit = { scope:diarchy_ending_gift_stiffed = yes }
				custom_tooltip = liege_dismiss_entrenched_regency_interaction.tt.stiff_them
				# Scope:recipient is unhappy about this.
				if = {
					limit = { is_ai = yes }
					# More so if they're arrogant, as they take such a smack in the face even more on the proverbial nose.
					if = {
						limit = { has_trait = arrogant }
						add_opinion = {
							target = scope:actor
							modifier = insult_opinion
							opinion = -50
						}
					}
					else = {
						add_opinion = {
							target = scope:actor
							modifier = disappointed_opinion
							opinion = -30
						}
					}
				}
			}
			## Give 'em a hook.
			if = {
				limit = { scope:diarchy_ending_gift_hook = yes }
				# Transfer the hook.
				add_hook = {
					type = favor_hook
					target = scope:actor
				}
				# Plus they're happy.
				if = {
					limit = { is_ai = yes }
					# More so if they're deceitful, since they value favours.
					if = {
						limit = { has_trait = deceitful }
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 30
						}
					}
					else = {
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 15
						}
					}
				}
			}
			## Give 'em some dynasty prestige.
			if = {
				limit = { scope:diarchy_ending_gift_dynasty_prestige = yes }
				scope:actor = { add_prestige = minor_prestige_loss }
				# Transfer the prestige.
				custom_tooltip = liege_dismiss_entrenched_regency_interaction.tt.dynasty_receives_prestige
				hidden_effect = {
					dynasty = { add_dynasty_prestige = liege_dismiss_entrenched_regency_interaction_dynasty_prestige_value }
				}
				# Plus they're happy.
				if = {
					limit = { is_ai = yes }
					# More so if they're the dynasty head, as then they can make use of it.
					if = {
						limit = { dynasty.dynast = scope:recipient }
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 30
						}
					}
					else = {
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 15
						}
					}
				}
			}
			## Give 'em some piety.
			if = {
				limit = { scope:diarchy_ending_gift_piety = yes }
				# Transfer the piety.
				scope:actor = { add_piety = medium_piety_loss }
				add_piety = major_piety_value
				# Plus they're happy.
				if = {
					limit = { is_ai = yes }
					# More so if they're zealous, as zealots like piety.
					if = {
						limit = { has_trait = zealous }
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 30
						}
					}
					else = {
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 15
						}
					}
				}
			}
			## Five 'em cold, hard cash.
			if = {
				limit = { scope:diarchy_ending_gift_cash = yes }
				# Transfer the cash.
				scope:actor = {
					pay_short_term_gold = {
						target = scope:recipient
						gold = major_gold_value
					}
				}
				# Plus they're happy.
				if = {
					limit = { is_ai = yes }
					# More so if they're greedy, 'cause greedy likes money.
					if = {
						limit = { has_trait = greedy }
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 30
						}
					}
					else = {
						add_opinion = {
							target = scope:actor
							modifier = pleased_opinion
							opinion = 15
						}
					}
				}
			}
		}

		# Object explorer logging.
		if = {
			limit = { always = scope:diarchy_ending_gift_unnecessary }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_unnecessary_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_unnecessary_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_unnecessary_accept_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_stiffed }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_stiffed_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_stiffed_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_stiffed_accept_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_hook }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_hook_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_hook_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_hook_accept_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_dynasty_prestige }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_dynpres_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_dynpres_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_dynpres_accept_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_piety }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_piety_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_piety_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_piety_accept_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_cash }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_cash_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_accept_recipient_list }
			}
		}
	}

	on_decline = {
		scope:actor = {
			# Attempting to assert authority pushes scope:actor's scales in their favour.
			update_diarchy_swing_with_perspective_effect = {
				SWING = major_sop_swing_liege_gain
				LIEGE = scope:actor
			}
			# Plus AI don't like being told *no*.
			if = {
				limit = { is_ai = no }
				add_opinion = {
					target = scope:recipient
					modifier = trust_opinion
					opinion = -30
				}
			}
		}
		# Clean-up that pesky flag.
		if = {
			limit = {
				scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
			scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay }
		}
		# And add a _new_ pesky flag to stop 'em doubling up whilst also telling them to try to take this interaction again AQAP.
		## This is to stop the AI from failing to tackle this efficiently.
		scope:actor = {
			if = {
				limit = { is_ai = yes }
				add_character_flag = trying_to_dismiss_regent
				trigger_event = {
					id = diarchy.0111
					days = 366
				}
			}
		}

		# Object explorer logging.
		if = {
			limit = { always = scope:diarchy_ending_gift_stiffed }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_stiffed_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_stiffed_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_stiffed_decline_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_hook }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_hook_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_hook_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_hook_decline_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_dynasty_prestige }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_dynpres_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_dynpres_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_dynpres_decline_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_piety }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_piety_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_piety_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_piety_decline_recipient_list }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_cash }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_cash_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_decline_recipient_list }
			}
		}
	}

	auto_accept = {
		custom_tooltip = {
			text = liege_dismiss_entrenched_regency_interaction.tt.force_ending
			scope:diarchy_ending_gift_unnecessary = yes
		}
	}
	
	ai_accept = {
		# Diarchs don't *want* to agree, by default...
		base = 0

		# ... except loyal ones, who really, really do...
		modifier = {
			add = 100
			desc = liege_dismiss_entrenched_regency_interaction.modifier.desc.loyal_diarch
			diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold
		}
		# ... plus inactive ones, who can't really refuse.
		modifier = {
			add = 50
			desc = liege_dismiss_entrenched_regency_interaction.modifier.desc.is_disabled
			scope:recipient = { is_diarch_able_trigger = no }
		}
		# If you could just end the diarchy without any fuss, then they're much more inclined to agree.
		modifier = {
			add = 1000
			desc = liege_dismiss_entrenched_regency_interaction.modifier.desc.could_freely_dismiss_me
			scope:actor = {
				NOT = { has_diarchy_active_parameter = regency_free_end_below_this_point }
			}
		}
		# Factor for diplomacy.
		## Yours.
		modifier = {
			add = {
				value = scope:actor.diplomacy
				multiply = 2
			}
			desc = INTERACTION_DIPLOMACY_ACTOR
		}
		## Theirs.
		modifier = {
			add = {
				value = scope:recipient.diplomacy
				multiply = -2
			}
			desc = INTERACTION_DIPLOMACY_RECIPIENT
		}
		# Factor for opinion.
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 0.5
			desc = AI_OPINION_REASON
		}
		# Factor for AI personalities.
		ai_value_modifier = {
			ai_honor = 1
			ai_boldness = -0.5
		}
		# Factor for Scales of Power.
		modifier = {
			add = {
				value = scope:actor.diarchy_swing
				# Reduce by 40.
				## 20 is (currently) the node at which things become free, so we want to subtract above this point and invert below it.
				## The extra -20 is so that diarchs are more willing to go in exchange for a gift when their power is ebbing, rather than holding on until they can be discharged without one.
				add = -40
				# Invert it, since scope:actor wants low scales.
				multiply = -1
			}
			desc = INTERACTION_SCALES_OF_POWER
		}
		# Intimidation.
		## Intimidated.
		modifier = {
			add = intimidated_halved_reason_value
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 1
				}
			}
			desc = INTIMIDATED_REASON
		}
		## Cowed.
		modifier = {
			add = cowed_halved_reason_value
			scope:recipient = {
				has_dread_level_towards = {
					target = scope:actor
					level = 2
				}
			}
			desc = COWED_REASON
		}
		# Factor for low grandeur.
		## 1 level below.
		modifier = {
			add = -20
			desc = GRANDEUR_REASON
			has_royal_court = yes
			has_dlc_feature = royal_court
			court_grandeur_current_level <= 1_levels_below_expected_level
			court_grandeur_current_level > 3_levels_below_expected_level
		}
		## 3 levels below.
		modifier = {
			add = -40
			desc = GRANDEUR_REASON
			has_royal_court = yes
			has_dlc_feature = royal_court
			court_grandeur_current_level <= 3_levels_below_expected_level
			court_grandeur_current_level > 5_levels_below_expected_level
		}
		## 5 levels below.
		modifier = {
			add = -60
			desc = GRANDEUR_REASON
			has_royal_court = yes
			has_dlc_feature = royal_court
			court_grandeur_current_level <= 5_levels_below_expected_level
			court_grandeur_current_level > 7_levels_below_expected_level
		}
		## 7 levels below.
		modifier = {
			add = -80
			desc = GRANDEUR_REASON
			has_royal_court = yes
			has_dlc_feature = royal_court
			court_grandeur_current_level <= 7_levels_below_expected_level
			court_grandeur_current_level > 9_levels_below_expected_level
		}
		## 9 levels below.
		modifier = {
			add = -100
			desc = GRANDEUR_REASON
			has_royal_court = yes
			has_dlc_feature = royal_court
			court_grandeur_current_level <= 9_levels_below_expected_level
		}
		# Negative relationships.
		## Rival.
		modifier = {
			add = -50
			desc = offer_vassalization_interaction_aibehavior_rival_tt
			scope:recipient = {
				has_relation_rival = scope:actor
				NOT = { has_relation_nemesis = scope:actor }
			}
		}
		## Nemesis.
		modifier = {
			add = -100
			desc = offer_vassalization_interaction_aibehavior_nemesis_tt
			scope:recipient = { has_relation_nemesis = scope:actor }
		}
		# Plus for whether you're offering a gift and if it's one they need or not.
		## No gift offered.
		### No base-vs.-trait modifier here, as we want arrogant characters to be dramatic little bastards.
		modifier = {
			add = -30
			desc = AI_OPINION_OFFENDED
			scope:diarchy_ending_gift_stiffed = yes
		}
		## Favour.
		### Deceitful variant.
		modifier = {
			add = 60
			desc = liege_dismiss_entrenched_regency_interaction.tt.deceitful_likes_hook
			scope:diarchy_ending_gift_hook = yes
			has_trait = deceitful
		}
		### Base variant.
		modifier = {
			add = 30
			desc = liege_dismiss_entrenched_regency_interaction.tt.offered_gift
			scope:diarchy_ending_gift_hook = yes
			NOT = { has_trait = deceitful }
		}
		## Dynasty Prestige.
		### Dynasty Head variant.
		modifier = {
			add = 60
			desc = liege_dismiss_entrenched_regency_interaction.tt.dynasty_head_likes_dynasty_prestige
			scope:diarchy_ending_gift_dynasty_prestige = yes
			this = dynasty.dynast
		}
		### Base variant.
		modifier = {
			add = 30
			desc = liege_dismiss_entrenched_regency_interaction.tt.offered_gift
			scope:diarchy_ending_gift_dynasty_prestige = yes
			NOT = { this = dynasty.dynast }
		}
		## Piety.
		### Zealous variant.
		modifier = {
			add = 60
			desc = liege_dismiss_entrenched_regency_interaction.tt.zealous_likes_piety
			scope:diarchy_ending_gift_piety = yes
			has_trait = zealous
		}
		### Base variant.
		modifier = {
			add = 30
			desc = liege_dismiss_entrenched_regency_interaction.tt.offered_gift
			scope:diarchy_ending_gift_piety = yes
			NOT = { has_trait = zealous }
		}
		## Cash.
		### Greedy variant.
		modifier = {
			add = 60
			desc = liege_dismiss_entrenched_regency_interaction.tt.greedy_likes_cash
			scope:diarchy_ending_gift_cash = yes
			has_trait = greedy
		}
		### Base variant.
		modifier = {
			add = 30
			desc = liege_dismiss_entrenched_regency_interaction.tt.offered_gift
			scope:diarchy_ending_gift_cash = yes
			NOT = { has_trait = greedy }
		}
		### Also debters like this.
		modifier = {
			add = 60
			desc = PT_AI_IS_IN_DEBT
			scope:diarchy_ending_gift_cash = yes
			debt_level >= 1
		}
	}

	# AI
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 24
	ai_potential = {
		# Are we in a diarchy at all?
		has_active_diarchy = yes
		# Can we leave it?
		can_leave_diarchy_trigger = yes
		# Are we locked into a speed-leave cycle?
		NOT = { has_character_flag = trying_to_dismiss_regent }
	}

	ai_will_do = {
		# You never _don't_ want to do this.
		base = 1000

		# Flag management.
		## Auto-dismiss.
		modifier = {
			add = 10
			scope:diarchy_ending_gift_unnecessary = yes
		}
		## Stiff 'em.
		### If we hate the diarch, try to stiff them till we can dismiss 'em.
		modifier = {
			scope:diarchy_ending_gift_stiffed = yes
			add = 9
			diarch_liege_wants_to_stiff_regent_trigger = yes
		}
		### Otherwise, try to down prio this. It'll just make things harder.
		modifier = {
			scope:diarchy_ending_gift_stiffed = yes
			add = 1
			diarch_liege_wants_to_stiff_regent_trigger = no
		}
		## Hook.
		modifier = {
			add = 4
			scope:diarchy_ending_gift_hook = yes
		}
		## Dynasty Prestige.
		modifier = {
			add = 5
			scope:diarchy_ending_gift_dynasty_prestige = yes
		}
		## Piety.
		modifier = {
			add = 2
			scope:diarchy_ending_gift_piety = yes
		}
		## Cash.
		modifier = {
			add = 3
			scope:diarchy_ending_gift_cash = yes
		}
	}
}

# Liege (actor) dismisses a Vizierate.
liege_dismiss_vizier_interaction = {
	category = interaction_category_diarch
	common_interaction = yes
	icon = icon_dismiss_temporary_regency

	desc = liege_dismiss_vizier_interaction_desc

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Diarchy checks for scope:actor.
		scope:actor = {
			# If you're not in a diarchy, we don't care.
			diarch ?= scope:recipient
			# With the extra consideration that we only want this to appear for Vizierates.
			has_diarchy_parameter = primeminister_dismissal_will_upset_administration
		}
	}

	is_valid_showing_failures_only = {
		# Basic requirements must be fulfilled.
		scope:actor = { can_leave_diarchy_trigger = yes }
	}

	cooldown = { years = 5 }
	
	on_accept = {
		scope:actor = {
			# We've dismissed your vizier!
			## Do we need to give a warning tooltip first?
			if = {
				limit = { has_diarchy_active_parameter = primeminister_dismissal_will_upset_administration }
				custom_tooltip = liege_dismiss_vizier_interaction.tt.problematic_dismissal.vizier_too_entrenched
			}
			## Now apply the real effects.
			send_interface_toast = {
				type = event_toast_effect_neutral
				title = liege_dismiss_vizier_interaction.toast.t
				left_icon = scope:actor
				# Will this have ripple effects (actual)?
				if = {
					limit = { has_diarchy_active_parameter = primeminister_dismissal_will_upset_administration }
					# Apply the modifier, scaling to how much we dun goofed.
					add_character_modifier = {
						modifier = civil_service_in_chaos_modifier
						years = 10
					}
				}
				# End the diarchy.
				end_diarchy = yes
			}
		}
		# How badly do they take it?
		scope:recipient = {
			# Vengeful takes it badly.
			if = {
				limit = {
					has_trait = vengeful
					can_set_relation_rival_trigger = { CHARACTER = scope:actor }
				}
				set_relation_rival = {
					target = scope:actor
					reason = rival_dismissed_me_from_vizierate
				}
				add_opinion = {
					target = scope:actor
					modifier = insult_opinion
					opinion = -50
				}
			}
			# Even if they have something stopping them from becoming a rival (e.g., they're already your vizier).
			else_if = {
				limit = { has_trait = vengeful }
				add_opinion = {
					target = scope:actor
					modifier = insult_opinion
					opinion = -50
				}
			}
			# Forgiving isn't mad, they're just disappointed.
			else_if = {
				limit = { has_trait = forgiving }
				add_opinion = {
					target = scope:actor
					modifier = insult_opinion
					opinion = -10
				}
			}
			# Otherwise, a bit of pain is to be expected.
			else = {
				progress_towards_rival_effect = {
					REASON = rival_dismissed_me_from_vizierate
					CHARACTER = scope:actor
					OPINION = 0
				}
				# Throw the opinion manually so we can keep the type unified.
				add_opinion = {
					target = scope:actor
					modifier = insult_opinion
					opinion = -25
				}
			}
			# Plus some stress.
			stress_impact = {
				lazy = major_stress_impact_loss
				humble = medium_stress_impact_loss
				content = medium_stress_impact_loss
				diligent = medium_stress_impact_gain
				ambitious = major_stress_impact_gain
				arrogant = major_stress_impact_gain
			}
			# Extravagance modifiers taken care of in the on_action.
		}
		# Plus, remember to advertise to the player that there are alternatives.
		## We're deliberately doing this outside of scope:actor so we can make it a lil subtitle rather than something lumped in with the effect block.
		## Just give 'em a duchy.
		if = {
			limit = {
				scope:actor = { has_diarchy_active_parameter = primeminister_requires_duchy }
			}
			custom_tooltip = liege_dismiss_vizier_interaction.tt.problematic_dismissal.bribe.duchy
		}
		## Just give 'em a county.
		else_if = {
			limit = {
				scope:actor = { has_diarchy_active_parameter = primeminister_requires_county }
			}
			custom_tooltip = liege_dismiss_vizier_interaction.tt.problematic_dismissal.bribe.county
		}

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_dismviz_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_dismviz_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_dismviz_accept_recipient_list }
		}
	}
	
	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = diarch }
	ai_frequency = 24
	ai_potential = { has_active_diarchy = yes }

	ai_will_do = {
		# You should actively want to get rid of them.
		base = -25

		# If you appointed this vizier, don't remove them unless you get booted down to county or something.
		modifier = {
			add = -500
			var:my_vizier ?= scope:recipient
		}

		# Realm.
		## Weight up heavily for counts; they shouldn't generally get them, but they don't want to keep them if they do.
		modifier = {
			add = 1000
			highest_held_title_tier = tier_county
		}
		## Weight up for dukes.
		modifier = {
			add = 25
			highest_held_title_tier = tier_duchy
		}
		## Weight down for kings.
		modifier = {
			add = -25
			highest_held_title_tier = tier_kingdom
		}
		## Weight down for emperors.
		modifier = {
			add = -50
			highest_held_title_tier >= tier_empire
		}
		## Realm Size.
		### Smaller you are, the more likely you are to do this.
		### Tiny or less.
		modifier = {
			add = 50
			realm_size <= tiny_realm_size
		}
		### Minor.
		modifier = {
			add = 25
			realm_size > tiny_realm_size
			realm_size <= minor_realm_size
		}
		### Major.
		modifier = {
			add = -25
			realm_size >= major_realm_size
			realm_size < massive_realm_size
		}
		### Massive or more.
		modifier = {
			add = -50
			realm_size >= massive_realm_size
		}

		# Traits.
		## +++ Ambitious.
		modifier = {
			add = 25
			has_trait = ambitious
		}
		## +++ Arrogant.
		modifier = {
			add = 25
			has_trait = arrogant
		}
		## ++ Diligent.
		modifier = {
			add = 15
			has_trait = diligent
		}
		## ++ Patient.
		modifier = {
			add = 15
			has_trait = patient
		}
		## + Gregarious.
		modifier = {
			add = 5
			has_trait = gregarious
		}
		## - Shy.
		modifier = {
			add = -5
			has_trait = shy
		}
		## - Content.
		modifier = {
			add = -5
			has_trait = content
		}
		## -- Impatient.
		modifier = {
			add = -15
			has_trait = impatient
		}
		## -- Content.
		modifier = {
			add = -15
			has_trait = content
		}
		## -- Humble.
		modifier = {
			add = -15
			has_trait = humble
		}
		## --- Greedy.
		modifier = {
			add = -25
			has_trait = greedy
		}
		## --- Lazy.
		modifier = {
			add = -25
			has_trait = lazy
		}
	}
}

# A vassal requests their liege designate them as regent, should the need arise.
declare_me_regent_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent

	desc = declare_me_regent_interaction_desc
	notification_text = DECLARE_ME_REGENT_PROPOSAL

	interface_priority = 20
	ai_min_reply_days = 4
	ai_max_reply_days = 9

	is_shown = {
		# The obvious.
		NOT = { scope:actor = scope:recipient }
		# Only useable on your liege.
		scope:recipient = scope:actor.liege
		# And said-liege can't be in a regency already...
		scope:recipient = { has_active_diarchy = no }
		# ... or have declared you their regent already!
		scope:actor = { is_designated_diarch = no }
		# Can't be used during the Cid story cycle
		scope:actor = { NOT = { has_variable = ongoing_cid_story_cycle } }
	}

	is_valid_showing_failures_only = {
		scope:actor = {
			# Can't do if you're already expected to be regent.
			is_designated_diarch = no
			# Can't be too young.
			is_adult = yes
			# Or imprisoned.
			is_imprisoned = no
			# Or, for that matter, incapable.
			NOT = { has_trait = incapable }
		}
		# Put a general cooldown on this stuff.
		scope:recipient = {
			trigger_if = {
				limit = {
					exists = designated_diarch
				}
				time_after_diarch_designated = { years >= 10 }
			}
		}
	}

	# No general cooldown: if your liege changes, ask away.
	# Long specific cooldown, though. We don't want these going through constantly.
	cooldown_against_recipient = { years = 10 }

	# High cost to reduce spam.
	cost = { prestige = 500 }

	#Use hook
	send_options_exclusive = no
	send_option = {
		is_valid = {
			scope:actor = { has_usable_hook = scope:recipient }
		}
		flag = 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"

	on_accept = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = declare_me_regent_interaction.tt.success
				left_icon = scope:recipient
				# Jump the queue to become diarch.
				scope:recipient = { designate_diarch = scope:actor }
				# This prompts some strife.
				change_strife_opinion = major_strife_gain
			}
			# If you used a hook, calc some extra stuff.
			## We move this outside of the toast because we've not got enough room for all this info in there.
			if = {
				limit = {
					scope:hook = yes
					has_usable_hook = scope:recipient
				}
				# Use the hook up.
				use_hook = scope:recipient
				# Plus scope:recipient is _very_ upset.
				reverse_add_opinion = {
					target = scope:recipient
					modifier = suspicion_opinion
					opinion = -20
				}
			}
		}
		scope:recipient = {
			# Some folks may not be happy.
			custom_tooltip = declare_me_regent_interaction.tt.warning.opinions.succession
			custom_tooltip = declare_me_regent_interaction.tt.warning.opinions.courtlies
		}

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_desigme_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_desigme_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_desigme_accept_recipient_list }
		}
	}

	on_decline = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_bad
				title = declare_me_regent_interaction.tt.failure
				left_icon = scope:recipient
				# AI lose opinion of their opposite number.
				if = {
					limit = { is_ai = yes }
					add_opinion = {
						target = scope:recipient
						modifier = insult_opinion
						opinion = -40
					}
				}
				# Even trying produces some strife.
				change_strife_opinion = medium_strife_gain
			}
		}

		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_desigme_decline }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_desigme_decline_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_desigme_decline_recipient_list }
		}
	}

	auto_accept = {
		scope:recipient = {
			custom_description = {
				text = "spending_hook"
				subject = scope:actor
				object = scope:recipient
				scope:hook = yes
			}
		}
	}

	ai_accept = {
		# Try to make it 0 for most interactions
		base = -40

		# Weight for dislike of current regent.
		# Designated regent.
		modifier = {
			add = {
				# Designated diarchs.
				if = {
					limit = {
						designated_diarch ?= {
							save_temporary_scope_as = diarch_successor_temp
							save_temporary_opinion_value_as = {
								name = recipient_opinion_temp
								target = scope:diarch_successor_temp
							}
						}
					}
					add = scope:recipient_opinion_temp
					# Invert to get the true total.
					multiply = -1
				}
				# Expected diarchs.
				else_if = {
					limit = {
						diarchy_successor ?= {
							save_temporary_scope_as = diarch_successor_temp
							scope:actor = {
								save_temporary_opinion_value_as = {
									name = recipient_opinion_temp
									target = scope:diarch_successor_temp
								}
							}
						}
					}
					add = scope:recipient_opinion_temp
					# Invert to get the true total.
					multiply = -1
				}
			}
			desc = declare_me_regent_interaction.tt.opinion_of_current_regent
		}
		# Opinion of scope:actor.
		opinion_modifier = {
			who = scope:recipient
			opinion_target = scope:actor
			multiplier = 0.5
		}
		# Personality.
		ai_value_modifier = {
			# Meek characters are more likely to accept this.
			ai_boldness = -0.5
			# Characters with low energy just want to avoid all this planning.
			ai_energy = -0.25
		}
		# Familial closeness.
		## Close family get a decent boost.
		modifier = {
			add = 30
			desc = declare_me_regent_interaction.tt.actor_is.close_family
			is_close_family_of = scope:actor
			# Make sure this isn't cancelled out by the incumbent sharing the relation.
			diarchy_successor = {
				NOT = {
					is_close_family_of = scope:recipient
				}
			}
		}
		## Extended family get a minor boost.
		modifier = {
			add = 20
			desc = declare_me_regent_interaction.tt.actor_is.extended_family
			is_extended_family_of = scope:actor
			# Make sure this isn't cancelled out by the incumbent sharing the relation.
			diarchy_successor = {
				NOT = {
					is_extended_family_of = scope:recipient
				}
			}
		}
		## House members get a slight boost.
		modifier = {
			add = 10
			desc = declare_me_regent_interaction.tt.actor_is.house_member
			house = scope:actor.house
			NOT = {
				is_close_or_extended_family_of = scope:actor
			}
			# Make sure this isn't cancelled out by the incumbent sharing the relation.
			diarchy_successor = {
				NOT = {
					house = scope:recipient.house
				}
			}
		}
		# Relationships.
		## Positive.
		modifier = {
			add = 25
			desc = declare_me_regent_interaction.tt.actor_is.positive_relationship
			has_any_good_relationship_with_character_trigger = { CHARACTER = scope:actor }
			# We don't factor for this in the designated/expected diarch 'cause the matrix of overlap'd be hellish.
		}
		## Negative.
		modifier = {
			add = -25
			desc = declare_me_regent_interaction.tt.actor_is.negative_relationship
			has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:actor }
			# We don't factor for this in the designated/expected diarch 'cause the matrix of overlap'd be hellish.
		}
		# Succession score is a direct factor.
		modifier = {
			add = scope:actor.diarchy_regent_succession_score_value
			desc = declare_me_regent_interaction.tt.actor_is.succession_score
		}
	}

	# AI
	ai_targets = { ai_recipients = liege }
	ai_frequency = 150

	ai_potential = {
		# Turning off for the AI for the moment due to not being able to display who you'll offend if you do it.
		## Should otherwise work and can be turned back on again if wished.
		always = no
		# Some traits lock the AI out.
		## Calc these first 'cause they're cheaper.
		NOR = {
			has_trait = lazy
			has_trait = humble
			has_trait = content
		}
		OR = {
			# Driven by traits or personality.
			has_trait = arrogant
			has_trait = ambitious
			# Family think themselves worthy.
			any_close_or_extended_family_member = { this = liege }
		}
	}

	ai_will_do = {
		# Most AI think this is audacious.
		base = 0

		# Weight for personality.
		## Both modifier.
		ai_value_modifier = {
			# Bold, energetic characters fancy the gig.
			ai_boldness = 0.5
			ai_energy = 0.5
		}
		## And traits!
		### These are balanced differently to the other interactions, so it's deliberate that they're not using the @values here.
		### +++ Ambitious.
		modifier = {
			add = 15
			has_trait = ambitious
		}
		### ++ Arrogant.
		modifier = {
			add = 10
			has_trait = arrogant
		}
		### + Diligent.
		modifier = {
			add = 5
			has_trait = diligent
		}
		### + Loyal.
		modifier = {
			add = 5
			has_trait = loyal
		}
		### - Humble.
		modifier = {
			add = -5
			has_trait = humble
		}
		### --- Content.
		modifier = {
			add = -15
			has_trait = content
		}
		### --- Lazy.
		modifier = {
			add = -15
			has_trait = lazy
		}
		# Weight by proximity to the ruler: close family, spouses, etc.
		modifier = {
			add = 25
			OR = {
				any_close_or_extended_family_member = { this = scope:recipient }
				any_spouse = { this = scope:recipient }
			}
		}
		# Councillors have ambitions.
		modifier = {
			add = 25
			is_councillor = yes
		}
		# Weight for opinion of current regent.
		modifier = {
			add = {
				scope:recipient = {
					# Designated diarchs.
					if = {
						limit = {
							designated_diarch ?= {
								save_temporary_scope_as = diarch_successor_temp
								scope:actor = {
									save_temporary_opinion_value_as = {
										name = actor_opinion_temp
										target = scope:diarch_successor_temp
									}
								}
							}
						}
						add = scope:actor_opinion_temp
						# Invert to get the true total.
						multiply = -1
					}
					# Expected diarchs.
					else_if = {
						limit = {
							diarchy_successor ?= {
								save_temporary_scope_as = diarch_successor_temp
								scope:actor = {
									save_temporary_opinion_value_as = {
										name = actor_opinion_temp
										target = scope:diarch_successor_temp
									}
								}
							}
						}
						add = scope:actor_opinion_temp
						# Invert to get the true total.
						multiply = -1
					}
				}
			}
			always = yes
		}
		# The AI will only use a Hook if they couldn't otherwise do this
		modifier = {
			scope:hook = yes
			add = -1
		}
	}
}

# Liege (actor) selects a vizier to help them run the realm.
appoint_vizier_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent

	desc = appoint_vizier_interaction_desc
	interface_priority = 20

	is_shown = {
		scope:actor = {
			# Must be able to retain a vizier.
			government_has_flag = may_appoint_viziers
			# Plus obscure the interaction if we've already got one, else it's annoyingly redundant.
			NOT = { has_diarchy_active_parameter = diarchy_is_vizierate }
		}
		# We perform this upon ourselves or our (probable) candidates.
		scope:recipient = {
			OR = {
				this = scope:actor
				is_courtier_of = scope:actor
				AND = {
					highest_held_title_tier = tier_barony
					liege = scope:actor
				}
			}
		}
	}

	is_valid_showing_failures_only = {
		# You can't already be in a diarchy of any kind.
		scope:actor = {
			has_active_diarchy = no
		}
		# Must be of a decent tier.
		custom_tooltip = {
			text = appoint_vizier_interaction.tt.duchy_or_more
			scope:actor.highest_held_title_tier >= tier_duchy
		}
		# Plus the usuals.
		scope:actor = { is_available_at_peace = yes }
		# And can't have put the realm into turmoil over this recently.
		scope:actor = {
			NOT = { has_character_modifier = civil_service_in_chaos_modifier }
		}
	}

	cooldown = { years = 5 }

	populate_recipient_list = { sort_vizier_candidates_to_list_effect = yes }

	cost = {
		prestige = major_prestige_value
		renown = {
			if = {
				limit = {
					exists = scope:secondary_recipient
					exists = scope:actor.house
					scope:secondary_recipient.house ?= scope:actor.house
				}
				add = massive_dynasty_prestige_value
			}
		}
	}

	auto_accept = yes

	pre_auto_accept = {
		# If we're an AI, set the secondary_recipient up for us.
		scope:actor = {
			if = {
				limit = { is_ai = yes }
				# First, we need to calc who _is_ most qualified; we don't have access to the character list any more, so reassemble it.
				sort_vizier_candidates_to_list_effect = yes
				# Now, parse through the list to find the best character.
				ordered_in_list = {
					list = characters
					order_by = diarchy_vizier_succession_score_value
					save_scope_as = ai_recipient
				}
			}
		}
	}

	on_accept = {
		scope:actor = {
			# We enter into a vizierate with scope:secondary_recipient.
			custom_tooltip = {
				text = appoint_vizier_interaction.tt.enter_vizierate_with_secondary_recipient
				start_diarchy = vizierate
				# The player uses scope:secondary_recipient.
				if = {
					limit = {
						# We use a NOT here  rather than is_ai = no because the AI was occasionally managing to bork its selection process, and the title does _not_ like setting an empty diarch, so we fallback AI who can't behave to a sub-optimal choice.
						NOT = { exists = scope:ai_recipient }
					}
					set_diarch = scope:secondary_recipient
				}
				# Whereas the AI grabs their pre-selected candidate.
				else = {
					set_diarch = scope:ai_recipient
				}
			}
			# Apply opinion.
			## AI.
			if = {
				limit = { exists = scope:ai_recipient }
				scope:ai_recipient = {
					add_opinion = {
						target = scope:actor
						modifier = compliment_opinion
						opinion = 30
					}
					stress_impact = {
						ambitious = minor_stress_impact_loss
						arrogant = minor_stress_impact_loss
						lazy = major_stress_impact_gain
					}
				}
			}
			## Player.
			else = {
				scope:secondary_recipient = {
					add_opinion = {
						target = scope:actor
						modifier = compliment_opinion
						opinion = 30
					}
					stress_impact = {
						ambitious = minor_stress_impact_loss
						arrogant = minor_stress_impact_loss
						lazy = major_stress_impact_gain
					}
				}
			}
			# And get X tax jurisdictions.
			custom_tooltip = appoint_vizier_interaction.tt.secondary_recipient_grants_tax_jurisdictions
			# If scope:secondary_recipient isn't the most qualified candidate, we'll take a scaling negative stewardship modifier.
			## The AI will always pick the highest scoring character, so we only do this for players - lock it off so we're not doing lots of unnecessary calculating.
			if = {
				limit = { is_ai = no }
				# First, we need to calc who _is_ most qualified; we don't have access to the character list any more, so reassemble it.
				sort_vizier_candidates_to_list_effect = yes
				# Now, parse through the list to find the best character.
				ordered_in_list = {
					list = characters
					order_by = diarchy_vizier_succession_score_value
					save_scope_as = best_candidate
				}
				# Is our chap _the_ chap?
				if = {
					limit = {
						NOT = { scope:secondary_recipient = scope:best_candidate }
					}
					# Ok, now display some warnings.
					custom_tooltip = appoint_vizier_interaction.tt.secondary_recipient_is_not_best_candidate
					add_character_modifier = {
						modifier = civil_service_upset_modifier
						years = 10
					}
				}
			}
			# Are they of our house?
			if = {
				limit = {
					exists = scope:secondary_recipient.house
					house ?= scope:secondary_recipient.house
				}
				custom_tooltip = appoint_vizier_interaction.tt.same_house_penalty
			}
			# If we have a designated diarch (and it's not this guy), then they're annoyed.
			designated_diarch ?= {
				if = {
					limit = {
						NOT = { this = scope:secondary_recipient }
					}
					add_opinion = {
						target = scope:actor
						modifier = appointed_vizier_over_designated_regent_opinion
						opinion = -40
					}
				}
			}
			# Set a reminder that we appointed this vizier — the AI'll use this to help with determining whether they should remove them or not.
			set_variable = {
				name = my_vizier
				value = scope:recipient
			}
			# Finally, let's do some stress.
			stress_impact = {
				trusting = massive_stress_impact_loss
				lazy = major_stress_impact_loss
				paranoid = minor_stress_impact_gain
				diligent = minor_stress_impact_gain
			}
		}
		# Notify about council problemos.
		scope:secondary_recipient = {
			if = {
				limit = { is_councillor = yes }
				custom_tooltip = appoint_vizier_interaction.tt.warning.vizier_replace_councillor
			}
		}
		
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_appviz_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appviz_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appviz_accept_recipient_list }
		}
	}

	# AI
	ai_targets = { ai_recipients = self }
	ai_frequency = 240
	
	ai_potential = {
		government_has_flag = may_appoint_viziers
	}
	
	ai_will_do = {
		base = 0

		# Realm.
		## Weight up for kings.
		modifier = {
			add = 50
			highest_held_title_tier = tier_kingdom
		}
		## Weight up for emperors.
		modifier = {
			add = 75
			highest_held_title_tier >= tier_empire
		}
		## Add realm size directly.
		modifier = {
			add = sub_realm_size
			is_landed = yes
		}

		# Traits.
		## +++ Lazy.
		modifier = {
			add = 25
			has_trait = lazy
		}
		## +++ Greedy.
		modifier = {
			add = 25
			has_trait = greedy
		}
		## ++ Humble.
		modifier = {
			add = 15
			has_trait = humble
		}
		## ++ Content.
		modifier = {
			add = 15
			has_trait = content
		}
		## ++ Impatient.
		modifier = {
			add = 15
			has_trait = impatient
		}
		## + Content.
		modifier = {
			add = 5
			has_trait = content
		}
		## + Shy.
		modifier = {
			add = 5
			has_trait = shy
		}
		## - Gregarious.
		modifier = {
			add = -5
			has_trait = gregarious
		}
		## -- Patient.
		modifier = {
			add = -15
			has_trait = patient
		}
		## -- Diligent.
		modifier = {
			add = -15
			has_trait = diligent
		}
		## --- Arrogant.
		modifier = {
			add = -25
			has_trait = arrogant
		}
		## --- Ambitious.
		modifier = {
			add = -25
			has_trait = ambitious
		}
	}
}

# Liege (actor) selects a junior emperor to be their heir.
appoint_junior_emperor_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent
	redirect = {
		scope:recipient = { save_scope_as = secondary_recipient }
		if = {
			limit = { scope:secondary_recipient = scope:actor }
			clear_saved_scope = secondary_recipient
		}
		if = {
			limit = {
				NOT = {
					scope:secondary_recipient ?= { valid_junior_emperor_candidate_trigger = { LIEGE = scope:actor } }
				}
			}
			clear_saved_scope = secondary_recipient
		}
	}

	desc = appoint_junior_emperor_interaction_desc
	interface_priority = 20

	is_shown = {
		# Must be able to retain a co-emperor.
		scope:actor = { may_appoint_co_emperors_trigger = yes }
		# We perform this upon ourselves or our (probable) candidates.
		OR = {
			scope:recipient ?= scope:actor
			scope:secondary_recipient ?= { valid_junior_emperor_candidate_trigger = { LIEGE = scope:actor } }
		}
	}

	is_valid_showing_failures_only = {
		# You can't already be in a diarchy of any kind.
		scope:actor = {
			has_active_diarchy = no
		}
		# Make sure we're targeting the right people, since redirects make this a lil slippery.
		trigger_if = {
			limit = { exists = scope:secondary_recipient }
			scope:secondary_recipient = { valid_junior_emperor_candidate_trigger = { LIEGE = scope:actor } }
		}
		# Plus the usuals.
		scope:actor = { is_available_at_peace = yes }
	}

	populate_recipient_list = { sort_junior_emperor_candidates_to_list_effect = yes }

	cost = {
		prestige = designate_heir_admin_prestige_cost
		influence = designate_heir_admin_influence_cost
	}

	auto_accept = yes

	pre_auto_accept = {
		# If we're an AI, set the secondary_recipient up for us.
		scope:actor = {
			if = {
				limit = { is_ai = yes }
				# First, we need to calc who _is_ most qualified; we don't have access to the character list any more, so reassemble it.
				sort_junior_emperor_candidates_to_list_effect = yes
				# Now, parse through the list to find the best character.
				## And by that I mean play literal favourites.
				ordered_in_list = {
					list = characters
					order_by = "reverse_opinion(scope:actor)"
					save_scope_as = ai_recipient
				}
			}
		}
	}

	on_accept = {
		scope:actor = {
			# We enter into a junior emperorship with scope:secondary_recipient.
			## The player uses scope:secondary_recipient.
			if = {
				limit = {
					# We use a NOT here  rather than is_ai = no because the AI was occasionally managing to bork its selection process, and the title does _not_ like setting an empty diarch, so we fallback AI who can't behave to a sub-optimal choice.
					NOT = { exists = scope:ai_recipient }
				}
				custom_tooltip = {
					text = appoint_junior_emperor_interaction.tt.enter_junior_emperorship_with_secondary_recipient
					start_diarchy = junior_emperorship
					set_diarch = scope:secondary_recipient
				}
				# We set them to be our designated heir.
				## & if we already have an heir, warn that this overwrites it.
				designated_heir ?= {
					if = {
						limit = { this != scope:secondary_recipient }
						custom_tooltip = appoint_junior_emperor_interaction.tt.overwrite_designated_heir
						# Nab them for use further on.
						save_scope_as = old_heir
					}
				}
				## Designate and inform.
				set_designated_heir = scope:secondary_recipient
			}
			## Whereas the AI grabs their pre-selected candidate.
			else = {
				start_diarchy = junior_emperorship
				set_diarch = scope:ai_recipient
				# We set them to be our designated heir.
				## First grabbing the old one for opinions.
				designated_heir ?= {
					if = {
						limit = { this != scope:ai_recipient }
						# Nab them for use further on.
						save_scope_as = old_heir
					}
				}
				## Then overwriting.
				set_designated_heir = scope:ai_recipient
			}
		}
		# And remember who appointed them on scope:recipient.
		grateful_for_appointment_as_co_emperor_effect = yes
		# Your designated heir is _very_ pissed.
		diarch_overwrites_old_designated_heir_apply_opinions_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Your designated regent is also unhappy (probably).
		designated_diarch_overwridden_by_co_ruler_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Make sure we have our co-ruler directly with us.
		## Courtiers are given to us immediately.
		if = {
			limit = {
				scope:secondary_recipient = { is_ruler = no }
			}
			scope:actor = { add_courtier = scope:secondary_recipient }
		}
		## Vassals are retracted.
		if = {
			limit = { scope:secondary_recipient.liege != scope:actor }
			scope:secondary_recipient.liege = {
				add_opinion = {
					target = scope:actor
					modifier = retracted_vassal
				}
			}
			scope:secondary_recipient.liege = {
				add_opinion = {
					target = scope:actor
					modifier = retracted_vassal
				}
			}
			create_title_and_vassal_change = {
				type = revoked
				save_scope_as = change
			}
			scope:secondary_recipient = {
				change_liege = {
					liege = scope:actor
					change = scope:change
				}
			}
			resolve_title_and_vassal_change = scope:change
		}
		
		#TODO_CD_EP3_POLISH; notification event for the relevant parties if they're players.
		#TODO_CD_EP3_POLISH; memories for those involved, plus probably a rivalry reason with at least designated heirs.
		
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_appjunemp_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appjunemp_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appjunemp_accept_recipient_list }
		}
	}

	# AI
	ai_targets = { ai_recipients = children }
	ai_frequency = 60
	
	ai_potential = {
		# Filter us down nice'n'tight.
		may_appoint_co_emperors_trigger = yes
		# Plus rule out any diarchies already on the go.
		has_active_diarchy = no
		# Aaaand finally, the AI won't do this unless they're considering their age and they've got no adult kids.
		age >= 50
		any_child = {
			count = all
			is_adult = no
		}
	}
	
	ai_will_do = {
		# The AI doesn't like doing this without good reason.
		base = -100

		ai_wants_junior_or_co_emperor_modifier = yes
	}
}

# Liege (actor) selects a co-emperor to be their heir/influence farming stooge.
appoint_co_emperor_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent
	redirect = {
		scope:recipient = { save_scope_as = secondary_recipient }
		if = {
			limit = { scope:secondary_recipient ?= scope:actor }
			clear_saved_scope = secondary_recipient
		}
		if = {
			limit = {
				NOT = {
					scope:secondary_recipient ?= { 
						valid_co_emperor_candidate_trigger = { LIEGE = scope:actor }
					}
				}
			}
			clear_saved_scope = secondary_recipient
		}
	}

	desc = appoint_co_emperor_interaction_desc
	interface_priority = 280

	is_shown = {
		# Must be able to retain a co-emperor.
		scope:actor = { may_appoint_co_emperors_trigger = yes }
		# We perform this upon ourselves or our (probable) candidates.
		OR = {
			scope:recipient ?= scope:actor
			scope:secondary_recipient ?= {
				valid_co_emperor_candidate_trigger = { LIEGE = scope:actor }
			}
		}
	}

	is_valid_showing_failures_only = {
		# You can't already be in a diarchy of any kind.
		scope:actor = {
			has_active_diarchy = no
		}
		# Make sure we're targeting the right people, since redirects make this a lil slippery.
		trigger_if = {
			limit = { exists = scope:secondary_recipient }
			scope:secondary_recipient = {
				valid_co_emperor_candidate_trigger = { LIEGE = scope:actor }
			}
		}
		# Plus the usuals.
		scope:actor = { is_available_at_peace = yes }
	}

	populate_recipient_list = { sort_co_emperor_candidates_to_list_effect = yes }

	cost = {
		prestige = designate_heir_admin_prestige_cost
		influence = designate_heir_admin_influence_cost
	}

	auto_accept = yes

	pre_auto_accept = {
		# If we're an AI, set the secondary_recipient up for us.
		scope:actor = {
			if = {
				limit = { is_ai = yes }
				# First, we need to calc who _is_ most qualified; we don't have access to the character list any more, so reassemble it.
				sort_co_emperor_candidates_to_list_effect = yes
				# Now, parse through the list to find the best character.
				## And by that I mean play literal favourites.
				ordered_in_list = {
					list = characters
					order_by = {
						value = "reverse_opinion(scope:actor)"
						# Boost up anyone we're related to by blood or marriage.
						if = {
							limit = {
								OR = {
									is_close_or_extended_family_of = scope:actor
									house ?= scope:actor.house
									any_spouse = { is_close_or_extended_family_of = scope:actor }
								}
							}
							# This means we should _generally_ prefer people who are in with the imperial family, but if we hate them then we boot them down the list even further.
							multiply = 10
						}
					}
					save_scope_as = ai_recipient
				}
			}
		}
	}

	on_accept = {
		scope:actor = {
			# We enter into a co-emperorship with scope:secondary_recipient.
			## The player uses scope:secondary_recipient.
			if = {
				limit = {
					# We use a NOT here  rather than is_ai = no because the AI was occasionally managing to bork its selection process, and the title does _not_ like setting an empty diarch, so we fallback AI who can't behave to a sub-optimal choice.
					NOT = { exists = scope:ai_recipient }
				}
				custom_tooltip = {
					text = appoint_co_emperor_interaction.tt.enter_co_emperorship_with_secondary_recipient
					start_diarchy = co_emperorship
					set_diarch = scope:secondary_recipient
				}
				# If appropriate, we set them to be our designated heir.
				if = {
					limit = {
						scope:secondary_recipient = {
							is_close_or_extended_family_of = scope:actor
							house ?= scope:actor.house
						}
					}
					# & if we already have an heir, warn that this overwrites it.
					designated_heir ?= {
						if = {
							limit = { this != scope:secondary_recipient }
							custom_tooltip = appoint_co_emperor_interaction.tt.overwrite_designated_heir
							# Nab them for use further on.
							save_scope_as = old_heir
						}
					}
					# Designate and inform.
					set_designated_heir = scope:secondary_recipient
				}
			}
			## Whereas the AI grabs their pre-selected candidate.
			else = {
				start_diarchy = co_emperorship
				set_diarch = scope:ai_recipient
				# If appropriate, we set them to be our designated heir.
				if = {
					limit = {
						scope:secondary_recipient = {
							is_close_or_extended_family_of = scope:actor
							house ?= scope:actor.house
						}
					}
					# First grabbing the old one for opinions.
					designated_heir ?= {
						if = {
							limit = { this != scope:secondary_recipient }
							# Nab them for use further on.
							save_scope_as = old_heir
						}
					}
					# Then overwriting.
					set_designated_heir = scope:ai_recipient
				}
			}
		}
		# And remember who appointed them on scope:recipient.
		grateful_for_appointment_as_co_emperor_effect = yes
		# Your designated heir is _very_ pissed.
		diarch_overwrites_old_designated_heir_apply_opinions_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Your designated regent is also unhappy (probably).
		designated_diarch_overwridden_by_co_ruler_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Make sure we have our co-ruler directly with us.
		## Courtiers are given to us immediately.
		if = {
			limit = {
				scope:secondary_recipient = { is_ruler = no }
			}
			scope:actor = { add_courtier = scope:secondary_recipient }
		}
		## Vassals are retracted.
		if = {
			limit = { scope:secondary_recipient.liege != scope:actor }
			scope:secondary_recipient.liege = {
				add_opinion = {
					target = scope:actor
					modifier = retracted_vassal
				}
			}
			create_title_and_vassal_change = {
				type = revoked
				save_scope_as = change
			}
			scope:secondary_recipient = {
				change_liege = {
					liege = scope:actor
					change = scope:change
				}
			}
			resolve_title_and_vassal_change = scope:change
		}

		#TODO_CD_EP3_POLISH; notification event for the relevant parties if they're players.
		#TODO_CD_EP3_POLISH; memories for those involved, plus probably a rivalry reason with at least designated heirs.
		
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_appcoemp_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appcoemp_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appcoemp_accept_recipient_list }
		}
	}

	# AI
	ai_targets = { ai_recipients = children }
	ai_targets = { ai_recipients = vassals }
	ai_frequency = 60
	
	ai_potential = {
		# Filter us down nice'n'tight.
		may_appoint_co_emperors_trigger = yes
		# Plus rule out any diarchies already on the go.
		has_active_diarchy = no
		# Aaaand finally, the AI won't do this unless they're considering their age and they've got adult kids.
		age >= 50
		any_child = { is_adult = yes }
	}
	
	ai_will_do = {
		# The AI doesn't like doing this without good reason.
		base = -100

		ai_wants_junior_or_co_emperor_modifier = yes
	}
}

# Liege (actor) selects one of their children to be their heir & diarch.
appoint_co_monarch_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent
	redirect = {
		scope:recipient = { save_scope_as = secondary_recipient }
		if = {
			limit = { scope:secondary_recipient ?= scope:actor }
			clear_saved_scope = secondary_recipient
		}
		if = {
			limit = {
				NOT = {
					scope:secondary_recipient ?= { is_child_of = scope:actor }
				}
			}
			clear_saved_scope = secondary_recipient
		}
	}

	desc = appoint_co_monarch_interaction_desc
	interface_priority = 20

	is_shown = {
		# Must be able to retain a co-emperor.
		scope:actor = { may_appoint_co_monarchs_trigger = yes }
		# We perform this upon ourselves or our (probable) candidates.
		OR = {
			scope:recipient ?= scope:actor
			scope:secondary_recipient ?= { is_child_of = scope:actor }
		}
	}

	is_valid_showing_failures_only = {
		# You can't already be in a diarchy of any kind.
		scope:actor = {
			has_active_diarchy = no
		}
		# Make sure we're targeting the right people, since redirects make this a lil slippery.
		trigger_if = {
			limit = { exists = scope:secondary_recipient }
			scope:secondary_recipient = { valid_co_monarch_candidate_trigger = { LIEGE = scope:actor } }
		}
		# Plus the usuals.
		scope:actor = { is_available_at_peace = yes }
	}

	populate_recipient_list = { sort_co_monarch_candidates_to_list_effect = yes }

	cost = {
		prestige = {
			value = designate_heir_cost
			# Discount it because this _is_ worse than the standard path.
			multiply = 0.5
		}
	}

	auto_accept = yes

	pre_auto_accept = {
		# If we're an AI, set the secondary_recipient up for us.
		scope:actor = {
			if = {
				limit = { is_ai = yes }
				# First, we need to calc who _is_ most qualified; we don't have access to the character list any more, so reassemble it.
				sort_co_monarch_candidates_to_list_effect = yes
				# Now, parse through the list to find the best character.
				## And by that I mean play literal favourites.
				ordered_in_list = {
					list = characters
					limit = { valid_co_monarch_candidate_trigger = { LIEGE = scope:actor } }
					order_by = "reverse_opinion(scope:actor)"
					save_scope_as = ai_recipient
				}
			}
		}
	}

	on_accept = {
		scope:actor = {
			# We enter into a co-emperorship with scope:secondary_recipient.
			## The player uses scope:secondary_recipient.
			if = {
				limit = {
					# We use a NOT here  rather than is_ai = no because the AI was occasionally managing to bork its selection process, and the title does _not_ like setting an empty diarch, so we fallback AI who can't behave to a sub-optimal choice.
					NOT = { exists = scope:ai_recipient }
				}
				custom_tooltip = {
					text = appoint_co_monarch_interaction.tt.enter_co_monarchy_with_secondary_recipient
					start_diarchy = co_monarchy
					set_diarch = scope:secondary_recipient
				}
				# We set them to be our designated heir.
				## & if we already have an heir, warn that this overwrites it.
				designated_heir ?= {
					if = {
						limit = { this != scope:secondary_recipient }
						custom_tooltip = appoint_co_monarch_interaction.tt.overwrite_designated_heir
						# Nab them for use further on.
						save_scope_as = old_heir
					}
				}
				## Designate and inform.
				set_designated_heir = scope:secondary_recipient
			}
			## Whereas the AI grabs their pre-selected candidate.
			else = {
				start_diarchy = co_emperorship
				set_diarch = scope:ai_recipient
				# We set them to be our designated heir.
				## First grabbing the old one for opinions.
				designated_heir ?= {
					if = {
						limit = { this != scope:secondary_recipient }
						# Nab them for use further on.
						save_scope_as = old_heir
					}
				}
				## Then overwriting.
				set_designated_heir = scope:ai_recipient
			}
		}
		# And remember who appointed them on scope:recipient.
		grateful_for_appointment_as_co_emperor_effect = yes
		# Your designated heir is _very_ pissed.
		diarch_overwrites_old_designated_heir_apply_opinions_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Your designated regent is also unhappy (probably).
		designated_diarch_overwridden_by_co_ruler_effect = {
			LIEGE = scope:actor
			CO_RULER = scope:secondary_recipient
		}
		# Make sure we have our co-ruler directly with us.
		## Courtiers are given to us immediately.
		if = {
			limit = {
				scope:secondary_recipient = { is_ruler = no }
			}
			scope:actor = { add_courtier = scope:secondary_recipient }
		}
		## Vassals are retracted.
		if = {
			limit = { scope:secondary_recipient.liege != scope:actor }
			scope:secondary_recipient.liege = {
				add_opinion = {
					target = scope:actor
					modifier = retracted_vassal
				}
			}
			create_title_and_vassal_change = {
				type = revoked
				save_scope_as = change
			}
			scope:secondary_recipient = {
				change_liege = {
					liege = scope:actor
					change = scope:change
				}
			}
			resolve_title_and_vassal_change = scope:change
		}

		#TODO_CD_EP3_POLISH; notification event for the relevant parties if they're players.
		#TODO_CD_EP3_POLISH; memories for those involved, plus probably a rivalry reason with at least designated heirs.
		
		# Object explorer logging.
		scope:actor = {
			diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_appcomon_accept }
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appcomon_accept_actor_list }
		}
		scope:recipient = {
			diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_appcomon_accept_recipient_list }
		}
	}

	# AI
	ai_targets = { ai_recipients = children }
	ai_frequency = 120
	
	ai_potential = {
		# Filter us down nice'n'tight.
		may_appoint_co_monarchs_trigger = yes
		# Plus rule out any diarchies already on the go.
		has_active_diarchy = no
		# Aaaand finally, the AI won't do this unless they're considering their age and they've got adult kids.
		age >= 50
		any_child = { is_adult = yes }
	}
	
	ai_will_do = {
		# The AI doesn't like doing this without good reason.
		base = -100

		ai_wants_junior_or_co_emperor_modifier = yes
	}
}

# Start a scheme to replace an incumbent regent.
overthrow_regent_scheme_interaction = {
	category = interaction_category_diarch
	icon = icon_declare_me_regent
	ignores_pending_interaction_block = yes

	scheme = overthrow_regent
	desc = overthrow_regent_scheme_interaction_desc

	interface_priority = 20

	is_shown = {
		# Standard setup.
		scope:actor.liege ?= {
			has_active_diarchy = yes
			# You can't overthrow non-regencies. At least not this way.
			has_diarchy_parameter = diarchy_is_regency
		}
		scope:recipient = {
			NOT = { this = scope:actor }
			liege ?= {
				this = scope:actor.liege
				diarch ?= scope:recipient
				NOT = { this = scope:actor }
			}
		}
	}

	is_valid_showing_failures_only = {
		# Make sure you wouldn't just cop out immediately.
		## Disabling is fine, FWIW. You'll de-disable with time.
		scope:actor = { is_diarch_valid_trigger = yes }
		# Have we been vetoed from succession due to politicking?
		custom_tooltip = {
			text = overthrow_regent_scheme_interaction.tt.filtered_due_to_incumbent_politicking
			NOT = { scope:actor.var:diarch_succession_filtered_due_to_incumbents_politicking ?= scope:recipient }
		}
	}

	# Long specific cooldown. If you give up, you should give it a rest 'less things change.
	cooldown_against_recipient = { years = 10 }

	# Scheme Starter Packages
	options_heading = schemes.t.agent_packages
	send_options_exclusive = yes
	## Balanced agents.
	send_option = {
		flag = agent_focus_balance
		current_description = overthrow_regent_scheme_interaction.tt.agent_focus_balance
	}
	## Focused on Success Chance.
	send_option = {
		flag = agent_focus_success
		current_description = overthrow_regent_scheme_interaction.tt.agent_focus_success
	}
	## Focused on Speed.
	send_option = {
		flag = agent_focus_speed
		current_description = overthrow_regent_scheme_interaction.tt.agent_focus_speed
	}
	## Focused on Secrecy.
	send_option = {
		flag = agent_focus_secrecy
		current_description = overthrow_regent_scheme_interaction.tt.agent_focus_secrecy
	}

	on_accept = {
		scope:actor = {
			# Sort some stress stuff.
			overthrow_regent_scheme_interaction_actor_stress_effect = yes
			# And some feedback for starting.
			send_interface_toast = {
				type = event_toast_effect_neutral
				title = overthrow_regent_scheme_interaction.tt.started_scheme
				left_icon = scope:actor
				right_icon = scope:recipient
				# Success.
				if = {
					limit = { scope:agent_focus_success ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = overthrow_regent
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_thug
						AGENT_2 = agent_ambusher
						AGENT_3 = agent_muscle
						# Speed.
						AGENT_4 = agent_footpad
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
				# Speed.
				else_if = {
					limit = { scope:agent_focus_speed ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = overthrow_regent
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Speed.
						AGENT_1 = agent_footpad
						AGENT_2 = agent_tracker
						AGENT_3 = agent_planner
						# Success.
						AGENT_4 = agent_thug
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
				# Secrecy.
				else_if = {
					limit = { scope:agent_focus_secrecy ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = overthrow_regent
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Secrecy.
						AGENT_1 = agent_lookout
						AGENT_2 = agent_lookout
						AGENT_3 = agent_decoy
						# Success.
						AGENT_4 = agent_thug
						# Speed.
						AGENT_5 = agent_footpad
					}
				}
				# Balanced.
				else = {
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = overthrow_regent
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_thug
						AGENT_2 = agent_ambusher
						# Speed.
						AGENT_3 = agent_footpad
						AGENT_4 = agent_planner
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
			}
		}
	}

	auto_accept = yes

	# AI
	ai_targets = {
		ai_recipients = peer_vassals
		ai_recipients = scripted_relations
	}
	ai_frequency = 60

	ai_potential = {
		# Some traits lock the AI out.
		## Calc these first 'cause they're cheaper.
		NOR = {
			has_trait = lazy
			has_trait = humble
			has_trait = content
		}
		OR = {
			# Driven by traits or personality.
			has_trait = arrogant
			has_trait = ambitious
			# Family think themselves worthy.
			any_close_or_extended_family_member = { this = liege }
			# If you're rivals with the current regent, that's a good cause.
			any_relation = {
				type = rival
				is_diarch_of_target = root.liege
			}
		}
	}

	ai_will_do = {
		# Most AI think this is audacious.
		base = -50

		# Opinion Factor
		opinion_modifier = {
			opinion_target = scope:recipient
			multiplier = -1
		}
		# Weight for personality.
		## Both modifier.
		ai_value_modifier = {
			# Bold, energetic characters fancy the gig.
			ai_boldness = 0.5
			ai_energy = 0.5
		}
		## And traits!
		### These are balanced differently to the other interactions, so it's deliberate that they're not using the @values here.
		### +++ Loyal (if current regent is disloyal).
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = loyal
			exists = liege
			scope:recipient = { diarch_loyalty <= diarch_loyalty_visibly_disloyal_threshold }
			diarch_loyalty_score_type_regency_value >= diarch_loyalty_visibly_loyal_threshold
		}
		### +++ Disloyal (if current regent is loyal).
		modifier = {
			add = diarch_ai_desire_plus_3_value
			has_trait = disloyal
			exists = liege
			scope:recipient = { diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold }
			diarch_loyalty_score_type_regency_value >= diarch_loyalty_visibly_disloyal_threshold
		}
		### ++ Ambitious.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = ambitious
		}
		### ++ Arrogant.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = arrogant
		}
		### ++ Deceitful.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			has_trait = deceitful
		}
		### + Diligent.
		modifier = {
			add = diarch_ai_desire_plus_1_value
			has_trait = diligent
		}
		### - Lazy.
		modifier = {
			add = diarch_ai_desire_minus_1_value
			has_trait = lazy
		}
		### -- Honest.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = honest
		}
		### -- Humble.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = humble
		}
		### -- Content.
		modifier = {
			add = diarch_ai_desire_minus_2_value
			has_trait = content
		}
		### --- Disloyal (if current regent is disloyal).
		modifier = {
			add = diarch_ai_desire_minus_3_value
			has_trait = disloyal
			exists = liege
			scope:recipient = { diarch_loyalty <= diarch_loyalty_visibly_disloyal_threshold }
			diarch_loyalty_score_type_regency_value <= diarch_loyalty_visibly_disloyal_threshold
		}
		### --- Loyal (if current regent is loyal).
		#### Also some loyal-adjacent traits that would otherwise cause stress.
		modifier = {
			add = diarch_ai_desire_minus_3_value
			OR = {
				has_trait = loyal
				has_trait = honest
				has_trait = compassionate
				has_trait = just
			}
			exists = liege
			scope:recipient = { diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold }
			diarch_loyalty_score_type_regency_value >= diarch_loyalty_visibly_loyal_threshold
		}
		# Weight by proximity to the ruler: close family, spouses, etc.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			exists = scope:recipient.liege
			OR = {
				any_close_or_extended_family_member = { this = scope:recipient.liege }
				any_spouse = { this = scope:recipient.liege }
			}
		}
		# Councillors have ambitions.
		modifier = {
			add = diarch_ai_desire_plus_2_value
			is_councillor = yes
		}
		# Factors.
		## If relations are near-perfect, we don't want to go plotting, as it'll look weird.
		modifier = {
			factor = 0
			OR = {
				has_any_good_relationship_with_character_trigger = { CHARACTER = scope:recipient }
				opinion = {
					target = scope:recipient
					value >= very_high_positive_opinion
				}
			}
		}
	}
}
