﻿# The outcome of a fascinare scheme.  Largely based on the seduction scheme.

namespace = fascinare_outcome

# NOTE: To set up a new scheme outcome, make sure that you make an event for the owner and one for the target, and add them to their relevant on_actions.


# 0000-0999: Maintenance events
# 1000-1999: Setup events
# 2000-2999: Success events for scheme owner
# 4000-4999: Failure events for scheme owner


######################################################
# MAINTENANCE EVENTS
# 0000-0999
######################################################

#I am a player and there is a discovery chance. Do I want to take the risk?
fascinare_outcome.0001 = {
	type = character_event
	title = fascinare_outcome.0001.t
	desc = {
		desc = fascinare_outcome.0001.desc
		first_valid = {
			triggered_desc = {
				trigger = { scope:scheme.scheme_success_chance >= 60 }
				desc = fascinare_outcome.0001.positive.desc
			}
			desc = fascinare_outcome.0001.negative.desc
		}
	}
	theme = regula_theme
	override_background = {
		reference = corridor_day
	}
	left_portrait = scope:target
	widget = {
		gui = "event_window_widget_scheme"
		container = "custom_widgets_container"
	}

	option = {
		name = fascinare_outcome.0001.a
		custom_tooltip = fascinare_outcome.0001.a.tt
		trigger_event = fascinare_outcome.0002 #Do the rolls!

		stress_impact = {
			craven = minor_stress_impact_gain
		}
	}

	option = {
		name = fascinare_outcome.0001.b
		stress_impact = {
			ambitious = minor_stress_impact_gain
		}
		scope:scheme = {
			end_scheme = yes
		}
	}
}

#Rolls success and discovery, and triggers on_actions (or sends "player's choice" event)
fascinare_outcome.0002 = {
	type = character_event

	hidden = yes

	immediate = {
		#SUCCESS ROLL
		random = {
			chance = scope:scheme.scheme_success_chance

			save_scope_value_as = {
				name = scheme_successful
				value = yes
			}
		}

		#DISCOVERY ROLL
		save_scope_value_as = {
			name = discovery_chance
			value = {
				value = 100
				subtract = scope:scheme.scheme_secrecy
			}
		}

		random = {
			chance = scope:discovery_chance
			save_scope_value_as = {
				name = scheme_discovered
				value = yes
			}
		}

		# Send success or failure for AI/Player
		if = {
			limit = {
				exists = scope:scheme_successful
			}
			trigger_event = {
				on_action = fascinare_success
			}
		}
		else = {
			trigger_event = {
				on_action = fascinare_failure
			}
		}
	}
}

# Target acquires the mulsa trait through other means.
fascinare_outcome.0004 = {
	type = character_event
	title = fascinare_outcome.0004.t
	desc = fascinare_outcome.0004.desc

	theme = regula_theme
	override_background = {
		reference = throne_room
	}
	left_portrait = scope:target
	#No scheme, no widget

	option = {
		name = fascinare_outcome.0004.a
		add_piety = 100
	}
}

#Target died
fascinare_outcome.0005 = {
	type = character_event
	title = fascinare_outcome.0005.t
	desc = fascinare_outcome.0005.desc

	theme = regula_theme
	override_background = {
		reference = throne_room
	}
	left_portrait = scope:target
	#No scheme, no widget

	option = {
		name = fascinare_outcome.0005.a
		add_piety = 100
	}
}

######################################################
# SUCCESS EVENTS FOR OWNER
# 2000-2999
######################################################

# Child comes of age
fascinare_outcome.2500 = {
	hidden = yes

	trigger = {
		is_male = no # leaving an opening for futa, etc.
	}

	immediate = {
		save_scope_as = teen	# save our current scope as the teen ward for event Loc

		# Try to find our guardian
		random_memory = {
			limit = {
				has_memory_type = childhood_education_guardian
			}
			memory_participant:guardian = {
				save_scope_as = regula_guardian
			}
		}

		if = { # If events are disabled, use a notification instead
			limit = {
				global_var:ward_enslavement_events_enabled = no
				OR = {
					scope:regula_guardian ?= {
						OR = {
							has_trait = devoted_trait_group
							has_trait = magister_trait_group
						}
					}
					has_trait = regula_obedience_bloodline
				}
			}
			global_var:magister_character = {
				trigger_event = fascinare_outcome.2505
			}
		}
		else = { # If events are enabled, run the event
			if = { # If the guardian is the player. Guaranteed success
				limit = {
					scope:regula_guardian ?= {
						has_trait = magister_trait_group
					}
				}
				global_var:magister_character = {
					trigger_event = fascinare_outcome.2501
				}
			}
			else_if = { # If the guardian is the the players direct vassal paelex or domina. Guaranteed success
				limit = {
					scope:regula_guardian ?= {
						is_regula_leader_devoted_trigger = yes
						# Only direct vassals, to keep the events low.
						liege = global_var:magister_character
					}
				}
				global_var:magister_character = {
					trigger_event = fascinare_outcome.2503
				}
			}
			else_if = {   # If the teen has the obedience trait. Guaranteed success
				limit = {
					has_trait = regula_obedience_bloodline
				}
				global_var:magister_character = {
					trigger_event = fascinare_outcome.2504
				}
			}
			else_if = {   # If the guardian is a vassal mulsa. Not guaranteed success
				limit = {
					scope:regula_guardian ?= {
						# Any other devoted traits (mulsa/tropaeum)
						has_trait = devoted_trait_group
						liege = global_var:magister_character
					}
				}
				global_var:magister_character = {
					trigger_event = fascinare_outcome.2502
				}
			}
			else_if = { # For non-realm/non-vassal mulsa just run notification message.
				limit = {
					scope:regula_guardian ?= {
						has_trait = devoted_trait_group
						NOT = { liege = global_var:magister_character }
					}
				}
				global_var:magister_character = {
					trigger_event = fascinare_outcome.2505
				}
			}
		}
	}
}

# Entrance your ward, guaranteed to happen
fascinare_outcome.2501 = {
	type = character_event
	title = fascinare_outcome.2501.t
	desc = fascinare_outcome.2501.desc
	theme = regula_theme
	override_background = {
		reference = study
	}
	right_portrait = {
		character = scope:teen
		animation = idle
	}

	immediate = {
	}
	# Charm.
	option = {
		name = fascinare_outcome.2501.a
		scope:teen = {
			fascinare_success_effect = { CHARACTER = root }
			create_memory_convert_ward_direct = { CHARACTER = root }
			ward_enslavement_success_effect = yes
		}

		ai_chance = {
			base = 100
		}
		trigger_event = {
			id = fascinare_outcome.2510
			days = { 2 4 }
		}
	}
	# Leave them be.
	option = {
		name = fascinare_outcome.2501.b
	}
}

# Entrance the ward of a Mulsa, not guaranteed to happen, has a sucess chance based on ward/guardian traits
fascinare_outcome.2502 = {
	type = character_event
	title = fascinare_outcome.2502.t
	desc = fascinare_outcome.2502.desc
	theme = regula_theme
	override_background = {
		reference = study
	}
	left_portrait = {
		character = scope:regula_guardian
		animation = flirtation
	}
	right_portrait = {
		character = scope:teen
		animation = shock
	}

	# Attempt to charm.
	option = {
		name = fascinare_outcome.2502.a
		regula_guardian_try_enslave_ward_effect = yes
	}
	# Leave them be.
	option = {
		name = fascinare_outcome.2502.b
	}
}

# Entrance the ward of a Domina, Paelex, guaranteed to happen
fascinare_outcome.2503 = {
	type = character_event
	title = fascinare_outcome.2503.t
	desc = fascinare_outcome.2503.desc
	theme = regula_theme
	override_background = {
		reference = study
	}
	left_portrait = {
		character = scope:regula_guardian
		outfit_tags = { no_cloak no_hat no_pants no_clothes }
		animation = flirtation
	}
	right_portrait = {
		character = scope:teen
		animation = shock
	}


	immediate = {
		scope:regula_guardian = {
			if = {
				limit = {
					OR = {
						is_regula_leader_devoted_trigger = yes
						has_trait = orba
					}
					NOT = {
						has_character_flag = is_naked
					}
				}
				add_character_flag = {
					flag = is_naked
					days = 1
				}
			}
		}
	}
	# Charm.
	option = {
		name = fascinare_outcome.2503.a
		scope:teen = {
			fascinare_success_effect = { CHARACTER = root }
			create_memory_convert_ward_assistant = { CHARACTER = scope:regula_guardian }
			ward_enslavement_success_effect = yes
		}
	}
	# Leave them be.
	option = {
		name = fascinare_outcome.2503.b
	}
}

# Entrance the obedient character
# Entrance your ward, Guaranteed to happen
fascinare_outcome.2504 = {
	type = character_event
	title = fascinare_outcome.2504.t
	desc = fascinare_outcome.2504.desc
	theme = regula_theme
	override_background = {
		reference = study
	}
	left_portrait = {
		character = global_var:magister_character
		animation = happiness
	}
	right_portrait = {
		character = scope:teen
		animation = admiration
	}

	# Charm.
	option = {
		name = fascinare_outcome.2504.a
		scope:teen = {
			fascinare_success_effect = { CHARACTER = root }
			create_memory_convert_ward_direct = { CHARACTER = root }
			ward_enslavement_success_effect = yes
		}

		ai_chance = {
			base = 100
		}
		trigger_event = {
			id = fascinare_outcome.2510
			days = { 2 4 }
		}
	}

	# Leave them be.
	option = {
		name = fascinare_outcome.2504.b
	}
}

# Entrance your ward automatically
# We run same charming code/logic as above events, but only send a message, no event
# NOTE: Still triggers Magister bonus charm event
fascinare_outcome.2505 = {
	type = character_event
	hidden = yes

	immediate = {

		# Paelex/Domina always charm
		if = {
			limit = {
				scope:regula_guardian = {
					is_regula_leader_devoted_trigger = yes
				}
			}
			send_interface_message = {
				type = regula_fascinare_ward_charm_success
				title = teen_fascinare_success_effect.desc
				left_icon = scope:teen
				scope:teen = {
					fascinare_success_effect = { CHARACTER = root }
					create_memory_convert_ward_assistant = { CHARACTER = scope:regula_guardian}
					ward_enslavement_success_effect = yes
				}
			}
		}

		# Magister always charms
		# Still triggers the bonus charm event, because this is a personal ward
		else_if = {
			limit = {
				scope:regula_guardian = global_var:magister_character
			}
			send_interface_message = {
				type = regula_fascinare_ward_charm_success
				title = teen_fascinare_success_effect.desc
				left_icon = scope:teen
				scope:teen = {
					fascinare_success_effect = { CHARACTER = root }
					create_memory_convert_ward_direct = { CHARACTER = root }
					ward_enslavement_success_effect = yes
				}
			}

			# Trigger bonus charm event
			trigger_event = {
				id = fascinare_outcome.2510
				days = { 2 4 }
			}
		}

		# Ward has Obedience Bloodline
		else_if = {
			limit = {
				scope:teen = {
					has_trait = regula_obedience_bloodline
				}
			}
			send_interface_message = {
				type = regula_fascinare_ward_charm_success
				title = teen_fascinare_success_effect.desc
				left_icon = scope:teen
				scope:teen = {
					fascinare_success_effect = { CHARACTER = root }
					create_memory_convert_ward_direct = { CHARACTER = root }
					ward_enslavement_success_effect = yes
				}
			}
		}

		# Other devoted have chance to fail
		else_if = {
			limit = {
				scope:regula_guardian = {
					has_trait = devoted_trait_group
				}
			}
			regula_guardian_try_enslave_ward_effect = yes
		}
	}
}

fascinare_outcome.2510 = {
	type = character_event
	title = fascinare_outcome.2510.t
	desc = fascinare_outcome.2510.desc
	theme = regula_theme
	override_background = {
		reference = study
	}

	immediate = {
		scope:teen = {
			add_character_flag = {
				flag = is_naked
				days = 1
			}
		}
	}

	left_portrait = {
		character = global_var:magister_character
		animation = happiness
	}

	right_portrait = {
		character = scope:teen
		animation = admiration
	}

	#take the former ward's body
	option = {
		name = fascinare_outcome.2510.a

		regula_sex_with_target_normal = { TARGET = scope:teen }

		scope:teen = {
			add_opinion = {
				target = global_var:magister_character
				modifier = love_opinion
				opinion = 15
			}
		}
	}

	#take the former ward's heart
	option = {
		name = fascinare_outcome.2510.l

		regula_sex_with_target_normal = { TARGET = scope:teen }

		scope:teen = {
			set_relation_lover = global_var:magister_character
			add_opinion = {
				target = global_var:magister_character
				modifier = love_opinion
				opinion = 30
			}
		}
	}

	# Leave them be.
	option = {
		name = fascinare_outcome.2510.d
		scope:teen = {
			add_opinion = {
				target = global_var:magister_character
				modifier = refusal_opinion
				opinion = -20
			}
		}
	}
}

##### This code is probably irrelevant, but may be useful in the future.
# #Outcome using the sex scene generator.
# #by Linnéa Thimrén
# seduce_outcome.2309 = {
# 	type = character_event
# 	title = seduce_outcome.2309.t
# 	desc = {
# 		desc = seduce_outcome.2309.desc_opening
# 		desc = seduce_outcome.2309.desc_ending
# 	}

# 	theme = seduce_scheme
# 	left_portrait = {
# 		character = scope:target
# 		animation = flirtation_left
# 	}
# 	widget = {
# 		gui = "event_window_widget_scheme"
# 		container = "custom_widgets_container"
# 	}

# 	trigger = {
# 		NOR = {
# 			has_trait = chaste
# 			scope:target = { has_trait = chaste }
# 		}
# 	}

# 	weight_multiplier = {
# 		base = 0.5
# 		modifier = {
# 			add = 1
# 			scope:target = { has_trait = lustful }
# 		}
# 		modifier = {
# 			add = 1
# 			has_trait = lustful
# 		}
# 		modifier = {
# 			add = -2
# 			OR = {
# 				has_sexuality = asexual
# 				scope:target = { has_sexuality = asexual }
# 			}
# 		}
# 	}

# 	immediate = {
# 		hidden_effect = {
# 			random = {
# 				chance = 30
# 				set_random_sex_scene_location_effect = yes
# 				transfer_sex_scene_location_to_character_effect = { CHARACTER = scope:target }
# 			}
# 		}
# 		#Either runs had_sex_with_effect or shows a tooltip of it (effect is always just run once per success):
# 		owner_seduce_outcome_sex_effect = yes
# 	}

# 	option = { #Go for both consummation and relationship
# 		name = seduce_outcome.2309.a
# 		trigger = { seduce_outcome_become_lovers_trigger = yes } #Enabled if a player target said "lovers please" or target is AI

# 		owner_seduce_outcome_become_lovers_option_effects = yes

# 		ai_chance = {
# 			base = 100
# 		}
# 	}

# 	option = { #I'm just here for the fun time!
# 		name = seduce_outcome.2301.b
# 		trigger = { seduce_outcome_just_sex_trigger = yes } #Blocks this option for AI owners if the target is a player who said "lovers please"

# 		owner_seduce_outcome_just_sex_effects = yes

# 		ai_chance = {
# 			base = 0
# 			ai_value_modifier = {
# 				ai_greed = 0.25
# 				ai_vengefulness = 0.25
# 			}
# 		}
# 	}

# 	after = {
# 		scope:target = {
# 			trigger_event = seduce_outcome.3309
# 		}
# 		show_as_tooltip = {
# 			scope:scheme = {
# 				end_scheme = yes
# 			}
# 		}
# 	}
# }

######################################################
# SUCCESS EVENTS FOR TARGET (mirror of owner's)
# 3000-3999
######################################################

# Regula does not send any events to the target
# This is because only AI can ever be targeted by the Fascinare scheme, so we don't need any events for them

######################################################
# FAILURE EVENTS FOR OWNER
# 4000-4999
######################################################

# Failure without consequence
fascinare_outcome.4001 = {
	type = character_event
	title = fascinare_outcome.4001.t
	desc = {
		first_valid = {
			triggered_desc = {
				trigger = { scope:target = { relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = root } } }
				desc = fascinare_outcome.4001.incest.desc
			}
			desc = fascinare_outcome.4001.regular.desc
		}
	}

	theme = regula_theme
	override_background = {
		reference = sitting_room
	}
	left_portrait = {
		character = scope:target
		animation = paranoia
	}


	trigger = {
	}

	weight_multiplier = {
		base = 0.75
		modifier = {
			reverse_opinion = {
				target = scope:target
				value >= high_positive_opinion
			}
			factor = 1.3
		}
		modifier = {
			OR = {
				has_relation_friend = scope:target
				is_spouse_of = scope:target
			}
			factor = 1.3
		}
		modifier = { #Very unlikely if they don't dislike you
			NOR = {
				reverse_opinion = {
					target = scope:target
					value >= low_positive_opinion
				}
				AND = {
					scope:target = { ai_compassion >= medium_positive_ai_value }
					reverse_opinion = {
						target = scope:target
						value >= low_negative_opinion
					}
				}
			}
			factor = 0.1
		}
	}

	option = {
		name = fascinare_outcome.4001.a

		scope:target = { fascinare_cooldown_for_character_effect = { CHARACTER = scope:owner } }
		add_piety = 50
		scope:scheme = {
			end_scheme = yes
		}
	}
}

# Failure with reveal. Discovered.
fascinare_outcome.4005 = {
	type = character_event
	title = fascinare_outcome.4005.t
	desc = fascinare_outcome.4005.desc

	theme = regula_theme
	override_background = {
		reference = bedchamber
	}

	left_portrait = {
		character = scope:target
		animation = war_attacker
	}


	trigger = {
		exists = scope:scheme_discovered
		scope:target = {
			is_landed = no
			exists = liege
		}
	}

	immediate = {
		scope:target = { liege = { save_scope_as = target_liege } }
	}

	option = {
		name = fascinare_outcome.4005.a

		show_as_tooltip = {
			fascinare_outcome_publicised_attempted_crimes_or_nothing_effect = {
				TARGET = scope:target
				OWNER = scope:owner
			}
		} #Is actually applied in 4900

		scope:target = { fascinare_cooldown_for_character_effect = { CHARACTER = scope:owner } }
		add_opinion = {
			target = scope:owner
			modifier = fascinare_discovered_cooldown_opinion
		}
		scope:scheme = {
			end_scheme = yes
		}
		#Send "failed seduction attempt discovered" event to target's liege
		scope:target_liege = { trigger_event = seduce_outcome.4900 }
	}
}

# Automatic failure
fascinare_outcome.4006 = {
	type = character_event
	hidden = yes

	trigger = {
		global_var:ward_enslavement_events_enabled = no
	}

	immediate = {
		send_interface_message = {
			type = regula_fascinare_ward_charm_failure
			title = target_fascinare_failure_effect.desc
			left_icon = scope:target

			scope:target = {
				fascinare_cooldown_for_character_effect = { CHARACTER = scope:owner }
			}
			add_piety = 50
			scope:scheme = {
				end_scheme = yes
			}
		}
	}
}
