@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

	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.
		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
			}
			liege = {
				has_diarchy_parameter = unlock_diarch_revoke_title_interaction
			}
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			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.
		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
						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_hightier_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_by_tier = {
		barony = 0
		county = 0
		duchy = 6
		kingdom = 6
		empire = 6
		hegemony = 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

	ai_min_reply_days = 4
	ai_max_reply_days = 9

	on_decline_summary = diarch_rebel_or_crime_summary.retract

	is_shown = {
		# The obvious.
		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
			}
			liege = { has_diarchy_parameter = unlock_diarch_retract_vassal_interaction }
			# 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
			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.
		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 = {
					title_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 = {
				title_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 }
				}
			}
		}
	}

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency_by_tier = {
		barony = 0
		county = 0
		duchy = 24
		kingdom = 24
		empire = 24
		hegemony = 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

	ai_min_reply_days = 4
	ai_max_reply_days = 9

	on_decline_summary = diarch_rebel_or_crime_summary.crominal

	is_shown = {
		# The obvious.
		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
			}
			liege = { has_diarchy_parameter = unlock_diarch_imprison_interaction }
			# 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.
		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 = {
			save_scope_as = use_strife_not_tyranny
			imprison_HoF_consequences_effect = yes
			imprison_tyranny_effect = yes
		}
		# Do we want a war or an escape?
		scope:recipient = {
			add_opinion = {
				target = scope:actor
				modifier = attempted_imprisonment_opinion
			}
			# 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 = {
							trigger = {
								scope:actor = {
									is_landed = yes  # consistent with char_interaction.0283
								}
							}
							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 = scope:actor }
				}
				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 }
							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_hightier_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_type = claimant_faction
						faction_is_at_war = yes
						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_recipients = scripted_relations
	}
	ai_frequency_by_tier = {
		barony = 0
		county = 0
		duchy = 12
		kingdom = 12
		empire = 12
		hegemony = 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.
		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
			liege = { has_diarchy_parameter = diarch_can_subsidise_liege_authority }
		}
		# 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 = { government_allows = administrative }
				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_by_tier = {
		barony = 0
		county = 48
		duchy = 24
		kingdom = 24
		empire = 24
		hegemony = 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.
		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
			liege = { has_diarchy_parameter = unlock_adjust_imperial_bureaucracy_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_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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 0
		empire = 24
		hegemony = 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

	is_shown = {
		# The obvious.
		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
			}
			liege = { has_diarchy_parameter = unlock_legal_meddling_interaction }
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			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_by_tier = {
		barony = 0
		county = 0
		duchy = 6
		kingdom = 6
		empire = 6
		hegemony = 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 = {
						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.de_jure_liege ?= {
				this != scope:actor.primary_title.de_jure_liege
			}
		}
		## 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.
		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
			}
			liege = { has_diarchy_parameter = unlock_syphon_treasury_interaction }
		}
		# 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
							NOT = { government_has_flag = government_is_nomadic }
						}
						custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_development_growth
					}
					## Alternatively, herd for nomadic rulers
					else_if = {
						limit = {
							stewardship >= syphon_treasury_stewardship_very_high
							government_has_flag = government_is_nomadic
						}
						custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_herd
					}
					## 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 }
							}
						}
						# Alternatively, for nomadic rulers, we steal some herd
						else_if = {
							limit = { scope:actor.stewardship >= syphon_treasury_stewardship_very_high government_has_flag = government_is_nomadic }
							# Gold transfer was...
							## Very high.
							if = {
								limit = { always = scope:diarch_syphon_treasury_sum_huge }
								scope:recipient = {
									domicile ?= { change_herd = monumental_herd_loss }
								}
							}
							## High.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_large }
								scope:recipient = {
									domicile ?= { change_herd = massive_herd_loss }
								}
							}
							## Medium.
							else_if = {
								limit = { always = scope:diarch_syphon_treasury_sum_medium }
								scope:recipient = {
									domicile ?= { change_herd = major_herd_loss }
								}
							}
							## Low.
							else = {
								scope:recipient = {
									domicile ?= { change_herd = medium_herd_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 = {
										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 = {
										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 = {
										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 = {
										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_by_tier = {
		barony = 0
		county = 24
		duchy = 12
		kingdom = 12
		empire = 12
		hegemony = 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.
		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
			}
			liege = { has_diarchy_parameter = unlock_shift_privileges_interaction }
		}
		# Make sure scope:recipient is suitable.
		scope:recipient = {
			# We only target vassals of the liege...
			liege = scope:actor.liege
			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 }
			tgp_activate_catalyst_against_hegemon_effect = {
				HEGEMON = scope:actor.top_liege
				CATALYST = catalyst_diarch_mandate
			}
		}

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

	auto_accept = yes

	# AI
	ai_targets = { ai_recipients = peer_vassals }
	ai_frequency_by_tier = {
		barony = 0
		county = 0
		duchy = 6
		kingdom = 6
		empire = 6
		hegemony = 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.
		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_by_tier = {
		barony = 0
		county = 48
		duchy = 24
		kingdom = 24
		empire = 24
		hegemony = 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.
		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 = {
				title_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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 0
		empire = 24
		hegemony = 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 = {
					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
		}
	}

	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
			}
		}
		# secondary_recipient is always saved whenever you use it on anyone who isn't yourself or your liege, so we use this fact to validate it after the redirect, otherwise it will show up on every other ruler in the game
		trigger_if = {
			limit = {
				exists = scope:secondary_recipient
			}
			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_has_powerful_families }
			}
			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
					}
				}
				tgp_activate_catalyst_against_hegemon_effect = {
					HEGEMON = scope:actor.top_liege
					CATALYST = catalyst_diarch_mandate
				}
			}
		}
	}

	# 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 = {
			trigger = {
				exists = scope:secondary_recipient # because the secondary_recipient hasn't been chosen when the interaction is initialized
			}
			who = scope:secondary_recipient
			opinion_target = scope:actor
			multiplier = 1
		}
		## Of scope:recipient.
		opinion_modifier = {
			trigger = {
				exists = scope:secondary_recipient
			}
			who = scope:secondary_recipient
			opinion_target = scope:recipient
			multiplier = -0.5
		}
		# Personality.
		## Values.
		ai_value_modifier = {
			trigger = {
				exists = scope:secondary_recipient
			}
			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 = {
			exists = scope:secondary_recipient
			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_by_tier = {
		barony = 0
		county = 0
		duchy = 120
		kingdom = 120
		empire = 120
		hegemony = 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 = {
				tgp_activate_catalyst_against_hegemon_effect = {
					HEGEMON = scope:actor.top_liege
					CATALYST = catalyst_diarch_mandate
				}
				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_by_tier = {
		barony = 0
		county = 36
		duchy = 12
		kingdom = 12
		empire = 12
		hegemony = 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 = { government_allows = administrative }
				}
				AND = {
					scope:actor.liege ?= scope:recipient
					scope:recipient = { government_allows = administrative }
				}
			}
		}
		is_valid = {
			scope:actor = { government_allows = administrative }
			# 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
	}
	# Movement Power
	send_option = {
		starts_enabled = {
			exists = scope:actor.var:movement_power_individual
			scope:actor.var:movement_power_individual >= decent_movement_power_value
		}
		is_shown = {
			scope:actor = {
				government_has_flag = government_is_celestial
				is_diarch_of_target = scope:recipient
			}
			scope:recipient = { government_has_flag = government_is_celestial }
		}
		is_valid = {
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.scales_min_movement_power
				scope:actor.var:movement_power_individual >= medium_movement_power_value
			}
		}
		flag = swing_movement_power
		localization = SWING_MOVEMENT_POWER
		current_description = SWING_MOVEMENT_POWER_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_recipients = diarch
	}
	ai_frequency_by_tier = {
		barony = 0
		county = 48
		duchy = 24
		kingdom = 24
		empire = 24
		hegemony = 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 = 7
			scope:swing_influence = yes
		}
		modifier = {
			add = 6
			scope:swing_movement_power = 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 = { government_allows = administrative }
				}
				AND = {
					scope:actor.liege ?= scope:recipient
					scope:recipient = { government_allows = administrative }
				}
			}
		}
		is_valid = {
			scope:actor = { government_allows = administrative }
		}
		starts_enabled = { scope:actor.influence >= scope:actor.swing_scales_influence_cost_value }
		flag = swing_influence
		localization = SWING_INFLUENCE
		current_description = SWING_INFLUENCE_DESC
	}
	# Movement Power
	send_option = {
		starts_enabled = {
			exists = scope:actor.var:movement_power_individual
			scope:actor.var:movement_power_individual >= decent_movement_power_value
		}
		is_shown = {
			exists = scope:actor.var:movement_power_individual
			scope:actor = {
				government_has_flag = government_is_celestial
				is_diarch_of_target = scope:recipient
				exists = var:movement_power_individual
			}
			scope:recipient = { government_has_flag = government_is_celestial }
		}
		is_valid = {
			custom_tooltip = {
				text = swing_scales_currency_interaction.tt.scales_min_movement_power
				scope:actor.var:movement_power_individual >= medium_movement_power_value
			}
		}
		flag = swing_movement_power
		localization = SWING_MOVEMENT_POWER
		current_description = SWING_MOVEMENT_POWER_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_by_tier = {
		barony = 0
		county = 6
		duchy = 6
		kingdom = 6
		empire = 6
		hegemony = 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.
		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_by_tier = {
		barony = 0
		county = 12
		duchy = 6
		kingdom = 6
		empire = 6
		hegemony = 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.
		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 = {
			# 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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 0
		empire = 12
		hegemony = 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.
		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 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
				right_icon = scope:recipient
				# 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_by_tier = {
		barony = 0
		county = 48
		duchy = 24
		kingdom = 12
		empire = 12
		hegemony = 12
	}
	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.
		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 Entrenched Regencies.
			OR = {
				has_diarchy_parameter = dismissal_requires_gift
				AND = {
					has_diarchy_parameter = dismissal_requires_no_ministry
					tgp_has_access_to_ministry_trigger = no
				}
			}
		}
	}

	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
					scope:diarchy_ending_gift_herd = yes
				}
			}
		}
		custom_tooltip = {
			text = government_is_celestial_tt
			scope:actor = {
				tgp_has_access_to_ministry_trigger = no
			}
		}
	}

	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 }
				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
	}
	## Horse.
	send_option = {
		flag = diarchy_ending_gift_herd
		current_description = diarchy_ending_gift_herd_desc
		is_shown = {
			# Can only pay herd if actor has herd to pay and recipient accepts herd as a currency
			scope:actor = { government_has_flag = government_is_nomadic }
			scope:recipient = { government_has_flag = government_is_nomadic }
		}
	}

	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
						}
					}
				}
			}
			# Herd
			if = {
				limit = { scope:diarchy_ending_gift_herd = yes }
				# Transfer the cash.
				scope:actor = {
						#gold = major_gold_value
					pay_herd = {
						target = scope:recipient
						value = domicile.ten_percent_herd_value
					}
				}
				# Plus they're happy.
				if = {
					limit = { is_ai = yes }
					# More so if they're greedy, 'cause greedy likes money i mean horses.
					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 }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_herd }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_herd_accept }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_accept_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_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 }
			}
		}
		else_if = {
			limit = { always = scope:diarchy_ending_gift_herd }
			scope:actor = {
				diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_herd_decline }
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_decline_actor_list }
			}
			scope:recipient = {
				diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_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
			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_by_tier = {
		barony = 0
		county = 48
		duchy = 24
		kingdom = 12
		empire = 12
		hegemony = 12
	}
	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
		}
		## Herd.
		modifier = {
			add = 5
			scope:diarchy_ending_gift_herd = 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.
		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_by_tier = {
		barony = 0
		county = 120
		duchy = 24
		kingdom = 24
		empire = 24
		hegemony = 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
	filter_tags = { admin_liege }

	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.
		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 = {
			trigger_if = {
				limit = {
					NOT = { has_diarchy_type = grand_secretariat }
				}
				has_active_diarchy = no
			}
			trigger_else = {
				scope:actor = {
					OR = {
						has_title = title:e_minister_grand_marshal
						has_title = title:e_minister_chancellor
						has_title = title:e_minister_censor
					}
				}
			}
		}
		# ... or have declared you their regent already!
		scope:actor = {
			is_designated_diarch = no
			NOR = {
				is_diarch_of_target = scope:recipient
				# Can't be used during the Cid story cycle
				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 }
			is_diarch_valid_trigger = yes
		}
		# 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 = {
					if = {
						limit = {
							has_diarchy_type = grand_secretariat
						}
						if = {
							limit = {
								scope:actor = {
									has_title = title:e_minister_grand_marshal
								}
							}
							add_realm_law = grand_marshal_law
						}
						else_if = {
							limit = {
								scope:actor = {
									has_title = title:e_minister_chancellor
								}
							}
							add_realm_law = grand_chancellor_law
						}
						else_if = {
							limit = {
								scope:actor = {
									has_title = title:e_minister_censor
								}
							}
							add_realm_law = grand_censor_law
						}
						scope:actor = {
							set_variable = {
								name = asked_to_be_secretary_director
								value = yes
							}
						}
					}
					else = {
						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 = {
				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
			scope:recipient = {
				NOT = { has_diarchy_type = grand_secretariat }
			}
		}

		# Grand Secretariat
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			scope:actor.top_participant_group:dynastic_cycle ?= {
				exists = var:movement_favored
	 		}
	 		desc = diarch_candidate_score.grand_secretariat.favored_value
			add = 20
		}
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			scope:actor = {
				is_any_movement_leader = yes
	 		}
	 		desc = you_are_a_movement_leader_desc_value
			add = 20
		}
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			scope:actor = {
				is_in_pro_hegemon_or_hegemon_movement = yes
	 		}
	 		desc = diarch_candidate_score.grand_secretariat.pro_hegemon_value
			add = 20
		}
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			scope:actor = {
				has_court_position = favored_minister_court_position
			}
			desc = grand_secretariat_aptitude.favored_minister_value
			add = 20
		}
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			desc = actors_merit_level_desc
			add = {
				if = {
					limit = {
						scope:actor.merit_level >= scope:actor.top_liege.diarch.merit_level
						scope:actor.merit >= scope:actor.top_liege.merit
					}
					add = 10
				}
				else = {
					add = -10
				}
			}
		}
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			desc = ACTOR_HIGH_MOVEMENT_POWER
			add = {
				if = {
					limit = {
						exists = scope:actor.top_liege.diarch.var:movement_power
						exists = scope:actor.var:movement_power
				 		scope:actor.var:movement_power >= scope:actor.top_liege.diarch.var:movement_power
					}
					add = 10
				}
				else = {
					add = -40
				}
			}
		}
		# Events
		modifier = {
			add = 25
			desc = tgp_power_undermined_modifier_tt
			has_character_modifier = tgp_power_undermined_modifier
			# We don't factor for this in the designated/expected diarch 'cause the matrix of overlap'd be hellish.
		}
	}

	# AI
	#ai_targets = { ai_recipients = liege }
	#ai_frequency = 0
	#
	#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
		}
		# Grand Secretariat
		modifier = {
			scope:recipient = {
				has_diarchy_type = grand_secretariat
			}
			add = {
				if = {
	 				limit = {
			 			scope:actor.top_participant_group:dynastic_cycle ?= {
				 			exists = var:movement_favored
		 				}
		 			}
					add = 10
				}
				if = {
					limit = {
						scope:actor = {
							has_court_position = favored_minister_court_position
						}
					}
					add = 20
				}
				if = {
	 				limit = {
	 					scope:actor.merit_level >= scope:actor.top_liege.diarch.merit_level
	 					scope:actor.merit >= scope:actor.top_liege.merit
		 			}
					add = 10
				}
				if = {
					limit = {
						exists = scope:actor.top_liege.diarch.var:movement_power
						exists = scope:actor.var:movement_power
					}
					if = {
		 				limit = {
				 			scope:actor.var:movement_power >= scope:actor.top_liege.diarch.var:movement_power
			 			}
						add = 10
					}
					else = {
						add = -100
					}
				}
			}
		}
	}
}

# 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.
		trigger_if = {
			limit = {
				exists = scope:secondary_recipient
			}
			scope:secondary_recipient = {
				is_valid_basic_candidate_for_vizier_trigger = yes
				OR = {
					is_courtier_of = scope:actor
					AND = {
						highest_held_title_tier = tier_barony
						liege = scope:actor
					}
				}
			}
		}
		trigger_else = {
			scope:recipient = {
				this = 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 }

	redirect = {
		if = {
			limit = { scope:recipient != scope:actor }
			scope:recipient = { save_scope_as = secondary_recipient }
			scope:actor = { save_scope_as = recipient }
		}
	}

	cost = {
		prestige = major_prestige_value
		renown = {
			if = {
				limit = {
					exists = scope:secondary_recipient
					exists = scope:actor.house
					scope:secondary_recipient.house ?= scope:actor.house
				}
				add = scope:actor.dynasty.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
				try_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 = {
						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 = {
						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_by_tier = {
		barony = 0
		county = 0
		duchy = 240
		kingdom = 120
		empire = 120
		hegemony = 120
	}

	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
					try_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 = {
				try_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:secondary_recipient = { NOT = { is_in_the_same_court_as = scope:actor } }
			}
			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
		}




		# 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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 0
		empire = 60
		hegemony = 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
					try_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 = {
				try_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 = { NOT = { is_in_the_same_court_as = 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
		}




		# 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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 0
		empire = 60
		hegemony = 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
					try_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 = {
				try_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:secondary_recipient = { NOT = { is_in_the_same_court_as = scope:actor } }
			}
			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
		}




		# 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_by_tier = {
		barony = 0
		county = 0
		duchy = 0
		kingdom = 120
		empire = 120
		hegemony = 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 = {
			this != scope:actor
			liege ?= {
				this = scope:actor.liege
				diarch ?= scope:recipient
				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_by_tier = {
		barony = 0
		county = 120
		duchy = 60
		kingdom = 60
		empire = 60
		hegemony = 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
				}
			}
		}
	}
}
