﻿namespace = lineages

## Need events instead of effects to avoid errors during the building of tooltips/descriptions

#################
# LINEAGE FOUNDERS 
#################
# PATRILINEAGE FOUNDER
lineages.0001 = {
	type = character_event
	hidden = yes

	immediate = {
		if = {
			limit = {
				has_character_flag = recipient_father
			}
			save_father_or_real_father_effect = yes
			scope:line_father = { save_scope_as = recipient }
		}
		else = {
			save_scope_as = recipient
		}
	
		scope:recipient = {
			# Assign scope:trait_level
			check_global_trait_level_assign_value_effect = { TRAIT = patrilineages }
			
			# First remove all lineage traits (should never be already a founder)
			remove_trait_rank_effect = { GROUP = patrilineages }
			mark_trait_rank_effect = { GROUP = patrilinefounder }
			mark_as_line_head_effect = { LINE = patrilineages }
			
			# Give trait to living and dead family members
			mark_children_effect = { LINE = patrilineages }
			
			# check for Bastards
			if = {
				limit = {
					has_game_rule = use_real_father
				}
				check_bastards_effect = { LINE = patrilineages }
			}
		}
	}
}

# MATRILINEAGE FOUNDER
lineages.0002 = {
	type = character_event
	hidden = yes

	immediate = {
		if = {
			limit = {
				has_character_flag = recipient_mother
			}
			mother = { save_scope_as = recipient }
		}
		else = {
			save_scope_as = recipient
		}

		scope:recipient = {
			# Assign scope:trait_level
			check_global_trait_level_assign_value_lesser_effect = { TRAIT = matrilineages }
			
			# First remove all lineage traits (should never be already a founder)
			remove_trait_rank_effect = { GROUP = matrilineages }
			mark_trait_rank_effect = { GROUP = matrilinefounder }
			mark_as_line_head_effect = { LINE = matrilineages }
			
			# Give trait to living and dead family members
			mark_children_effect = { LINE = matrilineages }
		}
	}
}

# FAMILY LINEAGE FOUNDER
lineages.0003 = {
	type = character_event
	hidden = yes

	immediate = {

		if = {
			limit = {
				has_character_flag = recipient_parent
			}
			save_father_or_real_father_effect = yes
			save_appropriate_dynasty_parent = yes
		}
		else = {
			save_scope_as = recipient
		}
	
		scope:recipient = {
			# Assign scope:trait_level
			check_global_trait_level_assign_value_effect = { TRAIT = dynastylineages }
			
			# First remove all lineage traits (should never be already a founder)
			remove_trait_rank_effect = { GROUP = dynastylineages }
			mark_trait_rank_effect = { GROUP = linefounder }
			mark_as_line_head_effect = { LINE = dynastylineages }
			
			# Give trait to living and dead family members
			mark_children_effect = { LINE = dynastylineages }
			
			# check for Bastards
			if = {
				limit = {
					has_game_rule = use_real_father
				}
				check_bastards_effect = { LINE = dynastylineages }
			}
		}
	}
}

################# 
# FAMILY MARKS 
#################
# CLOSE FAMILY MARK
lineages.0101 = {
	type = character_event
	hidden = yes

	immediate = {
		save_scope_as = actor
		
		every_close_family_member = {
			even_if_dead = yes
			remove_trait = extended_family_mark
			remove_trait = super_extended_family_mark
			add_trait = close_family_mark
		}
		
		# Marking self
		remove_trait = close_family_mark
		remove_trait = extended_family_mark
		remove_trait = super_extended_family_mark
		add_trait = self_family_mark
		
		# check for Bastards
		if = {
			limit = {
				has_game_rule = use_real_father
			}
			every_living_character = {
				limit = {
					exists = real_father
					real_father = scope:actor.real_father
					NOT = { has_trait = close_family_mark }
					NOT = { has_trait = self_family_mark }
				}
				remove_trait = extended_family_mark
				remove_trait = super_extended_family_mark
				add_trait = close_family_mark

				# Now check for those already dead among the closest ones
				every_close_family_member = {
					even_if_dead = yes
					limit = {
						exists = real_father
						real_father = scope:actor.real_father
						NOT = { has_trait = close_family_mark }
						NOT = { has_trait = self_family_mark }
					}
					remove_trait = extended_family_mark
					remove_trait = super_extended_family_mark
					add_trait = close_family_mark
				}
			}
		}

		# Set global variable
		set_global_variable = { 
			name = familymarks
			value = 1
		}
		mark_as_line_head_effect = { LINE = familymarks }
	}
}

# EXTENDED FAMILY MARK
lineages.0102 = {
	type = character_event
	hidden = yes

	immediate = {	
		every_extended_family_member = {
			even_if_dead = yes
			limit = { 
				NOT = { has_trait = close_family_mark }
			}
			remove_trait = super_extended_family_mark
			add_trait = extended_family_mark
		}

		# Marking self
		remove_trait = close_family_mark
		remove_trait = extended_family_mark
		remove_trait = super_extended_family_mark
		add_trait = self_family_mark

		# check for Bastards
		if = {
			limit = {
				has_game_rule = use_real_father
			}
			every_living_character = {
				limit = {
					exists = real_father
					real_father = { has_trait = close_family_mark }
					NOT = { has_trait = close_family_mark }
					NOT = { has_trait = self_family_mark }
				}
				remove_trait = super_extended_family_mark
				add_trait = extended_family_mark
				# Now check for those already dead among the closest ones
				every_close_family_member = {
					even_if_dead = yes
					limit = {
						exists = real_father
						real_father = { has_trait = close_family_mark }
						NOT = { has_trait = close_family_mark }
						NOT = { has_trait = self_family_mark }
					}
					remove_trait = super_extended_family_mark
					add_trait = extended_family_mark
				}
			}
		}

		# Set global variable
		set_global_variable = { 
			name = familymarks
			value = 2
		}
		mark_as_line_head_effect = { LINE = familymarks }
	}
}

# SUPER EXTENDED FAMILY MARK
lineages.0103 = {
	type = character_event
	hidden = yes

	immediate = {
		every_close_or_extended_family_member = {
			even_if_dead = yes
			every_close_or_extended_family_member = {
				even_if_dead = yes
				limit = { 
					NOT = {
						has_trait = self_family_mark
						has_trait = close_family_mark
						has_trait = extended_family_mark
					}
				}
				add_trait = super_extended_family_mark
			}
		}

		# Marking self
		remove_trait = close_family_mark
		remove_trait = extended_family_mark
		remove_trait = super_extended_family_mark
		add_trait = self_family_mark

		# check for Bastards
		if = {
			limit = {
				has_game_rule = use_real_father
			}
			every_living_character = {
				limit = {
					exists = real_father
					real_father = { has_trait = extended_family_mark }
					NOT = { has_trait = extended_family_mark }
					NOT = { has_trait = close_family_mark }
					NOT = { has_trait = self_family_mark }
				}
				add_trait = super_extended_family_mark
				# Now check for those already dead among the closest ones
				every_close_family_member = {
					even_if_dead = yes
					limit = {
						exists = real_father
						real_father = { has_trait = extended_family_mark }
						NOT = { has_trait = extended_family_mark }
						NOT = { has_trait = close_family_mark }
						NOT = { has_trait = self_family_mark }
					}
					add_trait = super_extended_family_mark
				}
			}
		}
		
		# Set global variable
		set_global_variable = { 
			name = familymarks
			value = 3
		}
		mark_as_line_head_effect = { LINE = familymarks }
	}
}

#################
# REMOVE LINEAGES 
#################
# Remove patrilineages
lineages.1001 = {
	type = character_event
	hidden = yes

	immediate = {
		# Direct Way
		if = {
			limit = {
				has_global_variable_list = patrilineages_head
			}
			save_scope_as = actor
			every_in_global_list = {
				variable = patrilineages_head
				save_scope_as = recent_parent_founder
				scope:actor = {
					remove_descendants = { LINE = patriline }
				}
			}
		}
		# Indirect Way
		else = {
			# FIRST, Attempt to find the oldest founders from the player's line
			search_for_recent_paternal_founders = yes

			# SECOND, try closest including dead
			every_close_or_extended_family_member = {
				even_if_dead = yes
				remove_trait_rank_effect = { GROUP = patrilineages }
				remove_trait_rank_effect = { GROUP = patrilinefounder }
			}
		}

		# Look for Bastards
		if = {
			limit = {
				has_game_rule = use_real_father
			}
			every_living_character = {
				remove_trait_rank_effect = { GROUP = patrilineages }
				remove_trait_rank_effect = { GROUP = patrilinefounder }
			}
		}

		# FINALLY, remove global variables
		remove_global_variable = patrilineages
		clear_global_variable_list = patrilineages_head
	}
}

# Remove matrilineages
lineages.1002 = {
	type = character_event
	hidden = yes

	immediate = {	
		# Direct Way
		if = {
			limit = {
				has_global_variable_list = matrilineages_head
			}
			save_scope_as = actor
			every_in_global_list = {
				variable = matrilineages_head
				save_scope_as = recent_parent_founder
				scope:actor = {
					remove_descendants = { LINE = matriline }
				}
			}
		}
		# Indirect Way
		else = {
			# FIRST, Attempt to find the oldest founders from the player's line
			search_for_recent_maternal_founders = yes

			# SECOND, try closest including dead
			every_close_or_extended_family_member = {
				even_if_dead = yes
				remove_trait_rank_effect = { GROUP = matrilineages }
				remove_trait_rank_effect = { GROUP = matrilinefounder }
			}
		}

		# FINALLY, remove global variables
		remove_global_variable = matrilineages
		clear_global_variable_list = matrilineages_head
	}
}

# Remove dynastylineages
lineages.1003 = {
	type = character_event
	hidden = yes

	immediate = {
		# Direct Way
		if = {
			limit = {
				has_global_variable_list = dynastylineages_head
			}
			save_scope_as = actor
			every_in_global_list = {
				variable = dynastylineages_head
				save_scope_as = recent_parent_founder
				scope:actor = {
					remove_descendants = { LINE = founder }
				}
			}
		}	
		# Indirect Way
		else = {
			# FIRST, Attempt to find the oldest founders from the player's line
			search_for_recent_dynasty_founders = yes

			# SECOND, try closest including dead
			every_close_or_extended_family_member = {
				even_if_dead = yes
				remove_trait_rank_effect = { GROUP = dynastylineages }
				remove_trait_rank_effect = { GROUP = linefounder }
			}
		}

		# LAST resort, try everyone living looking for Bastards
		if = {
			limit = {
				has_game_rule = use_real_father
			}
			every_living_character = {
				remove_trait_rank_effect = { GROUP = dynastylineages }
				remove_trait_rank_effect = { GROUP = linefounder }
			}
		}

		# FINALLY, remove global variables
		remove_global_variable = dynastylineages
		clear_global_variable_list = dynastylineages_head
	}
}

#################
# REMOVE FAMILY MARKS 
#################
lineages.1101 = {
	type = character_event
	hidden = yes

	immediate = {
		if = { # Use saved head
			limit = {
				has_global_variable_list = familymarks_head
			}
			every_in_global_list = {
				variable = familymarks_head
				remove_familymarks_decendants = yes
			}
		}
		else = { # Use the player
			remove_familymarks_decendants = yes
		}

		remove_global_variable = familymarks
		clear_global_variable_list = familymarks_head

	}
}

#################
# OTHER LINEAGES 
#################

# Good Lineage
lineages.2001 = {
	type = character_event
	hidden = yes

	immediate = { # original scope is recipient
		
		if = { # avoiding last-minute weirdness
			limit = {
				check_global_trait_not_set_trigger = { GROUP = goodlineages }
			}
			add_trait = good_lineage_founder
			mark_as_line_head_effect = { LINE = goodlineages }

			save_scope_value_as = {
				name = trait_level
				value = 1
			}
			
			# Give trait to living and dead family members
			mark_children_effect = { LINE = goodlineages } 
			
			# check for Bastards
			if = {
				limit = {
					has_game_rule = use_real_father
				}
				check_bastards_effect = { LINE = goodlineages }
			}

			set_global_variable = {
				name = goodlineages
				value = scope:trait_level
			}
		}

	}
}

# Bad Lineage
lineages.2002 = {
	type = character_event
	hidden = yes

	immediate = {

		if = { # avoiding last-minute weirdness
			limit = {
				check_global_trait_not_set_trigger = { GROUP = badlineages }
			}
			add_trait = bad_lineage_founder
			mark_as_line_head_effect = { LINE = badlineages }

			save_scope_value_as = {
				name = trait_level
				value = 1
			}
			
			# Give trait to living and dead family members
			mark_children_effect = { LINE = badlineages } 
			
			# check for Bastards
			if = {
				limit = {
					has_game_rule = use_real_father
				}
				check_bastards_effect = { LINE = badlineages }
			}

			set_global_variable = {
				name = badlineages
				value = scope:trait_level
			}
		}
	}
}

######

# Remove goodlineages
lineages.2101 = {
	type = character_event
	hidden = yes

	immediate = {	

		# Direct Way
		if = {
			limit = {
				has_global_variable_list = goodlineages_head
			}
			save_scope_as = actor
			every_in_global_list = {
				variable = goodlineages_head
				save_scope_as = recent_parent_founder
				scope:actor = {
					remove_descendants = { LINE = goodline }
				}
			}
		}
		# LAST resort, try everyone living looking for Bastards
		else = {
			every_living_character = {
				remove_trait_rank_effect = { GROUP = goodlineages }
				remove_trait_rank_effect = { GROUP = goodlinefounder }
			}
		}

		# FINALLY, remove global variables
		remove_global_variable = goodlineages
		clear_global_variable_list = goodlineages_head
	}
}

# Remove badlineages
lineages.2102 = {
	type = character_event
	hidden = yes

	immediate = {	

		# Direct Way
		if = {
			limit = {
				has_global_variable_list = badlineages_head
			}
			save_scope_as = actor
			every_in_global_list = {
				variable = badlineages_head
				save_scope_as = recent_parent_founder
				scope:actor = {
					remove_descendants = { LINE = badline }
				}
			}
		}
		# LAST resort, try everyone living looking for Bastards
		else = {
			every_living_character = {
				remove_trait_rank_effect = { GROUP = badlineages }
				remove_trait_rank_effect = { GROUP = badlinefounder }
			}
		}

		# FINALLY, remove global variables
		remove_global_variable = badlineages
		clear_global_variable_list = badlineages_head
	}
}