﻿murder_success_pre_filter_on_action = {
	on_actions = {
		agse_squire_murder_witness_check
	}
}

on_death = {
	on_actions = {
		agse_squire_cruel_execution_check
	}
}

quarterly_playable_pulse = {
	on_actions = {
		agse_squire_torture_memory_check
	}
}

on_game_start_after_lobby = {
	on_actions = {
		agse_squire_torture_memory_baseline
	}
}

agse_squire_murder_witness_check = {
	trigger = {
		exists = scope:owner
		exists = scope:target
		scope:owner = {
			agse_knight_with_squire_trigger = yes
			NOT = { has_character_flag = agse_knight_disillusionment_pending }
			any_relation = {
				type = agot_squire
				agse_valid_disillusionment_squire_trigger = { KNIGHT = scope:owner }
				location = scope:owner.location
			}
		}
		scope:target = {
			is_alive = yes
			location = scope:owner.location
		}
	}

	effect = {
		random = {
			chance = 35
			modifier = {
				factor = 0.4
				scope:owner = { is_ai = yes }
			}
			scope:owner = {
				random_relation = {
					type = agot_squire
					limit = {
						agse_valid_disillusionment_squire_trigger = { KNIGHT = scope:owner }
						location = scope:owner.location
					}
					save_scope_as = agse_disillusionment_squire
				}
				agse_queue_murder_witness_effect = {
					SQUIRE = scope:agse_disillusionment_squire
					VICTIM = scope:target
				}
			}
		}
	}
}

agse_squire_cruel_execution_check = {
	trigger = {
		exists = scope:killer
		scope:killer = {
			agse_knight_with_squire_trigger = yes
			NOT = { has_character_flag = agse_knight_disillusionment_pending }
			any_relation = {
				type = agot_squire
				agse_valid_disillusionment_squire_trigger = { KNIGHT = scope:killer }
				location = scope:killer.location
			}
		}
	}

	effect = {
		root = { save_scope_as = agse_execution_victim }
		scope:killer = {
			random_relation = {
				type = agot_squire
				limit = {
					agse_valid_disillusionment_squire_trigger = { KNIGHT = scope:killer }
					location = scope:killer.location
				}
				save_scope_as = agse_execution_squire
			}
			# on_death runs before they are actually dead, so check the finished death one day later.
			trigger_event = {
				id = agse_squire_events.2360
				days = 1
			}
		}
	}
}

agse_squire_torture_memory_baseline = {
	effect = {
		every_player = {
			if = {
				limit = { NOT = { has_character_flag = agse_disillusionment_torture_tracking_ready } }
				# Do not let old torture memories fire this when the patch first enters a save.
				every_memory = {
					memory_type = torturer_memory
					set_variable = agse_disillusionment_checked
				}
				add_character_flag = agse_disillusionment_torture_tracking_ready
			}
		}
	}
}

agse_squire_torture_memory_check = {
	trigger = {
		is_ai = no
		is_alive = yes
		is_playable_character = yes
		num_of_relation_agot_squire > 0
	}

	effect = {
		ordered_memory = {
			memory_type = torturer_memory
			order_by = memory_creation_date
			save_scope_as = agse_latest_torturer_memory
		}
		if = {
			limit = {
				exists = scope:agse_latest_torturer_memory
				scope:agse_latest_torturer_memory = {
					NOT = { has_variable = agse_disillusionment_checked }
				}
			}
			scope:agse_latest_torturer_memory = {
				memory_participant:victim ?= { save_scope_as = agse_disillusionment_other }
			}
			every_memory = {
				memory_type = torturer_memory
				limit = { NOT = { has_variable = agse_disillusionment_checked } }
				set_variable = agse_disillusionment_checked
			}
			if = {
				limit = {
					exists = scope:agse_disillusionment_other
					NOT = { has_character_flag = agse_knight_disillusionment_pending }
					any_relation = {
						type = agot_squire
						agse_valid_disillusionment_squire_trigger = { KNIGHT = root }
						location = root.location
					}
				}
				random = {
					chance = 30
					random_relation = {
						type = agot_squire
						limit = {
							agse_valid_disillusionment_squire_trigger = { KNIGHT = root }
							location = root.location
						}
						save_scope_as = agse_disillusionment_squire
					}
					agse_queue_knight_disillusionment_effect = {
						SQUIRE = scope:agse_disillusionment_squire
						OTHER = scope:agse_disillusionment_other
						CAUSE = torture
					}
				}
			}
		}
	}
}

agse_squire_ai_torture_memory_check = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
	}

	effect = {
		if = {
			limit = { NOT = { has_character_flag = agse_disillusionment_torture_tracking_ready } }
			# First pass only marks old memories. No ancient torture jump-scares, mah boi.
			every_memory = {
				memory_type = torturer_memory
				set_variable = agse_disillusionment_checked
			}
			add_character_flag = agse_disillusionment_torture_tracking_ready
		}
		else = {
			ordered_memory = {
				memory_type = torturer_memory
				order_by = memory_creation_date
				save_scope_as = agse_latest_torturer_memory
			}
			if = {
				limit = {
					exists = scope:agse_latest_torturer_memory
					scope:agse_latest_torturer_memory = {
						NOT = { has_variable = agse_disillusionment_checked }
					}
				}
				scope:agse_latest_torturer_memory = {
					memory_participant:victim ?= { save_scope_as = agse_disillusionment_other }
				}
				every_memory = {
					memory_type = torturer_memory
					limit = { NOT = { has_variable = agse_disillusionment_checked } }
					set_variable = agse_disillusionment_checked
				}
				if = {
					limit = {
						exists = scope:agse_disillusionment_other
						NOT = { has_character_flag = agse_knight_disillusionment_pending }
						any_relation = {
							type = agot_squire
							agse_valid_disillusionment_squire_trigger = { KNIGHT = root }
							location = root.location
						}
					}
					random = {
						chance = 12
						random_relation = {
							type = agot_squire
							limit = {
								agse_valid_disillusionment_squire_trigger = { KNIGHT = root }
								location = root.location
							}
							save_scope_as = agse_disillusionment_squire
						}
						agse_queue_knight_disillusionment_effect = {
							SQUIRE = scope:agse_disillusionment_squire
							OTHER = scope:agse_disillusionment_other
							CAUSE = torture
						}
					}
				}
			}
		}
	}
}
