code:
#be aware that the actual granting of the title happens in code!
grant_titles_interaction = {

	category = interaction_category_vassal
	common_interaction = yes

	desc = grant_titles_interaction_desc

	special_interaction = grant_titles_interaction
	interface = grant_titles
	target_type = title
	target_filter = actor_domain_titles
	interface_priority = 60

	# actor character giving the titles
	# recipient character receiving the titles

	is_shown = {
		NOT = { scope:actor = scope:recipient }
		scope:actor = {
			NOT = {
				government_has_flag = government_is_landless_adventurer
			}
		}
		scope:recipient = {
			OR = {
				target_is_liege_or_above = scope:actor
				is_pool_guest_of = scope:actor
				AND = {
					scope:actor.faith.religious_head = scope:recipient
					is_independent_ruler = yes
				}
			}
		}
		trigger_if = {
			limit = {
				scope:actor = { government_allows = administrative }
			}
			scope:recipient = { NOT = { government_allows = administrative } }
		}
		trigger_if = {
			limit = {
				scope:actor = { government_has_flag = government_is_nomadic }
			}
			scope:recipient = { NOT = { government_has_flag = government_is_herder } }
		}
	}

	is_valid_showing_failures_only = {
		scope:recipient = {
			custom_tooltip = {
				text = can_be_granted_titles_interaction_tt
				OR = {
					can_be_granted_titles_by = { RULER = scope:actor }
					can_be_granted_theocratic_titles_by = { RULER = scope:actor }
					AND = {
						is_diarch_of_target = scope:actor
						scope:actor = { has_diarchy_active_parameter = diarchy_is_co_rulership }
					}
				}
			}
			NOT = { is_at_war_with = scope:actor }
			NOT = { has_trait = devoted } # Monks are disinherited, and should not have land granted to them
			carn_can_be_granted_titles_trigger = yes
			bp2_valid_for_standard_interactions_trigger = yes
			is_busy_in_events_localised = yes
			trigger_if = {
				limit = { is_ruler = no }
				is_imprisoned = no
			}
			# DON'T TAKE OTHER PLAYERS' ACCLAIMED KNIGHTS
			custom_description = {
				text = grant_title_stealing_acclaimed_knight
				subject = scope:recipient
				NOR = {
					AND = {
						is_acclaimed = yes
						liege ?= {
							is_ai = no
							NOT = { this = scope:actor }
						}
					}
					AND = {
						is_acclaimed = yes
						scope:actor = { is_ai = yes }
					}
				}
			}
			# Gallivanters won't accept additional responsibilities.
			NOT = { has_trait = gallivanter }
		}
		custom_description = {
			text = is_not_theocratic_court_chaplain
			subject = scope:recipient
			NAND = {
				scope:actor.faith = {
					has_doctrine = doctrine_theocracy_temporal
				}
				scope:recipient = {
					faith = {
						has_doctrine = doctrine_theocracy_temporal
					}
					has_council_position = councillor_court_chaplain
				}
				NOT = { scope:actor.faith.religious_head = scope:recipient }
			}
		}
		scope:actor = {
			any_held_title = {
				count > 1
			}
		}
	}

	can_send = {
		trigger_if = {
			limit = {
				scope:actor = {
					highest_held_title_tier >= tier_kingdom
					has_diarchy_active_parameter = primeminister_requires_duchy
					diarch = scope:recipient
				}
			}
			custom_tooltip = {
				text = primeminister_requires_duchy.tt.blocked_grant
				any_in_list = {
					list = target_titles
					tier >= tier_duchy
				}
			}
		}
	}

	can_be_picked_title = {
		scope:target = {
			is_leased_out = no

			trigger_if = {
				limit = { is_noble_family_title = yes }
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_CANT_GIVE_NOBLE_FAMILY
					always = no
				}
			}

			trigger_if = {
				limit = {
					scope:actor = {
						NOT = {
							has_government = nomad_government
						}
					}
					title_province = {
						OR = {
							has_holding_type = nomad_holding
							has_holding_type = herder_holding
						}
					}
					scope:recipient = {
						is_ruler = no
					}
				}
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_CANT_GIVE_NOMADIC_TITLES_TO_NON_NOMADS_TITLE
					always = no
				}
			}

			trigger_if = {
				limit = { is_nomad_title = yes }
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_CANT_GIVE_NOMAD_TITLE
					always = no
				}
			}

			trigger_if = {
				limit = {
					is_head_of_faith = yes
					NOT = {
						scope:recipient.faith.religious_head = scope:actor.faith.religious_head
					}
				}
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_CANT_HEAD_OF_FAITH_TO_INFIDEL
					scope:recipient.faith.religious_head = scope:actor.faith.religious_head
				}
			}

			trigger_if = {
				limit = {
					scope:recipient = scope:actor.player_heir
					scope:actor = { has_partition_succession_realm_law_trigger = yes }
				}
				custom_description = {
					text = partition_primary_heir_unfair
					subject = scope:recipient
					current_heir = scope:recipient
				}
			}
			trigger_if = {
				limit = { scope:target = title:k_fashion }
				NOT = { scope:target = title:k_fashion }
			}
		}

		custom_description = {
			text = grant_titles_interaction_can_only_give_diarch_de_jure_liege_to_diarch
			subject = scope:actor.diarch
			NAND = {
				# Only applies if we have an active diarchy.
				scope:actor = { has_active_diarchy = yes }
				# Now, prevent us from giving away our diarch's land to invalidate them...
				scope:target = {
					any_dejure_vassal_title_holder = { this = scope:actor.diarch }
					# ... _unless_ we're giving it _to_ the diarch.
					NOT = { scope:recipient = scope:actor.diarch }
					# Plus we only care if the title is below our tier.
					tier < scope:actor.highest_held_title_tier
				}
			}
		}

		custom_description = {
			text = grant_titles_interaction_children_not_allowed_temple
			subject = scope:recipient
			NOR = {
				AND = {
					scope:recipient = {
						is_adult = no
					}
					scope:target = {
						tier = tier_barony
						title_province = { has_building_with_flag = temple }
					}
				}
				AND = {
					scope:recipient = {
						is_adult = no
					}
					scope:target = {
						tier = tier_county

						title_province = {
							is_county_capital = yes
							has_building_with_flag = temple
						}
					}
				}
			}
		}

		custom_description = {
			text = grant_titles_interaction_title_being_wagered
			NOT = {
				scope:target = { has_variable = wagered_county }
			}
		}
	}

	auto_accept = yes

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

	on_accept = {
		if = {
			limit = {
				scope:actor = {
					government_has_flag = government_is_nomadic
					vassal_limit_available <= 0
					is_independent_ruler = yes
					scope:recipient = {
						NOT = { is_vassal_of = scope:actor }
					}
				}
			}
			custom_tooltip = grant_title_nomad_and_at_vassal_limit
		}
		scope:recipient = {
			add_character_flag = {
				flag = domicile_culture_and_faith_check
				days = 1
			}
		}
		if = {
			limit = {
				scope:recipient = {
					is_acclaimed = yes
					liege = {
						this = scope:actor
					}
				}
				scope:target = {
					tier > tier_barony
				}
			}
			custom_tooltip = grant_title_landing_acclaimed_knight_warning
		}
		scope:recipient = {
			if = {
				limit = {
					is_independent_ruler = yes
					save_temporary_scope_as = recipient_is_independent
				}
			}
			if = {
				limit = {
					NOT = {
						has_relation_friend = scope:actor
					}
				}
				if = {
					# then verify the right struggle phase
					limit = {
						is_diff_faith_or_culture_trigger = {
							CHAR = scope:actor
							STATUS = involved
						}
						any_character_struggle = {
							involvement = involved
							has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_to_leads_to_friendship
						}
					}
					progress_towards_friend_effect = {
						REASON = friend_granted_title
						CHARACTER = scope:actor
						OPINION = 0
					}
				}
			}
		}

		if = {
			limit = {
				OR = {
					any_in_list = {
						list = target_titles
						tier = tier_county
						culture = scope:recipient.culture
						NOR = {
							culture = scope:actor.culture
							recent_history = {
								type = granted
								years = 10
							}
						}
					}
					any_in_list = {
						list = target_titles
						tier >= tier_duchy
						title_capital_county = {
							NOT = { culture = scope:actor.culture }
							culture = scope:recipient.culture
						}
						NOT = {
							recent_history = {
								type = granted
								years = 10
							}
						}
					}
				}
			}
			scope:recipient.culture = {
				change_cultural_acceptance = {
					target = scope:actor.culture
					value = grant_title_cultural_acceptance_impact
					desc = cultural_acceptance_gain_granted_title
				}
			}
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier = tier_county
				}
				scope:actor.culture = { has_cultural_parameter = grants_to_lowborns_bonuses }
				scope:recipient = {
					is_lowborn = yes
				}
			}
			every_in_list = {
				list = target_titles
				limit = { tier = tier_county }
				change_county_control = 30
			}
			scope:recipient = {
				add_trait = peasant_leader
			}
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier >= tier_county
				}
				scope:actor.culture = { has_cultural_parameter = landing_house_members_give_prestige }
				exists = scope:actor.house
				exists = scope:recipient.house
				scope:actor.house = scope:recipient.house
			}
			scope:actor = {
				add_prestige = {
					value = 0
					every_in_list = {
						list = target_titles
						limit = { tier = tier_empire }
						add = massive_prestige_gain
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_kingdom }
						add = major_prestige_gain
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_duchy }
						add = medium_prestige_gain
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_county }
						add = minor_prestige_gain
					}
				}
			}
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier >= tier_county
				}
				scope:actor.culture = { has_cultural_parameter = landing_house_members_gives_renown }
				exists = scope:actor.house
				exists = scope:recipient.house
				scope:actor.house = scope:recipient.house
			}
			scope:actor.dynasty = {
				add_dynasty_prestige = {
					value = 0
					every_in_list = {
						list = target_titles
						limit = { tier = tier_empire }
						add = prev.massive_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_kingdom }
						add = prev.major_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_duchy }
						add = prev.medium_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_county }
						add = prev.minor_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
				}
			}
		}

		# Iterate over all given titles
		#  - Add opinion modifiers
		#  - Collect titles that discontent reduction can later be derived from
		every_in_list = {
			list = target_titles
			save_temporary_scope_as = this_title
			if = {
				limit = {
					exists = scope:landed_title
				}
				scope:recipient = {
					if = {
						limit = {
							scope:this_title.tier = tier_barony
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_barony
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}

					else_if = {
						limit = {
							scope:this_title.tier = tier_county
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_county
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									if = {
										limit = {
											is_ai = no
										}
										every_vassal = {
											limit = {
												has_vassal_stance = courtly
											}
											add_opinion = {
												target = scope:actor
												modifier = courtly_lowborn_grant_opinion
												opinion = -5
											}
										}
									}
									else = { # Can't really stop the AI from landing lowborns, so throttle it a bit so that great conquerors don't annihilate their opinion
										random = {
											chance = 25
											every_vassal = {
												limit = {
													has_vassal_stance = courtly
												}
												add_opinion = {
													target = scope:actor
													modifier = courtly_lowborn_grant_opinion
													opinion = -5
												}
											}
										}
									}
								}
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}

					else_if = {
						limit = {
							scope:this_title.tier = tier_duchy
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_duchy
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									every_vassal = {
										limit = {
											has_vassal_stance = courtly
										}
										add_opinion = {
											target = scope:actor
											modifier = courtly_lowborn_grant_opinion
											opinion = -20
										}
									}
								}
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}

					else_if = {
						limit = {
							scope:this_title.tier = tier_kingdom
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_kingdom
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									every_vassal = {
										limit = {
											has_vassal_stance = courtly
										}
										add_opinion = {
											target = scope:actor
											modifier = courtly_lowborn_grant_opinion
											opinion = -50
										}
									}
								}
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}

					else_if = {
						limit = {
							scope:this_title.tier = tier_empire
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_empire
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									every_vassal = {
										limit = {
											has_vassal_stance = courtly
										}
										add_opinion = {
											target = scope:actor
											modifier = courtly_lowborn_grant_opinion
											opinion = -5
										}
									}
								}
							}
							if = {
								limit = {
									is_a_faction_member = yes
								}
								add_joined_faction_discontent = -60
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}
				}

				#Promised a vassal this title they had a claim on (vassal.2901)
				if = {
					limit = {
						scope:actor = {
							exists = var:was_promised_title
							var:was_promised_title = scope:recipient
						}
					}
					if = {
						limit = {
							scope:recipient = {
								exists = var:promised_title
							}
							scope:landed_title = scope:recipient.var:promised_title
						}
						scope:actor = {
							trigger_event = {
								id = vassal.2910
								days = { 7 14 }
							}
						}
					}
				}
			}
			if = {
				limit = {
					scope:recipient = {
						has_trait = bastard
					}
				}
				custom_tooltip = grant_title_to_bastard_dynasty_warning
			}
		} # every_in_list

		# The accumulated discontent reduction of the recipient
		scope:recipient = {
			if = {
				limit = {
					is_a_faction_member = yes
				}
				add_joined_faction_discontent = grant_title_opinion_sum_discontent_calc
			}
		}

		# Viziers may be booted from their job.
		scope:actor = {
			if = {
				limit = {
					# Assuming this is relevant at all.
					diarch ?= scope:recipient
					# And that scope:actor can do without a supervisor atm.
					can_leave_diarchy_trigger = yes
					# Aaaaand that their diarchy supports this type of thing.
					OR = {
						has_diarchy_parameter = primeminister_requires_county
						has_diarchy_parameter = primeminister_requires_duchy
					}
				}
				# Is this a duchy?
				if = {
					limit = {
						any_in_list = {
							list = target_titles
							tier >= tier_duchy
						}
					}
					custom_tooltip = grant_titles_interaction.tt.primeminister_title_grant.duchy_sufficient
					end_diarchy = yes
				}
				# Is this a county?
				else_if = {
					limit = {
						any_in_list = {
							list = target_titles
							tier = tier_county
						}
					}
					# Is that insufficient?
					if = {
						limit = { has_diarchy_active_parameter = primeminister_requires_duchy }
						custom_tooltip = grant_titles_interaction.tt.primeminister_title_grant.county_insufficient
					}
					# Is that sufficient?
					else = {
						custom_tooltip = grant_titles_interaction.tt.primeminister_title_grant.county_sufficient
						end_diarchy = yes
					}
				}
				# Is this a barony?
				else_if = {
					limit = {
						any_in_list = {
							list = target_titles
							count = all
							tier = tier_barony
						}
					}
					custom_tooltip = grant_titles_interaction.tt.primeminister_title_grant.barony_doesnt_end
				}
			}
		}

		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier = tier_empire
				}
			}
			custom_tooltip = grant_title_modifier_stack_empires
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier = tier_kingdom
				}
			}
			custom_tooltip = grant_title_modifier_stack_kingdoms
		}
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					tier = tier_duchy
				}
			}
			custom_tooltip = grant_title_modifier_stack_duchies
		}
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					tier = tier_county
				}
			}
			custom_tooltip = grant_title_modifier_stack_counties
		}
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					tier = tier_barony
				}
			}
			custom_tooltip = grant_title_modifier_stack_baronies
		}
		if = {
			limit = {
				trigger_if = {
					limit = { scope:actor = { is_ai = yes } }
					scope:actor = {
						any_vassal = {
							has_vassal_stance = courtly
						}
					}
				}
				scope:recipient = {
					is_lowborn = yes
				}
				any_in_list = {
					list = titles_to_grant
					tier >= tier_county
				}
			}
			custom_tooltip = grant_title_modifier_courtly_lowborn_grant_penalty
		}
		if = {
			limit = {
				scope:recipient = { is_a_faction_member = yes }
			}
			custom_tooltip = grant_title_modifier_stack_discontent
		}

		# Jealousy check
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					any_claimant = { grant_title_rivalry_trigger = yes }
				}
			}
			hidden_effect = {
				random = {
					chance = 25
					ordered_in_list = {
						list = titles_to_grant
						limit = {
							any_claimant = { grant_title_rivalry_trigger = yes }
						}
						order_by = tier
						save_scope_as = claim_title
						ordered_claimant = {
							limit = { grant_title_rivalry_trigger = yes }
							order_by = primary_title.tier
							save_scope_as = claim_vassal
							if = {
								limit = {
									scope:recipient = { is_lowborn = yes }
								}
								scope:recipient = { save_scope_as = lowborn_scope }
							}
							else_if = {
								limit = {
									scope:recipient = { has_claim_on = scope:claim_title }
								}
								scope:recipient = { save_scope_as = claimant_scope }
							}
							scope:actor = {
								trigger_event = {
									id = bp1_yearly.8070
									days = 5
								}
							}
						}
					}
				}
			}
		}

		#Stress impact
		scope:actor = {
			if = {
				limit = {
					any_in_list = {
						list = target_titles
						trigger_if = {
							limit = { tier = tier_barony }
							title_province.barony = {
								has_wrong_holding_type = no
							}
						}
						count >= 1
					}
				}

				# Generous characters enjoy giving away titles
				if = {
					limit = {
						has_trait = generous
					}
					add_stress = generous_title_grant_value
				}

				# Gnostics lose stress for giving away titles.
				if = {
					limit = {
						scope:actor = {
							faith = {
								has_doctrine_parameter = granting_titles_gives_stress
							}
						}
					}
					scope:actor = {
						add_stress = {
							value = 0

							# Base stress value scaled on title tier.
							every_in_list = {
								list = target_titles

								add = {
									value = 0

									if = {
										limit = { this.tier = tier_county }
										add = minor_stress_loss # 10 base
									}
									else_if = {
										limit = { this.tier = tier_duchy }
										add = {
											value = medium_stress_loss
											multiply = 1.25 # 25 base
										}
									}
									else_if = {
										limit = { this.tier = tier_kingdom }
										add = {
											value = major_stress_loss
											multiply = 2 # 80 base
										}
									}
									else_if = {
										limit = { this.tier = tier_empire }
										add = {
											value = monumental_stress_loss
											multiply = 2 # 200 base
										}
									}

									# Lose more stress for giving away titles of your primary tier; lose less stress for giving away titles far below your primary in tier.
									multiply = {
										value = this.tier
										add = 1
										divide = scope:actor.primary_title.tier
									}

									# Round to the nearest multiple of 5.
									divide = 5
									round = yes
									multiply = 5

									# For a Duke, this will be x1.25 for Duchies (-30) and x1 for Counties(-10)
									# For a King, this will be x1.25 for a Kingdom (-100), x1 for a Duchy (-25) and x0.75 for Counties(-10)
									# For an Emperor, this will be x1.25 for an Empire(-200), x1 for a Kingdom(-80), x0.75 for a Duchy(-20) and x0.4 for a Counties (-5)
								}
							}
						}
					}
				}

				# Greedy & ambitious ruler gain stress for giving away titles if they would normally be able to keep them.
				if = {
					limit = {
						# Pre-filter
						OR = {
							has_trait = greedy
							has_trait = ambitious
						}
						domain_size <= domain_limit # Not over my domain limit
						any_in_list = {
							list = target_titles
							tier <= tier_county # At least 1 selected title counts toward domain limit
						}

						# Special exemption for lieges who are over their held duchy limit, which are giving away that duchy (and associated counties) specifically
						trigger_if = {
							limit = {
								has_too_many_held_duchies_trigger = yes
							}
							NOT = {
								# Granting at least 1 duchy
								any_in_list = {
									list = target_titles
									title_counts_towards_too_many_duchies_trigger = yes
									save_temporary_scope_as = granted_duchy

									# All counties being granted are De Jure part of the duchy that is being granted
									any_in_list = {
										list = target_titles
										count = all
										trigger_if = {
											limit = { tier = tier_county}
											de_jure_liege = scope:granted_duchy
										}
									}
								}
							}
						}
					}
					# Actual stress gain effects
					if = {
						limit = {
							domain_size = domain_limit
						}
						stress_impact = {
							greedy = minor_stress_impact_gain
							ambitious = minor_stress_impact_gain
						}
					}
					else_if = {
						limit = {
							domain_size < domain_limit
						}
						stress_impact = {
							greedy = medium_stress_impact_gain
							ambitious = medium_stress_impact_gain
						}
					}
				}
			}

			# Maintenance for runestones
			if = {
				limit = {
					# Use expanded version if we have FP1.
					has_fp1_dlc_trigger = yes
					fp1_remove_stele_new_holder_trigger = {
						TITLE = scope:target
						PREVIOUS_HOLDER = scope:actor
						NEW_HOLDER = scope:recipient
					}
				}
				# Actually removed in fp1_other_decisions.0113
				custom_tooltip = runestone_grant_title_warning
			}
			else_if = {
				limit = {
					scope:target = {
						exists = var:ancestor_to_bury
						has_county_modifier = county_raised_runestone_modifier
					}
					NOT = { scope:recipient.dynasty = var:ancestor_to_bury.dynasty } #We only have to change something if the new holder is of a different dynasty
				}
				# Actually removed in religious_decision.0312
				custom_tooltip = runestone_grant_title_warning
			}

			if = {
				limit = {
					exists = scope:actor.dynasty
					scope:actor.dynasty = {
						has_dynasty_perk = ep1_culture_legacy_3
					}
					scope:recipient = {
						is_playable_character = no
						NOT = {
							culture = scope:actor.culture
						}
						any_in_list = {
							list = target_titles
							OR = {
								tier = tier_county
								tier = tier_barony
							}
							culture = scope:recipient.culture
						}
					}
				}
				scope:actor = {
					if = {
						limit = {
							can_add_hook = {
								target = scope:recipient
								type = favor_hook
							}
						}
						add_hook = {
							type = favor_hook
							target = scope:recipient
						}
					}
				}
			}

			#Feedback for actor
			hidden_effect = {
				if = {
					limit = {
						government_has_flag = government_is_nomadic
						vassal_limit_available <= 0
						is_independent_ruler = yes
						scope:recipient = {
							NOT = { is_vassal_of = scope:actor }
						}
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_7
					}
				}
				else_if = {
					limit = {
						any_in_list = {
							list = target_titles
							count = 1
							NOT = { tier = scope:actor.highest_held_title_tier }
						}
						NOT = { exists = scope:recipient_is_independent }
						scope:recipient = {
							any_held_title = {
								tier > tier_barony
								NOT = {
									is_in_list = target_titles
								}
							}
						}
					}
					random_in_list = {
						list = target_titles
						save_temporary_scope_as = loc_title
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_2
						if = {
							limit = {
								exists = dynasty
								is_diff_faith_or_culture_trigger = {
									CHAR = scope:recipient
									STATUS = involved
								}
								any_character_struggle = {
									involvement = involved
									has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_gives_prestige

								}
							}
							dynasty = {
								add_dynasty_prestige = minor_dynasty_prestige_gain
							}

						}
					}
				}
				else_if = {
					limit = {
						any_in_list = {
							list = target_titles
							count > 1
							NOT = { tier = scope:actor.highest_held_title_tier }
						}
						NOT = { exists = scope:recipient_is_independent }
						scope:recipient = {
							any_held_title = {
								tier > tier_barony
								NOT = {
									is_in_list = target_titles
								}
							}
						}
					}
					random_in_list = {
						list = target_titles
						save_temporary_scope_as = loc_title
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_3
					}
				}
				else_if = {
					limit = {
						exists = scope:recipient_is_independent
					}

					random_in_list = {
						list = target_titles
						save_temporary_scope_as = loc_title
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_6
					}
				}
				else_if = {
					limit = {
						scope:recipient = {
							any_in_list = { #Became independent from you, but still have the same liege
								list = target_titles
								tier = scope:actor.highest_held_title_tier
							}
							top_liege = scope:actor.top_liege
						}
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_5
					}
				}
				else_if = {
					limit = {
						scope:recipient = {
							any_in_list = { #Became independent
								list = target_titles
								tier = scope:actor.highest_held_title_tier
							}
						}
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect_4
					}
				}
				else = {
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_titles_interaction_notification

						left_icon = scope:actor
						right_icon = scope:recipient

						custom_tooltip = grant_titles_interaction_notification_effect
					}
				}
			}
		}

		hidden_effect = {
			# Struggle Catalyst
			if = {
				limit = {
					scope:actor = {
						is_diff_faith_or_culture_trigger = {
							CHAR = scope:recipient
							STATUS = involved
						}
						any_character_struggle = {
							involvement = involved
							activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
								CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal
								CHAR = scope:recipient
							}
						}
					}
				}
				scope:actor = {
					every_character_struggle = {
						involvement = involved
						limit = {
							activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
								CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal
								CHAR = scope:recipient
							}
						}
						activate_struggle_catalyst = {
							catalyst = catalyst_grant_privilege_to_diff_faith_culture_vassal
							character = scope:actor
						}
					}
				}
			}
		}

		# Achievements.
		scope:actor = {
			if = {
				limit = {
					has_variable_list = candidate_a_knights_tale_achievement
					is_target_in_variable_list = {
						name = candidate_a_knights_tale_achievement
						target = scope:recipient
					}
				}
				set_global_variable = {
					name = finished_a_knights_tale_achievement
					value = yes
				}
			}
		}
	}
}

#This interaction is referenced in code! If it's renamed you have to ping a coder
grant_title_to_new_random_character_interaction = {
	hidden = yes
	auto_accept = yes
	special_interaction = grant_titles_interaction
	use_diplomatic_range = no

	is_valid_showing_failures_only = {
		scope:actor = {
			NOT = {
				this = scope:recipient
			}
			any_held_title = {
				count > 1
			}
		}
		scope:recipient = { is_busy_in_events_localised = yes }
	}
}

#be aware that the actual granting of the title happens in code!
grant_governorship_interaction = {
	icon = grant_governorship
	category = interaction_category_vassal
	common_interaction = yes

	desc = grant_governorship_interaction_desc

	special_interaction = grant_governorship_interaction
	interface = grant_titles
	target_type = title
	target_filter = actor_domain_titles
	interface_priority = 60

	# actor character giving the titles
	# recipient character receiving the titles

	is_shown = {
		NOT = { scope:actor = scope:recipient }
		scope:recipient = {
			OR = {
				target_is_liege_or_above = scope:actor
				is_pool_guest_of = scope:actor
			}
		}
		scope:actor = {
			government_allows = administrative
			highest_held_title_tier >= tier_county
		}

		trigger_if = {
			limit = {
				scope:actor = { is_ai = yes }
			}
			scope:recipient = {
				NOT = { any_parent = { is_ai = no } }
			}
		}
	}

	is_valid_showing_failures_only = {
		scope:recipient = {
			is_adult = yes
			NOT = { is_at_war_with = scope:actor }
			carn_can_be_granted_titles_trigger = yes
			bp2_valid_for_standard_interactions_trigger = yes
			is_busy_in_events_localised = yes
			trigger_if = {
				limit = { is_ruler = no }
				is_imprisoned = no
			}
			# Only the preferred gender can be appointed unless they hold titles already
			trigger_if = {
				limit = {
					scope:actor = {
						OR = {
							has_realm_law = male_only_law
							has_realm_law = male_preference_law
						}
					}
					is_landed = no
				}
				is_female = no
			}
			trigger_if = {
				limit = {
					scope:actor = {
						OR = {
							has_realm_law = female_only_law
							has_realm_law = female_preference_law
						}
					}
					is_landed = no
				}
				is_female = yes
			}
			# DON'T TAKE OTHER PLAYERS' ACCLAIMED KNIGHTS
			custom_description = {
				text = grant_title_stealing_acclaimed_knight
				subject = scope:recipient
				NOR = {
					AND = {
						is_acclaimed = yes
						liege ?= {
							is_ai = no
							NOT = { this = scope:actor }
						}
					}
					AND = {
						is_acclaimed = yes
						scope:actor = { is_ai = yes }
					}
				}
			}
			trigger_if = {
				limit = { is_landed = yes }
				government_allows = administrative
			}
			is_clergy = no
			# Gallivanters won't accept additional responsibilities.
			NOT = { has_trait = gallivanter }
		}
	}

	can_send = {
		scope:recipient = {
			custom_tooltip = {
				text = promote_candidate_interaction_existing_holder_tt
				this != scope:target.holder
			}

			trigger_if = { # Governors can only be appointed to certain titles
				limit = {
					is_governor = yes
					scope:target = { is_noble_family_title = no } # For tooltip reasons, so we don't show more than necessary
				}
				custom_tooltip = { # Only one province of highest rank
					text = only_one_province_of_highest_rank_tt
					NAND = {
						highest_held_title_tier = scope:target.tier
						scope:target.tier >= tier_duchy
						scope:target = { # We make an exception if recipient controls at least one de jure county
							any_de_jure_county = {
								count < 1
								OR = {
									holder = scope:recipient
									holder = { is_vassal_or_below_of = scope:recipient }
								}
							}
						}
					}
				}
				custom_tooltip = {
					text = admin_must_be_de_jure_or_neighboring
					any_held_title = {
						OR = {
							# The target title is part of your de jure structure
							is_de_jure_liege_or_above_target = scope:target
							target_is_de_jure_liege_or_above = scope:target
							# Or is a neighboring county which de jure duchy is not part of your realm
							AND = {
								any_title_to_title_neighboring_county = { this = scope:target }
								scope:target = {
									tier = tier_county
									duchy = {
										OR = {
											NOT = { exists = holder }
											holder = {
												NOR = {
													is_vassal_or_below_of = scope:actor
													this = scope:actor
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			trigger_if = { # If recipient is landless and only have a family title, target title must be a duchy or above
				limit = {
					is_landless_ruler = yes
					any_held_title = { is_noble_family_title = yes }
				}
				scope:target = { NOT = { tier < tier_duchy } }
			}
			trigger_if = { # If recipient is a count, they can get only get counties within the same duchy
				limit = { highest_held_title_tier = tier_county }
				trigger_if = {
					limit = { scope:target.tier = tier_county }
					custom_tooltip = {
						text = admin_count_grant_only_counties
						any_held_title = { duchy = scope:target.duchy }
					}
				}
			}
		}
	}

	can_be_picked_title = {
		scope:target = {
			is_leased_out = no

			NOT = { tier = tier_barony }

			scope:recipient = {
				trigger_if = { # Governors can only be appointed to certain titles
					limit = {
						is_governor = yes
						scope:target = { is_noble_family_title = no } # For tooltip reasons, so we don't show more than necessary
					}
					custom_tooltip = { # Only one province of highest rank
						text = only_one_province_of_highest_rank_tt
						NAND = {
							highest_held_title_tier = scope:target.tier
							scope:target.tier >= tier_duchy
							scope:target = { # We make an exception if recipient controls at least one de jure county
								any_de_jure_county = {
									count < 1
									OR = {
										holder = scope:recipient
										holder = { is_vassal_or_below_of = scope:recipient }
									}
								}
							}
						}
					}
					custom_tooltip = {
						text = admin_must_be_de_jure_or_neighboring
						any_held_title = {
							OR = {
								# The target title is part of your de jure structure
								is_de_jure_liege_or_above_target = scope:target
								target_is_de_jure_liege_or_above = scope:target
								# Or is a neighboring county which de jure duchy is not part of your realm
								AND = {
									any_title_to_title_neighboring_county = { this = scope:target }
									scope:target = {
										tier = tier_county
										duchy = {
											OR = {
												NOT = { exists = holder }
												holder = {
													NOR = {
														is_vassal_or_below_of = scope:actor
														this = scope:actor
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
				trigger_if = { # If recipient is landless and only have a family title, target title must be a duchy or above
					limit = {
						is_landless_ruler = yes
						any_held_title = { is_noble_family_title = yes }
					}
					scope:target = { NOT = { tier < tier_duchy } }
				}
				trigger_if = { # If recipient is a count, they can get only get counties within the same duchy
					limit = { highest_held_title_tier = tier_county }
					trigger_if = {
						limit = { scope:target.tier = tier_county }
						custom_tooltip = {
							text = admin_count_grant_only_counties
							any_held_title = { duchy = scope:target.duchy }
						}
					}
				}
			}

			custom_tooltip = {
				text = GRANT_TITLES_ITEM_CANT_GIVE_ADMIN_PRIMARY
				NOT = {
					this = scope:actor.capital_province.duchy
				}
			}

			trigger_if = {
				limit = { is_noble_family_title = yes }
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_CANT_GIVE_NOBLE_FAMILY
					always = no
				}
			}

			trigger_if = {
				limit = {
					list_size:target_titles > 0
				}
				custom_tooltip = {
					text = GRANT_TITLES_ITEM_ADMIN_CANT_GIVE_MORE_THAN_ONE
					any_in_list = {
						list = target_titles
						scope:target ?= this
					}
				}
			}

			trigger_if = {
				limit = { scope:target = title:k_fashion }
				NOT = { scope:target = title:k_fashion }
			}
		}

		custom_description = {
			text = grant_titles_interaction_can_only_give_diarch_de_jure_liege_to_diarch
			subject = scope:actor.diarch
			NAND = {
				# Only applies if we have an active diarchy.
				scope:actor = { has_active_diarchy = yes }
				# Now, prevent us from giving away our diarch's land to invalidate them...
				scope:target = {
					any_dejure_vassal_title_holder = { this = scope:actor.diarch }
					# ... _unless_ we're giving it _to_ the diarch.
					NOT = { scope:recipient = scope:actor.diarch }
					# Plus we only care if the title is below our tier.
					tier < scope:actor.highest_held_title_tier
				}
			}
		}

		custom_description = {
			text = grant_titles_interaction_title_being_wagered
			NOT = {
				scope:target = { has_variable = wagered_county }
			}
		}
	}

	auto_accept = yes

	on_auto_accept = {
		scope:recipient = {
			trigger_event = {
				id = char_interaction.0111
				delayed = yes #this has to be delayed in case you grant it to someone that doesn't have an estate yet, for the change_government effect to work and generate the estate
			}
		}
	}

	on_accept = {
		if = {
			limit = {
				scope:recipient = {
					is_acclaimed = yes
					liege = {
						this = scope:actor
					}
				}
			}
			custom_tooltip = grant_title_landing_acclaimed_knight_warning
		}

		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier >= tier_duchy
					title_capital_county = {
						NOT = { culture = scope:actor.culture }
						culture = scope:recipient.culture
					}
					NOT = {
						recent_history = {
							type = granted
							years = 10
						}
					}
				}
			}
			scope:recipient.culture = {
				change_cultural_acceptance = {
					target = scope:actor.culture
					value = grant_title_cultural_acceptance_impact
					desc = cultural_acceptance_gain_granted_title
				}
			}
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier >= tier_county
				}
				scope:actor.culture = { has_cultural_parameter = landing_house_members_give_prestige }
				exists = scope:actor.house
				exists = scope:recipient.house
				scope:actor.house = scope:recipient.house
			}
			scope:actor = {
				add_prestige = {
					value = 0
					every_in_list = {
						list = target_titles
						limit = { tier = tier_empire }
						add = massive_prestige_gain
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_kingdom }
						add = major_prestige_gain
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_duchy }
						add = medium_prestige_gain
					}
				}
			}
		}
		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier >= tier_county
				}
				scope:actor.culture = { has_cultural_parameter = landing_house_members_gives_renown }
				exists = scope:actor.house
				exists = scope:recipient.house
				scope:actor.house = scope:recipient.house
			}
			scope:actor.dynasty = {
				add_dynasty_prestige = {
					value = 0
					every_in_list = {
						list = target_titles
						limit = { tier = tier_kingdom }
						add = prev.major_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
					every_in_list = {
						list = target_titles
						limit = { tier = tier_duchy }
						add = prev.medium_dynasty_prestige_gain # Carnalitas, fix vanilla issue
					}
				}
			}
		}

		# Iterate over all given titles
		#  - Add opinion modifiers
		#  - Collect titles that discontent reduction can later be derived from
		every_in_list = {
			list = target_titles
			save_temporary_scope_as = this_title
			if = {
				limit = {
					exists = scope:landed_title
				}
				scope:recipient = {
					if = {
						limit = {
							scope:this_title.tier = tier_duchy
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_duchy
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									every_vassal = {
										limit = {
											has_vassal_stance = courtly
										}
										add_opinion = {
											target = scope:actor
											modifier = courtly_lowborn_grant_opinion
											opinion = -10	#less than usual because admin realms are more tolerant of bureaucratic "new" nobility
										}
									}
								}
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}

					else_if = {
						limit = {
							scope:this_title.tier = tier_kingdom
						}

						hidden_effect = {
							add_opinion = {
								target = scope:actor
								modifier = received_title_kingdom
							}
							if = {
								limit = {
									is_lowborn = yes
								}
								scope:actor = {
									every_vassal = {
										limit = {
											has_vassal_stance = courtly
										}
										add_opinion = {
											target = scope:actor
											modifier = courtly_lowborn_grant_opinion
											opinion = -30	#less than usual because admin realms are more tolerant of bureaucratic "new" nobility
										}
									}
								}
							}
						}

						scope:this_title = { add_to_temporary_list = titles_to_grant }
					}
				}

				#Promised a vassal this title they had a claim on (vassal.2901)
				if = {
					limit = {
						scope:actor = {
							exists = var:was_promised_title
							var:was_promised_title = scope:recipient
						}
					}
					if = {
						limit = {
							scope:recipient = {
								exists = var:promised_title
							}
							scope:landed_title = scope:recipient.var:promised_title
						}
						scope:actor = {
							trigger_event = {
								id = vassal.2910
								days = { 7 14 }
							}
						}
					}
				}
			}
			if = {
				limit = {
					scope:recipient = {
						has_trait = bastard
					}
				}
				custom_tooltip = grant_title_to_bastard_dynasty_warning
			}
		} # every_in_list

		# The accumulated discontent reduction of the recipient
		scope:recipient = {
			if = {
				limit = {
					is_a_faction_member = yes
				}
				add_joined_faction_discontent = grant_title_opinion_sum_discontent_calc
			}
		}

		if = {
			limit = {
				any_in_list = {
					list = target_titles
					tier = tier_kingdom
				}
			}
			custom_tooltip = grant_title_modifier_stack_kingdoms
		}
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					tier = tier_duchy
				}
			}
			custom_tooltip = grant_title_modifier_stack_duchies
		}
		if = {
			limit = {
				trigger_if = {
					limit = { scope:actor = { is_ai = yes } }
					scope:actor = {
						any_vassal = {
							has_vassal_stance = courtly
						}
					}
				}
				scope:recipient = {
					is_lowborn = yes
				}
				any_in_list = {
					list = titles_to_grant
					tier >= tier_county
				}
			}
			custom_tooltip = grant_title_modifier_courtly_lowborn_grant_penalty
		}
		if = {
			limit = {
				scope:recipient = { is_a_faction_member = yes }
			}
			custom_tooltip = grant_title_modifier_stack_discontent
		}

		# Jealousy check
		if = {
			limit = {
				any_in_list = {
					list = titles_to_grant
					any_claimant = { grant_title_rivalry_trigger = yes }
				}
			}
			hidden_effect = {
				random = {
					chance = 25
					ordered_in_list = {
						list = titles_to_grant
						limit = {
							any_claimant = { grant_title_rivalry_trigger = yes }
						}
						order_by = tier
						save_scope_as = claim_title
						ordered_claimant = {
							limit = { grant_title_rivalry_trigger = yes }
							order_by = primary_title.tier
							save_scope_as = claim_vassal
							if = {
								limit = {
									scope:recipient = { is_lowborn = yes }
								}
								scope:recipient = { save_scope_as = lowborn_scope }
							}
							else_if = {
								limit = {
									scope:recipient = { has_claim_on = scope:claim_title }
								}
								scope:recipient = { save_scope_as = claimant_scope }
							}
							scope:actor = {
								trigger_event = {
									id = bp1_yearly.8070
									days = 5
								}
							}
						}
					}
				}
			}
		}

		scope:actor = {
			# Maintenance for runestones
			if = {
				limit = {
					# Use expanded version if we have FP1.
					has_fp1_dlc_trigger = yes
					fp1_remove_stele_new_holder_trigger = {
						TITLE = scope:target
						PREVIOUS_HOLDER = scope:actor
						NEW_HOLDER = scope:recipient
					}
				}
				# Actually removed in fp1_other_decisions.0113
				custom_tooltip = runestone_grant_title_warning
			}
			else_if = {
				limit = {
					scope:target = {
						exists = var:ancestor_to_bury
						has_county_modifier = county_raised_runestone_modifier
					}
					NOT = { scope:recipient.dynasty = var:ancestor_to_bury.dynasty } #We only have to change something if the new holder is of a different dynasty
				}
				# Actually removed in religious_decision.0312
				custom_tooltip = runestone_grant_title_warning
			}

			if = {
				limit = {
					dynasty ?= { has_dynasty_perk = ep1_culture_legacy_3 }
					scope:recipient = {
						is_playable_character = no
						NOT = { culture = scope:actor.culture }
						any_in_list = {
							list = target_titles
							OR = {
								tier = tier_county
								tier = tier_barony
							}
							culture = scope:recipient.culture
						}
					}
				}
				if = {
					limit = {
						can_add_hook = {
							target = scope:recipient
							type = favor_hook
						}
					}
					add_hook = {
						type = favor_hook
						target = scope:recipient
					}
				}
			}

			#Feedback for actor
			hidden_effect = {
				if = {
					limit = {
						NOT = { exists = scope:recipient_is_independent }
						scope:recipient = {
							any_held_title = {
								tier > tier_barony
								NOT = { is_in_list = target_titles }
							}
						}
					}
					set_variable = {
						name = lower_count
						value = {
							value = -1
							every_in_list = {
								list = target_titles
								limit = {
									NOT = { tier = scope:actor.highest_held_title_tier }
								}
								add = 1
							}
						}
					}
					save_scope_value_as = {
						name = equal_count
						value = {
							value = 0
							every_in_list = {
								list = target_titles
								limit = { tier = scope:actor.highest_held_title_tier }
								add = 1
							}
						}
					}
					ordered_in_list = {
						list = target_titles
						order_by = tier
						save_temporary_scope_as = loc_title
					}
					send_interface_toast = {
						type = event_toast_effect_neutral
						title = grant_governorship_interaction_notification
						left_icon = scope:recipient
						right_icon = scope:loc_title
						if = {
							limit = { scope:actor.var:lower_count ?= 0 }
							custom_tooltip = grant_governorship_interaction_notification_effect_2
						}
						else_if = {
							limit = {
								exists = scope:actor.var:lower_count
								scope:actor.var:lower_count > 1
							}
							custom_tooltip = grant_governorship_interaction_notification_effect_3
						}
						else_if = {
							limit = { scope:actor.var:lower_count ?= 1 }
							custom_tooltip = grant_governorship_interaction_notification_effect_4
						}
						else_if = {
							limit = {
								scope:equal_count >= 1
								scope:recipient.top_liege ?= scope:actor.top_liege
							}
							custom_tooltip = grant_titles_interaction_notification_effect_5
						}
						else = { custom_tooltip = grant_titles_interaction_notification_effect }
						if = {
							limit = {
								exists = dynasty
								is_diff_faith_or_culture_trigger = {
									CHAR = scope:recipient
									STATUS = involved
								}
								any_character_struggle = {
									involvement = involved
									has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_gives_prestige
								}
							}
							dynasty = { add_dynasty_prestige = minor_dynasty_prestige_gain }
						}
						remove_variable = lower_count
					}
				}
			}
		}

		hidden_effect = {
			# Struggle Catalyst
			if = {
				limit = {
					scope:actor = {
						is_diff_faith_or_culture_trigger = {
							CHAR = scope:recipient
							STATUS = involved
						}
						any_character_struggle = {
							involvement = involved
							activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
								CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal
								CHAR = scope:recipient
							}
						}
					}
				}
				scope:actor = {
					every_character_struggle = {
						involvement = involved
						limit = {
							activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
								CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal
								CHAR = scope:recipient
							}
						}
						activate_struggle_catalyst = {
							catalyst = catalyst_grant_privilege_to_diff_faith_culture_vassal
							character = scope:actor
						}
					}
				}
			}
		}

		# Achievements.
		scope:actor = {
			if = {
				limit = {
					has_variable_list = candidate_a_knights_tale_achievement
					is_target_in_variable_list = {
						name = candidate_a_knights_tale_achievement
						target = scope:recipient
					}
				}
				set_global_variable = {
					name = finished_a_knights_tale_achievement
					value = yes
				}
			}
		}
	}

	ai_will_do = {
		base = 0

		modifier = {
			scope:recipient.house ?= scope:actor.house
			add = 100
		}
		modifier = {
			scope:recipient = {
				is_close_family_of = scope:actor
			}
			add = 100
		}
	}
}

repo_name: Synthael/carnalitas

license: mit


code:
had_sex_giving_player_vaginal_cum_inside_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_vaginal_cum_inside_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_vaginal_cum_inside_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_vaginal_cum_inside_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_vaginal_cum_inside_consensual_fm_desc
			}
			desc = had_sex_giving_player_vaginal_cum_inside_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_vaginal_cum_inside_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_vaginal_cum_inside_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_vaginal_cum_inside_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_vaginal_cum_inside_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_vaginal_cum_inside_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_vaginal_cum_inside_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_vaginal_cum_inside_consensual_fm_desc
			}
			desc = had_sex_receiving_player_vaginal_cum_inside_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_vaginal_cum_inside_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_vaginal_cum_inside_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_vaginal_cum_outside_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_vaginal_cum_outside_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_vaginal_cum_outside_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_vaginal_cum_outside_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_vaginal_cum_outside_consensual_fm_desc
			}
			desc = had_sex_giving_player_vaginal_cum_outside_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_vaginal_cum_outside_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_vaginal_cum_outside_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_vaginal_cum_outside_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_vaginal_cum_outside_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_vaginal_cum_outside_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_vaginal_cum_outside_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_vaginal_cum_outside_consensual_fm_desc
			}
			desc = had_sex_receiving_player_vaginal_cum_outside_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_vaginal_cum_outside_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_vaginal_cum_outside_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_anal_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_anal_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_anal_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_anal_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_anal_consensual_fm_desc
			}
			desc = had_sex_giving_player_anal_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_anal_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_anal_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_anal_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_anal_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_anal_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_anal_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_anal_consensual_fm_desc
			}
			desc = had_sex_receiving_player_anal_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_anal_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_anal_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_oral_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_oral_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_oral_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_oral_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_oral_consensual_fm_desc
			}
			desc = had_sex_giving_player_oral_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_oral_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_oral_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_oral_consensual = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_oral_consensual_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_oral_consensual_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_oral_consensual_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_oral_consensual_fm_desc
			}
			desc = had_sex_receiving_player_oral_consensual_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_oral_consensual_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_oral_consensual_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_vaginal_cum_inside_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_fm_desc
			}
			desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_inside_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_vaginal_cum_inside_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_fm_desc
			}
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_vaginal_cum_outside_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_fm_desc
			}
			desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_outside_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_vaginal_cum_outside_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_fm_desc
			}
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_anal_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_anal_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_anal_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_anal_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_anal_noncon_fm_desc
			}
			desc = had_sex_giving_player_dom_anal_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_anal_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_anal_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_anal_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_anal_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_anal_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_anal_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_anal_noncon_fm_desc
			}
			desc = had_sex_receiving_player_sub_anal_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_anal_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_anal_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_oral_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_oral_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_oral_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_oral_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_oral_noncon_fm_desc
			}
			desc = had_sex_giving_player_dom_oral_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_oral_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_oral_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_oral_noncon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_oral_noncon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_oral_noncon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_oral_noncon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_oral_noncon_fm_desc
			}
			desc = had_sex_receiving_player_sub_oral_noncon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_oral_noncon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_oral_noncon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_vaginal_cum_inside_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_fm_desc
			}
			desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_inside_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_vaginal_cum_inside_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_fm_desc
			}
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_inside_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_vaginal_cum_outside_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_fm_desc
			}
			desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_vaginal_cum_outside_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_vaginal_cum_outside_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_fm_desc
			}
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_vaginal_cum_outside_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_anal_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_anal_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_anal_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_anal_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_anal_dubcon_fm_desc
			}
			desc = had_sex_giving_player_dom_anal_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_anal_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_anal_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_anal_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_anal_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_anal_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_anal_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_anal_dubcon_fm_desc
			}
			desc = had_sex_receiving_player_sub_anal_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_anal_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_anal_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_giving_player_dom_oral_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_oral_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_giving_player_dom_oral_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_giving_player_dom_oral_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_giving_player_dom_oral_dubcon_fm_desc
			}
			desc = had_sex_giving_player_dom_oral_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_oral_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_giving_player_dom_oral_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}

had_sex_receiving_player_sub_oral_dubcon = {
	categories = { negative relationships intimate }
	icon = "intimate.dds"
	description = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_oral_dubcon_mf_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_male = yes}
					scope:sex_partner = { is_female = yes}
				}
				desc = had_sex_receiving_player_sub_oral_dubcon_mf_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
					scope:sex_partner = {is_close_or_extended_family_of = scope:owner}
				}
				desc = had_sex_receiving_player_sub_oral_dubcon_fm_relative_desc
			}
			triggered_desc = {
				trigger = {
					scope:owner = {is_female = yes}
					scope:sex_partner = { is_male = yes}
				}
				desc = had_sex_receiving_player_sub_oral_dubcon_fm_desc
			}
			desc = had_sex_receiving_player_sub_oral_dubcon_generic_desc
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_oral_dubcon_desc_second_perspective
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_receiving_player_sub_oral_dubcon_desc_third_perspective
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}


code:
had_sex = {
	categories = { positive relationships private intimate }
	icon = "intimate.dds"
	description = {
		random_valid = {
			desc = had_sex_desc
			desc = had_sex_desc_1
			desc = had_sex_desc_2
			desc = had_sex_desc_3
			desc = had_sex_desc_4
			desc = had_sex_desc_5
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_desc_second_perspective
			desc = had_sex_desc_second_perspective_1
			desc = had_sex_desc_second_perspective_2
			desc = had_sex_desc_second_perspective_3
			desc = had_sex_desc_second_perspective_4
			desc = had_sex_desc_second_perspective_5
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_desc_third_perspective
			desc = had_sex_desc_third_perspective_1
			desc = had_sex_desc_third_perspective_2
			desc = had_sex_desc_third_perspective_3
			desc = had_sex_desc_third_perspective_4
			desc = had_sex_desc_third_perspective_5
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}


code:
#Rewritting from base game,removing private categories,so you can see other people sex memory
had_sex = {
	categories = { positive relationships intimate }
	icon = "intimate.dds"
	description = {
		random_valid = {
			desc = had_sex_desc
			desc = had_sex_desc_1
			desc = had_sex_desc_2
			desc = had_sex_desc_3
			desc = had_sex_desc_4
			desc = had_sex_desc_5
		}
	}

	second_perspective_description = {
		random_valid = {
			desc = had_sex_desc_second_perspective
			desc = had_sex_desc_second_perspective_1
			desc = had_sex_desc_second_perspective_2
			desc = had_sex_desc_second_perspective_3
			desc = had_sex_desc_second_perspective_4
			desc = had_sex_desc_second_perspective_5
		}
	}

	third_perspective_description = {
		random_valid = {
			desc = had_sex_desc_third_perspective
			desc = had_sex_desc_third_perspective_1
			desc = had_sex_desc_third_perspective_2
			desc = had_sex_desc_third_perspective_3
			desc = had_sex_desc_third_perspective_4
			desc = had_sex_desc_third_perspective_5
		}
	}

	participants = { sex_partner }

	duration = {
		years = memory_default_duration
	}
}