﻿namespace = fp1_shieldmaiden

scripted_trigger wrong_gender_for_fighting_in_faith_trigger = {
	#Has access to the appropriate cultural parameter.
	culture = { has_cultural_parameter = has_access_to_shieldmaidens }
	trigger_if = { # Has the Royal Court and thus can modify pillars
		limit = {
			has_dlc_feature = diverge_culture # Can modify pillars
		}
		OR = {
			AND = {
				culture = { has_cultural_parameter = martial_custom_male_only_combatant }
				is_female = yes
			}
			AND = {
				culture = { has_cultural_parameter = martial_custom_female_only_combatant }
				is_male = yes
			}
		}
	}
	trigger_else = { # Does not have the Royal Court and thus combatant is governed by faith
		OR = {
			AND = {
				faith = { has_doctrine_parameter = combatant_must_be_male_if_no_roco }
				is_female = yes
			}
			AND = {
				faith = { has_doctrine_parameter = combatant_must_be_female_if_no_roco }
				is_male = yes
			}
		}
	}
}

##################################################
# Shieldmaiden Challenges You
# by Ewan Cowhig Croft
# 0001 - 0010
##################################################

scripted_trigger likely_to_be_offended_list_trigger = {
	trigger_if = { # Has the Royal Court and thus can modify pillars
		limit = { has_dlc_feature = diverge_culture }
		culture = {
			NOT = { has_cultural_parameter = martial_custom_equal_combatant	}
		}
	}
	trigger_else = {
		#Separate religions already think your ways are terrible already, co-religionists think you're making them look bad.
		religion = root.religion
		#No bias, no problem.
		faith = {
			NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco }
		}
	}
	culture = {
		# Warrior by merit, if strong enought you can be a warrior regardless of gender
		NOT = { has_cultural_parameter = high_prowess_ignores_knight_restrictions }
	}
	#Existing shieldmaidens cut slack.
	NOT = { has_trait = shieldmaiden }
	age >= childhood_education_start_age
}

scripted_trigger valid_to_become_shieldperson_trigger = {
	wrong_gender_for_fighting_in_faith_trigger = yes
	is_available_ai_adult = yes
	prowess >= decent_skill_rating
	NOT = { has_trait = shieldmaiden }
	NOT = { has_trait = craven }
}

scripted_trigger child_dreams_of_shieldpersonhood_trigger = {
	valid_to_become_shieldperson_trigger = yes
	is_courtier_of = root
	location = root.location
	has_character_flag = fp1_dreams_of_shieldpersondom
}

#	A wrong-gender courtier wishes to fight for you
fp1_shieldmaiden.0001 = {
	type = character_event
	title = fp1_shieldmaiden.0001.t
	desc = fp1_shieldmaiden.0001.desc
	theme = martial
	left_portrait = {
		character = scope:shieldmaiden
		animation = personality_bold
	}
	right_portrait = {
		character = scope:challenged_knight
		animation = dismissal
	}
	override_background = { reference = throne_room }

	trigger = {
		#DLC check.
		has_fp1_dlc_trigger = yes
		#Standard checks.
		is_available_at_peace_adult = yes
		is_landed = yes
		NOT = { has_character_flag = had_event_fp1_shieldmaiden_0001 }
		#Has access to the appropriate cultural parameter.
		culture = { has_cultural_parameter = has_access_to_shieldmaidens }
		#Your society must consider one gender or the other lesser.
		trigger_if = { # Has the Royal Court and thus can modify pillars
			limit = { has_dlc_feature = diverge_culture }
			culture = { NOT = { has_cultural_parameter = martial_custom_equal_combatant } }
		}
		trigger_else = {
			faith = { NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } }
		}
		#You've got to have at least one suitable courtier or guest.
		any_courtier_or_guest = { valid_to_become_shieldperson_trigger = yes }
		#Aaaand you need a decent knight to be challenged.
		any_knight = {
			is_available_ai_adult = yes
			is_ruler = no
			wrong_gender_for_fighting_in_faith_trigger = no
			NOT = { has_trait = shieldmaiden }
		}
	}

	weight_multiplier = {
		base = 1

		#More likely if you're a ruling wrong-gender person yourself.
		modifier = {
			add = 1
			wrong_gender_for_fighting_in_faith_trigger = yes
		}
		#Even more so if you're actually a shieldmaiden yourself.
		modifier = {
			add = 1
			has_trait = shieldmaiden
		}
		# Weight up drastically if one of your children wishes to become a shieldmaiden.
		modifier = {
			add = 10
			any_child = { child_dreams_of_shieldpersonhood_trigger = yes }
		}
	}

	immediate = {
		#Put the event on cooldown for a decade.
		add_character_flag = {
			flag = had_event_fp1_shieldmaiden_0001
			days = 3650
		}
		#Sort the best possible shieldmaiden.
		ordered_courtier_or_guest = {
			# Grab children who were promised first.
			limit = {
				is_child_of = root
				child_dreams_of_shieldpersonhood_trigger = yes
			}
			# Otherwise, look down available courtiers.
			alternative_limit = {
				valid_to_become_shieldperson_trigger = yes
				#Check that it makes sense for this character to ask to be your shieldmaiden.
				OR = {
					#Meaning they should either not be one already...
					NOT = { has_trait = shieldmaiden }
					#... or be a wandering shieldmaiden.
					is_pool_guest = yes
				}
			}
			order_by = {
				value = prowess
				if = {
					limit = { has_trait = brave }
					add = 10
				}
				if = {
					limit = { has_trait = craven }
					add = -10
				}
				if = {
					limit = { has_trait = ambitious }
					add = 10
				}
				if = {
					limit = { has_trait = content }
					add = -10
				}
				if = {
					limit = { has_trait = arrogant }
					add = 5
				}
				if = {
					limit = { has_trait = humble }
					add = -5
				}
				if = {
					limit = { has_trait = gregarious }
					add = 5
				}
				if = {
					limit = { has_trait = shy }
					add = -5
				}
			}
			save_scope_as = shieldmaiden
		}
		#And a suitable knight.
		ordered_knight = {
			limit = {
				is_available_ai_adult = yes
				is_ruler = no
				wrong_gender_for_fighting_in_faith_trigger = no
				NOT = { has_trait = shieldmaiden }
			}
			order_by = prowess
			save_scope_as = challenged_knight
		}
		#For reference, add all courtiers & vassals who are likely to be offended if you just let any old wrong-gender human defy societal gender norms.
		every_courtier = {
			limit = { likely_to_be_offended_list_trigger = yes }
			add_to_list = prejudiced_courtiers_list
		}
		every_vassal = {
			limit = { likely_to_be_offended_list_trigger = yes }
			add_to_list = prejudiced_courtiers_list
		}
		#Finally, if scope:shieldmaiden has dreamt of this day, clear the dream. Hopefully it went positively!
		scope:shieldmaiden = {
			if = {
				limit = { has_character_flag = fp1_dreams_of_shieldpersondom }
				remove_character_flag = fp1_dreams_of_shieldpersondom
			}
		}
	}

	#You allow them to fight your knight.
	option = {
		name = fp1_shieldmaiden.0001.a

		scope:challenged_knight = {
			#Your knight may hurt the prospective shieldmaiden.
			scope:shieldmaiden = {
				random = {
					chance = scope:challenged_knight.prowess
					increase_wounds_no_death_effect = { REASON = duel }
				}
			}
			#And, depending on how fearsome they were, your knight may have been hurt right back.
			random = {
				chance = scope:shieldmaiden.prowess
				increase_wounds_no_death_effect = { REASON = duel }
			}

			#Sort the duel.
			duel = {
				skill = prowess
				target = scope:shieldmaiden
				#Your knight defeats the prospective shieldmaiden.
				40 = {
					compare_modifier = {
						value = scope:duel_value
						multiplier = 3.5
						min = -49
					}
					desc = fp1_shieldmaiden.0001.a.tt_success
					root = {
						send_interface_toast = {
							title = fp1_shieldmaiden.0001.a.tt_success
							left_icon = scope:shieldmaiden
							scope:shieldmaiden = {
								#scope:shieldmaiden is a tad miffed.
								add_opinion = {
									target = scope:challenged_knight
									modifier = angry_opinion
									opinion = -20
								}
							}
							#For your trouble, you and the knight split the prestige.
							add_prestige = minor_prestige_gain
							scope:challenged_knight = { add_prestige = minor_prestige_gain }
						}
					}
				}
				#Your knight is defeated.
				60 = {
					compare_modifier = {
						value = scope:duel_value
						multiplier = -3.5
						min = -49
					}
					desc = fp1_shieldmaiden.0001.a.tt_failure
					root = {
						send_interface_toast = {
							title = fp1_shieldmaiden.0001.a.tt_failure
							left_icon = scope:shieldmaiden
							scope:shieldmaiden = {
								#Officially designated a shieldmaiden!
								add_trait = shieldmaiden
								#Happy with the outcome of the duel.
								add_opinion = {
									target = scope:challenged_knight
									modifier = pleased_opinion
									opinion = 20
								}
								#If scope:shieldmaiden is a guest, you get them for free.
								if = {
									limit = { is_pool_guest = yes }
									root = { add_courtier = scope:shieldmaiden }
								}
							}
						}
					}
				}
			}
		}

		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_honor = 0.25
				ai_energy = -0.25
				ai_boldness = -0.25
			}
			modifier = {	#Cowardly shieldmaidens don't see the necessity of a fight.
				add = -40
				has_trait = shieldmaiden
				has_trait = craven
			}
			modifier = {	#Brave shieldmaidens, on the other hand, will insist you earn it (either way).
				add = 20
				has_trait = shieldmaiden
				has_trait = brave
			}
		}
	}

	#You take the challenge yourself.
	option = {
		name = fp1_shieldmaiden.0001.b

		#You may have hurt the prospective shieldmaiden in the duel.
		scope:shieldmaiden = {
			random = {
				chance = root.prowess
				increase_wounds_no_death_effect = { REASON = duel }
			}
		}
		#Plus they may have hurt you right back.
		random = {
			chance = scope:shieldmaiden.prowess
			increase_wounds_no_death_effect = { REASON = duel }
		}

		#Sort the duel.
		duel = {
			skill = prowess
			target = scope:shieldmaiden
			#You defeat the prospective shieldmaiden.
			40 = {
				compare_modifier = {
					value = scope:duel_value
					multiplier = 3.5
					min = -49
				}
				desc = fp1_shieldmaiden.0001.b.tt_success
				send_interface_toast = {
					title = fp1_shieldmaiden.0001.b.tt_success
					left_icon = scope:shieldmaiden
					scope:shieldmaiden = {
						#scope:shieldmaiden is a tad miffed.
						add_opinion = {
							target = root
							modifier = angry_opinion
							opinion = -20
						}
					}
					#Since you fought yourself, you get all the prestige.
					add_prestige = medium_prestige_gain
				}
			}
			#You are defeated.
			60 = {
				compare_modifier = {
					value = scope:duel_value
					multiplier = -3.5
					min = -49
				}
				desc = fp1_shieldmaiden.0001.b.tt_failure
				send_interface_toast = {
					title = fp1_shieldmaiden.0001.b.tt_failure
					left_icon = scope:shieldmaiden
					scope:shieldmaiden = {
						#Officially designated a shieldmaiden!
						add_trait = shieldmaiden
						#Happy with the outcome of the duel.
						add_opinion = {
							target = root
							modifier = pleased_opinion
							opinion = 20
						}
						#If scope:shieldmaiden is a guest, you get them for free.
						if = {
							limit = { is_pool_guest = yes }
							root = { add_courtier = scope:shieldmaiden }
						}
					}
				}
			}
		}

		stress_impact = {
			brave = medium_stress_impact_loss
			craven = medium_stress_impact_gain
		}
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_boldness = 0.5
				ai_vengefulness = 0.25
			}
			modifier = {	#Weight up for stress.
				add = 20
				has_trait = brave
			}
			modifier = {	#Weight down for stress.
				add = -20
				has_trait = craven
			}
			modifier = {	#Cowardly shieldmaidens don't see the necessity of a fight.
				add = -40
				has_trait = shieldmaiden
				has_trait = craven
			}
			modifier = {	#Brave shieldmaidens, on the other hand, will insist you earn it (either way).
				add = 20
				has_trait = shieldmaiden
				has_trait = brave
			}
		}
	}

	#Accept them outright.
	option = {
		name = fp1_shieldmaiden.0001.c

		scope:shieldmaiden = {
			#Grant the shieldmaiden trait.
			add_trait = shieldmaiden
			#Opinion gain with new shieldmaiden.
			add_opinion = {
				target = root
				modifier = fp1_accepted_my_sword_opinion
			}
			#If scope:shieldmaiden is a guest, you get them for free.
			if = {
				limit = { is_pool_guest = yes }
				root = { add_courtier = scope:shieldmaiden }
			}
		}
		#Loyalty hook on the new shieldmaiden for your trust.
		if = {
			limit = {
				NOR = {
					has_hook_of_type = {
						target = scope:shieldmaiden
						type = loyalty_hook
					}
					has_hook_of_type = {
						target = scope:shieldmaiden
						type = ritual_best_friend_hook
					}
				}
			}
			if = {
				limit = {
					has_hook = scope:shieldmaiden
				}
				hidden_effect = { remove_hook = { target = scope:shieldmaiden } }
			}
			add_hook = {
				type = loyalty_hook
				target = scope:shieldmaiden
			}
		}
		#Opinion loss with all courtiers who do not feel they should be able to fight.
		if = {
			limit = {
				any_in_list = {
					list = prejudiced_courtiers_list
					count >= 1
				}
			}
			every_in_list = {
				list = prejudiced_courtiers_list
				limit = {
					#Exempt shieldmaidens; we do this at this point, otherwise the shieldmaiden themself will objet to their own shieldmaidenry.
					NOT = { has_trait = shieldmaiden }
				}
				custom = fp1_accepted_shieldmaiden_without_question
				add_opinion = {
					target = root
					modifier = fp1_defied_religious_traditions_opinion
				}
			}
		}

		stress_impact = {
			arbitrary = minor_stress_impact_loss
			just = minor_stress_impact_gain
			arrogant = medium_stress_impact_gain
		}
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_compassion = 0.5
				ai_honor = 0.25
				ai_zeal = -0.25
			}
			modifier = {	#Weight down for stress.
				add = 10
				has_trait = arbitrary
			}
			modifier = {	#Weight up for stress.
				add = -10
				has_trait = just
			}
			modifier = {	#Weight up for stress.
				add = -20
				has_trait = arrogant
			}
			modifier = {	#Cowardly shieldmaidens don't see the necessity of a fight.
				add = 40
				has_trait = shieldmaiden
				has_trait = craven
			}
			modifier = {	#Brave shieldmaidens, on the other hand, will insist you earn it.
				add = -40
				has_trait = shieldmaiden
				has_trait = brave
			}
		}
	}

	#Reject them outright.
	option = {
		name = fp1_shieldmaiden.0001.d

		#Hefty opinion loss.
		reverse_add_opinion = {
			target = scope:shieldmaiden
			modifier = fp1_rejected_my_sword_opinion
		}

		#Stepped rivalry between you and the potential shieldmaiden.
		progress_towards_rival_effect = {
			REASON = rival_shieldmaiden_declined
			CHARACTER = scope:shieldmaiden
			OPINION = 0
		}

		stress_impact = {
			arbitrary = minor_stress_impact_loss
			arrogant = medium_stress_impact_loss
			just = minor_stress_impact_gain
			humble = medium_stress_impact_gain
		}
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_zeal = 0.25
				ai_compassion = -0.25
				ai_honor = -0.25
			}
			modifier = {	#Weight up for stress.
				add = 10
				has_trait = arbitrary
			}
			modifier = {	#Weight up for stress.
				add = 20
				has_trait = arrogant
			}
			modifier = {	#Weight down for stress.
				add = -10
				has_trait = just
			}
			modifier = {	#Weight down for stress.
				add = -20
				has_trait = humble
			}
			modifier = {	#Shieldmaidens are, themselves, more likely to give someone a shot.
				add = -40
				has_trait = shieldmaiden
			}
		}
	}
}

##################################################
# Shieldmaiden Stymies an Escape Attempt
# by Ewan Cowhig Croft
# 0011 - 0020
##################################################

#	A shieldmaiden stops your escape attempt in its tracks.
fp1_shieldmaiden.0011 = {
	type = character_event
	title = fp1_shieldmaiden.0011.t
	desc = fp1_shieldmaiden.0011.desc
	theme = prison
	left_portrait = {
		character = scope:prisoner
		animation = fear
	}
	right_portrait = {
		character = scope:shieldmaiden
		animation = disapproval
	}

	trigger = {
		#DLC check.
		has_fp1_dlc_trigger = yes
		#Requires a shieldmaiden to get going.
		imprisoner = {
			any_courtier = { suitable_shieldmaiden_gaoler_trigger = yes }
		}
	}

	immediate = {
		play_music_cue = "mx_cue_prison"
		save_scope_as = prisoner
		imprisoner = {
			#Grab an appropriate shieldmaiden.
			random_courtier = {
				limit = { suitable_shieldmaiden_gaoler_trigger = yes }
				save_scope_as = shieldmaiden
			}
			#Inform the imprisoner so that they're aware they're getting value for money.
			trigger_event = fp1_shieldmaiden.0012
		}
		scope:imprisoner = {
			add_opinion = {
				target = root
				modifier = respect_opinion
				opinion = -20
			}
		}
	}

	#The shieldmaiden lays the smackdown.
	option = {
		name = fp1_shieldmaiden.0011.a
		increase_wounds_no_death_effect = { REASON = beaten }
	}
}

#	A shieldmaiden has stopped one of your prisoners escaping.
fp1_shieldmaiden.0012 = {
	type = character_event
	title = fp1_shieldmaiden.0012.t
	desc = fp1_shieldmaiden.0012.desc
	theme = prison
	left_portrait = {
		character = scope:prisoner
		animation = fear
	}
	right_portrait = {
		character = scope:shieldmaiden
		animation = disapproval
	}

	trigger = {
		scope:prisoner = {
			is_of_major_or_minor_interest_trigger = { CHARACTER = scope:imprisoner }
		}
	}

	immediate = {
		play_music_cue = "mx_cue_prison"
		#Show the wounds.
		show_as_tooltip = {
			scope:prisoner = {
				increase_wounds_effect = { REASON = beaten }
			}
		}
	}

	#Good job!
	option = {
		name = fp1_shieldmaiden.0012.a
		scope:shieldmaiden = {
			add_opinion = {
				target = scope:imprisoner
				modifier = compliment_opinion
				opinion = 10
			}
		}
	}

	#Bad job! [in case this was an overreaction]
	option = {
		name = fp1_shieldmaiden.0012.b
		scope:shieldmaiden = {
			add_opinion = {
				target = scope:imprisoner
				modifier = annoyed_opinion
				opinion = -10
			}
		}
	}
}

##################################################
# Shieldmaiden saves you from Murder Attempt
# by Petter Vilberg & Ewan Cowhig Croft
# 0021 - 0030
##################################################

scripted_trigger suitable_shieldmaiden_savior_trigger = {
	has_trait = shieldmaiden
	bodyguard_will_actually_do_job_trigger = yes
}

#	Scheme owner: shieldmaiden intervenes in murder.
fp1_shieldmaiden.0021 = {
	type = character_event
	window = scheme_failed_event
	title = fp1_shieldmaiden.0021.t
	desc = {
		first_valid = {
			triggered_desc = {
				trigger = { scope:murder_method = flag:hired_thugs }
				desc = fp1_shieldmaiden.0021.desc.thugs
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:riled_up_mob }
				desc = fp1_shieldmaiden.0021.desc.mob
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:lured_into_forest }
				desc = fp1_shieldmaiden.0021.desc.lured_into_forest
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:child_pushed }
				desc = fp1_shieldmaiden.0021.desc.child_pushed
			}
			desc =  fp1_shieldmaiden.0021.desc.assassin
		}
		triggered_desc = {
			trigger = { exists = local_var:shieldmaiden_dies }
			desc = fp1_shieldmaiden.0021.shieldmaiden_dies
		}
	}
	theme = murder_scheme
	left_portrait = {
		character = scope:owner
		triggered_animation = {
			trigger = { exists = scope:scheme_discovered }
			animation = fear
		}
		animation = stress
	}
	center_portrait = {
		character = scope:bodyguard
		triggered_animation = {
			trigger = { is_alive = no }
			animation = map_fear
		}
		animation = random_weapon_aggressive
		camera = camera_event_center_pointing_left
	}
	right_portrait = {
		character = scope:target
		triggered_animation = {
			trigger = { exists = scope:scheme_discovered }
			animation = rage
		}
		animation = paranoia
	}
	widget = {
		gui = "event_window_widget_scheme"
		container = "custom_widgets_container"
	}

	trigger = {
		#DLC check.
		has_fp1_dlc_trigger = yes
		scope:target = {
			any_court_position_holder = {
				type = bodyguard_court_position
				suitable_shieldmaiden_savior_trigger = yes
			}
		}
	}

	immediate = {
		# Select a murder method.
		random_list = {
			100 = {
				save_scope_value_as = {
					name = murder_method
					value = flag:hired_assassin
				}
			}
			100 = {
				save_scope_value_as = {
					name = murder_method
					value = flag:hired_thugs
				}
			}
			100 = {
				save_scope_value_as = {
					name = murder_method
					value = flag:riled_up_mob
				}
			}
			100 = {
				save_scope_value_as = {
					name = murder_method
					value = flag:lured_into_forest
				}
			}
			100 = {
				save_scope_value_as = {
					name = murder_method
					value = flag:child_pushed
				}
				# Try to grab a suitable thing to lure them in with too.
				rooftop_murder_lure_for_child_effect = yes
			}
		}
		# Sort our shieldmaiden
		scope:target = {
			ordered_court_position_holder = {
				type = bodyguard_court_position
				limit = { suitable_shieldmaiden_savior_trigger = yes }
				order_by = { value = murder_weight_best_bodyguard_value }
				save_scope_as = shieldmaiden
			}
		}
		hidden_effect = {
			if = {
				limit = {
					# Shieldmaidens can't die from some murder methods.
					NOR = {
						scope:murder_method = flag:lured_into_forest
						scope:murder_method = flag:child_pushed
					}
				}
				random = {
					chance = {
						value = 75
						subtract = scope:shieldmaiden.prowess
					}
					set_local_variable = {
						name = shieldmaiden_dies
						value = yes
					}
				}
			}
		}
		if = {
			limit = { exists = local_var:shieldmaiden_dies }
			show_as_tooltip = {
				murder_interception_handle_extra_deaths_effect = {
					VICTIM = scope:shieldmaiden
					REASON = death_murder
				}
			}
		}
		random_dummy_gender_assassin_effect = yes
		murder_failure_effect = yes
	}

	#It's over.
	option = { name = fp1_shieldmaiden.0021.a }

	#It's not over till I say it's over!
	option = {
		name = fp1_shieldmaiden.0021.b
		trigger = {
			NOT = { exists = scope:scheme_discovered }
		}
		restart_murder_scheme_effect = yes
	}

	# Fire the rest of the outcome.
	after = {
		scope:target = { trigger_event = fp1_shieldmaiden.0022 }
	}
}

# Shieldmaiden saves you from murder
fp1_shieldmaiden.0022 = {
	type = character_event
	window = scheme_target_event
	title = fp1_shieldmaiden.0022.t
	desc = {
		# This block is only for the setup of child_pushed.
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:murder_method = flag:child_pushed
					exists = scope:child_pushed_dog
				}
				desc = murder_outcome.5001.child_pushed_dog
			}
			triggered_desc = {
				trigger = {
					scope:murder_method = flag:child_pushed
					exists = scope:child_pushed_cat
				}
				desc = murder_outcome.5001.child_pushed_cat
			}
			triggered_desc = {
				trigger = {
					scope:murder_method = flag:child_pushed
					exists = scope:child_pushed_toy
				}
				desc = murder_outcome.5001.child_pushed_toy
			}
			triggered_desc = {
				trigger = {
					scope:murder_method = flag:child_pushed
				}
				desc = murder_outcome.5001.child_pushed
			}
		}
		# Shieldmaided saves you!
		first_valid = {
			triggered_desc = {
				trigger = { scope:murder_method = flag:hired_thugs }
				desc = fp1_shieldmaiden.0022.desc.thugs
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:riled_up_mob }
				desc = fp1_shieldmaiden.0022.desc.mob
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:lured_into_forest }
				desc = fp1_shieldmaiden.0022.desc.lured_into_forest
			}
			triggered_desc = {
				trigger = { scope:murder_method = flag:child_pushed }
				desc = fp1_shieldmaiden.0022.desc.child_pushed
			}
			desc =  fp1_shieldmaiden.0022.desc.assassin
		}
		# ...but did they pay the ultimate price?
		first_valid = {
			triggered_desc = {
				trigger = {
					exists = local_var:shieldmaiden_dies
					scope:murder_method = flag:hired_assassin
				}
				desc = fp1_shieldmaiden.0022.desc.assassin.shieldmaiden_dies
			}
			triggered_desc = {
				trigger = {
					exists = local_var:shieldmaiden_dies
					scope:murder_method = flag:hired_thugs
				}
				desc = fp1_shieldmaiden.0022.desc.thugs.shieldmaiden_dies
			}
			triggered_desc = {
				trigger = {
					exists = local_var:shieldmaiden_dies
					scope:murder_method = flag:riled_up_mob
				}
				desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_dies
			}
			triggered_desc = {
				trigger = {
					NOT = { exists = local_var:shieldmaiden_dies }
					scope:murder_method = flag:riled_up_mob
				}
				desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_lives
			}
		}
		# And who was responsible!?
		triggered_desc = {
			trigger = { exists = scope:scheme_discovered }
			desc = fp1_shieldmaiden.0022.owner_discovered
		}
	}
	theme = murder_scheme
	override_background = {
		trigger = { scope:murder_method = flag:hired_thugs }
		reference = wilderness_scope
	}
	override_background = {
		trigger = {
			OR = {
				scope:murder_method = flag:riled_up_mob
				scope:murder_method = flag:child_pushed
			}
		}
		reference = courtyard
	}
	override_background = {
		trigger = { scope:murder_method = flag:lured_into_forest }
		reference = wilderness_forest
	}
	left_portrait = {
		character = scope:target
		triggered_animation = {
			trigger = { exists = scope:scheme_discovered }
			animation = rage
		}
		animation = paranoia
	}
	center_portrait = {
		character = scope:bodyguard
		triggered_animation = {
			trigger = { is_alive = no }
			animation = map_fear
		}
		animation = random_weapon_aggressive
	}
	right_portrait = {
		character = scope:owner_to_reveal
		triggered_animation = {
			trigger = { exists = scope:scheme_discovered }
			animation = fear
		}
		animation = stress
	}

	immediate = {
		if = {
			limit = { scope:murder_method = flag:hired_thugs }
			scope:home_province = {	save_scope_as = background_wilderness_scope }
		}
		# Handle the death of the Shieldmaiden if necessary
		if = {
			limit = { exists = local_var:shieldmaiden_dies }
			murder_interception_handle_extra_deaths_effect = {
				VICTIM = scope:shieldmaiden
				REASON = death_murder
			}
		}
	}

	#Who could do such a thing?
	option = {
		name = fp1_shieldmaiden.0022.a
		trigger = {
			NOT = { exists = scope:scheme_discovered }
		}
		custom_tooltip = murder_save.failure_unknown_owner_tt
	}

	#Vengeance!
	option = {
		name = fp1_shieldmaiden.0022.b
		trigger = { exists = scope:scheme_discovered }
		custom_tooltip = murder_save.failure_known_owner_tt
	}

	after = {
		add_character_modifier = {
			modifier = watchful_modifier
			days = watchful_modifier_duration
		}
	}
}

##################################################
# Shieldmaiden has Developed Mad Skills
# by Ewan Cowhig Croft
# 0031 - 0040
##################################################

scripted_trigger valid_for_shieldmaiden_veterancy = {
	# Must actually have the shieldmaiden trait.
	has_trait = shieldmaiden
	# Must still be in a situation where shieldmaidenhood is exceptional.
	wrong_gender_for_fighting_in_faith_trigger = yes
}

scripted_trigger valid_for_shieldmaiden_level_up = {
	# Are they an eligible shieldmaiden?
	valid_for_shieldmaiden_veterancy = yes
	# Have they met the level up requirements?
	has_variable = shieldmaiden_veterancy
	this.var:shieldmaiden_veterancy >= shieldmaiden_veterancy_cap
	# Already checked for a root shieldmaiden, but we re-check for courtiers.
	is_available_at_peace_adult = yes
	# Finally, they mustn't have all the shieldmaiden modifiers maxed out already.
	NAND = {
		has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
		has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
		has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
	}
}

#	Track the number of valid battles as a shieldmaiden a character has been in.
fp1_shieldmaiden.0031 = {
	hidden = yes
	scope = combat_side

	trigger = {
		#DLC check.
		has_fp1_dlc_trigger = yes
		OR = {
			any_side_commander = { valid_for_shieldmaiden_veterancy = yes }
			any_side_knight = { valid_for_shieldmaiden_veterancy = yes }
		}
	}

	immediate = {
		# Sort side commander shieldmaidens.
		every_side_commander = {
			limit = { valid_for_shieldmaiden_veterancy = yes }
			# Boost their veterancy if they already have it.
			if = {
				limit = { exists = var:shieldmaiden_veterancy }
				change_variable = {
					name = shieldmaiden_veterancy
					add = 1
				}
			}
			# Or else set it up otherwise.
			else = {
				set_variable = {
					name = shieldmaiden_veterancy
					value = 1
				}
			}
		}
		# Sort side knight shieldmaidens.
		every_side_knight = {
			limit = { valid_for_shieldmaiden_veterancy = yes }
			if = {
				limit = { exists = var:shieldmaiden_veterancy }
				change_variable = {
					name = shieldmaiden_veterancy
					add = 1
				}
			}
			else = {
				set_variable = {
					name = shieldmaiden_veterancy
					value = 1
				}
			}
		}
	}
}

#	Your shieldmaiden improves their skills.
fp1_shieldmaiden.0032 = {
	type = character_event
	title = fp1_shieldmaiden.0032.t
	desc = {
		first_valid = {
			# Am *I* the shieldmaiden in question?
			triggered_desc = {
				trigger = { scope:shieldmaiden = root }
				desc = fp1_shieldmaiden.0032.desc.root
			}
			# Or is it a courtier?
			desc = fp1_shieldmaiden.0032.desc.courtier
		}
	}
	theme = martial
	left_portrait = {
		character = scope:shieldmaiden
		animation = rage
	}
	override_background = { reference = army_camp }

	trigger = {
		#DLC check.
		has_fp1_dlc_trigger = yes
		#Standard checks.
		is_available_at_peace_adult = yes
		NOT = { has_character_flag = had_event_fp1_shieldmaiden_0032 }
		# Must either be or have a shieldmaiden who's at veterancy cap.
		OR = {
			valid_for_shieldmaiden_level_up = yes
			any_courtier = { valid_for_shieldmaiden_level_up = yes }
		}
	}

	weight_multiplier = {
		base = 1

		# Much more likely if you're a shieldmaiden yourself.
		modifier = {
			add = 2
			has_trait = shieldmaiden
		}
	}

	immediate = {
		play_music_cue = "mx_cue_positive_effect"
		add_character_flag = {
			flag = had_event_fp1_shieldmaiden_0032
			days = 1825
		}
		# Designate a valid shieldmaiden.
		## First, we always level up root, if possible.
		if = {
			limit = { valid_for_shieldmaiden_level_up = yes }
			save_scope_as = shieldmaiden
		}
		## Otherwise, we grab all relevant courtiers.
		else = {
			every_courtier = {
				limit = { valid_for_shieldmaiden_level_up = yes }
				add_to_list = veteran_shieldmaidens
			}
		}
		## Select a suitable one from the list to be scope:shieldmaiden, prioritising the most veteran.
		if = {
			limit = {
				NOT = { exists = scope:shieldmaiden }
			}
			ordered_in_list = {
				list = veteran_shieldmaidens
				order_by = var:shieldmaiden_veterancy
				save_scope_as = shieldmaiden
			}
		}
		# Next, we reduce scope:shieldmaiden's veterancy, as they'll be levelling it up in the event.
		scope:shieldmaiden = {
			change_variable = {
				name = shieldmaiden_veterancy
				subtract = shieldmaiden_veterancy_cap
			}
		}
	}

	# Martial: look how they command the shieldwall!
	option = {
		# Separate loc for first person POV.
		name = {
			trigger = { scope:shieldmaiden = root }
			text = fp1_shieldmaiden.0032.a.root
		}
		# Aaaaand third person POV.
		name = {
			trigger = {
				scope:shieldmaiden != root
			}
			text = fp1_shieldmaiden.0032.a.courtier
		}
		# Can't have the max-level version of this modifier.
		trigger = {
			NOT = {
				scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier }
			}
		}

		# Process the level-up modifier for this stat block.
		scope:shieldmaiden = {
			# If we have no level on this path, give us the first rank.
			if = {
				limit = {
					NOR = {
						has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier
						has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier
						has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
					}
				}
				add_character_modifier = shieldmaiden_level_martial_1_fp1_modifier
			}
			# If have the first level, quietly remove it and add the second.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_1_fp1_modifier }
				add_character_modifier = shieldmaiden_level_martial_2_fp1_modifier
			}
			# If we have the second level, quietly remove it and add the third.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_2_fp1_modifier }
				add_character_modifier = shieldmaiden_level_martial_3_fp1_modifier
			}

		}

		# No stress involved.
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_boldness = 0.25
				ai_rationality = 0.25
			}
		}
	}

	# Prowess: see how they swing that sword!
	option = {
		# Separate loc for first person POV.
		name = {
			trigger = { scope:shieldmaiden = root }
			text = fp1_shieldmaiden.0032.b.root
		}
		# Aaaaand third person POV.
		name = {
			trigger = {
				scope:shieldmaiden != root
			}
			text = fp1_shieldmaiden.0032.b.courtier
		}
		# Can't have the max-level version of this modifier.
		trigger = {
			NOT = {
				scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier }
			}
		}

		# Process the level-up modifier for this stat block.
		scope:shieldmaiden = {
			# If we have no level on this path, give us the first rank.
			if = {
				limit = {
					NOR = {
						has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier
						has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier
						has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
					}
				}
				add_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier
			}
			# If have the first level, quietly remove it and add the second.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier }
				add_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier
			}
			# If we have the second level, quietly remove it and add the third.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier }
				add_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier
			}

		}

		# No stress involved.
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_vengefulness = 0.25
				ai_honor = 0.25
			}
		}
	}

	# Intrigue: never a finer backstabber!
	option = {
		# Separate loc for first person POV.
		name = {
			trigger = { scope:shieldmaiden = root }
			text = fp1_shieldmaiden.0032.c.root
		}
		# Aaaaand third person POV.
		name = {
			trigger = {
				scope:shieldmaiden != root
			}
			text = fp1_shieldmaiden.0032.c.courtier
		}
		# Can't have the max-level version of this modifier.
		trigger = {
			NOT = {
				scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier }
			}
		}

		# Process the level-up modifier for this stat block.
		scope:shieldmaiden = {
			# If we have no level on this path, give us the first rank.
			if = {
				limit = {
					NOR = {
						has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier
						has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier
						has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
					}
				}
				add_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier
			}
			# If have the first level, quietly remove it and add the second.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier }
				add_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier
			}
			# If we have the second level, quietly remove it and add the third.
			else_if = {
				limit = { has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier }
				hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier }
				add_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier
			}
		}

		# Minor stress revolving around paranoia: what if they backstab *YOU*, after all?
		if = {
			limit = {
				scope:shieldmaiden != root
			}
			stress_impact = {
				trusting = minor_stress_impact_loss
				paranoid = minor_stress_impact_gain
			}
		}
		ai_chance = {
			base = 100
			ai_value_modifier = {
				ai_rationality = 0.5
				ai_vengefulness = -0.5
			}
			modifier = {	#Weight up for stress.
				add = 10
				scope:shieldmaiden != root
				has_trait = trusting
			}
			modifier = {	#Weight down for stress.
				add = -10
				scope:shieldmaiden != root
				has_trait = paranoid
			}
		}
	}
}
