﻿# Keep the eight newest duel leaves.
bdp_battlefield_chronicle_prune_recent_duels_effect = {
	while = {
		count = 32
		limit = {
			any_memory = {
				count > 8
				OR = {
					has_memory_type = bdp_battlefield_duel_victory_memory
					has_memory_type = bdp_battlefield_duel_defeat_memory
				}
			}
		}

		bdp_battlefield_chronicle_save_recent_duels_effect = yes
		clear_saved_scope = bdp_chronicle_memory_to_remove
		ordered_memory = {
			limit = {
				OR = {
					has_memory_type = bdp_battlefield_duel_victory_memory
					has_memory_type = bdp_battlefield_duel_defeat_memory
				}
				NOR = {
					this = scope:bdp_chronicle_duel_1
					this = scope:bdp_chronicle_duel_2
					this = scope:bdp_chronicle_duel_3
					this = scope:bdp_chronicle_duel_4
					this = scope:bdp_chronicle_duel_5
					this = scope:bdp_chronicle_duel_6
					this = scope:bdp_chronicle_duel_7
					this = scope:bdp_chronicle_duel_8
				}
			}
			order_by = memory_creation_date
			save_scope_as = bdp_chronicle_memory_to_remove
		}
		if = {
			limit = { exists = scope:bdp_chronicle_memory_to_remove }
			destroy_character_memory = scope:bdp_chronicle_memory_to_remove
		}
	}
}

# Keep twelve ordinary opponents. Legendary opponents stay forever.
bdp_battlefield_chronicle_prune_opponent_records_effect = {
	while = {
		count = 32
		limit = {
			any_memory = {
				count > 12
				has_memory_type = bdp_battlefield_opponent_record_memory
				NOT = { has_variable = bdp_chronicle_landmark }
			}
		}

		clear_saved_scope = bdp_chronicle_opponent_record_to_remove
		ordered_memory = {
			limit = {
				has_memory_type = bdp_battlefield_opponent_record_memory
				NOT = { has_variable = bdp_chronicle_landmark }
			}
			order_by = {
				value = bdp_chronicle_saved_opponent_stature_value
				multiply = -1
			}
			save_scope_as = bdp_chronicle_opponent_record_to_remove
		}
		if = {
			limit = { exists = scope:bdp_chronicle_opponent_record_to_remove }
			destroy_character_memory = scope:bdp_chronicle_opponent_record_to_remove
		}
	}
}

# Save the battle details that will still exist after the war ends.
bdp_battlefield_chronicle_snapshot_duel_context_effect = {
	clear_saved_scope = bdp_chronicle_trial_by_combat_snapshot
	clear_saved_scope = bdp_chronicle_contract_duel_snapshot
	clear_saved_scope = bdp_chronicle_combat_snapshot
	clear_saved_scope = bdp_chronicle_battle_location_snapshot
	clear_saved_scope = bdp_chronicle_war_snapshot
	clear_saved_scope = bdp_chronicle_war_attacker_snapshot
	clear_saved_scope = bdp_chronicle_war_defender_snapshot
	clear_saved_scope = bdp_chronicle_war_type_snapshot

	if = {
		limit = {
			OR = {
				scope:sc_attacker = { has_character_flag = trial_by_combat }
				scope:sc_defender = { has_character_flag = trial_by_combat }
			}
		}
		save_scope_value_as = {
			name = bdp_chronicle_trial_by_combat_snapshot
			value = yes
		}
	}
	else_if = {
		limit = { exists = scope:task_contract }
		save_scope_value_as = {
			name = bdp_chronicle_contract_duel_snapshot
			value = yes
		}
	}
	else = {
		if = {
			limit = {
				exists = scope:bdp_ai_vs_ai_side_a
				scope:bdp_ai_vs_ai_side_a = {
					exists = combat
					combat = { exists = location }
				}
			}
			scope:bdp_ai_vs_ai_side_a.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}
		else_if = {
			limit = {
				exists = scope:battlefield_duel_seek_combat_target_army
				scope:battlefield_duel_seek_combat_target_army = {
					is_army_in_combat = yes
					exists = involved_combat_side.combat.location
				}
			}
			scope:battlefield_duel_seek_combat_target_army.involved_combat_side.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}
		else_if = {
			limit = {
				exists = scope:sc_attacker.commanding_army
				scope:sc_attacker.commanding_army = {
					is_army_in_combat = yes
					exists = involved_combat_side.combat.location
				}
			}
			scope:sc_attacker.commanding_army.involved_combat_side.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}
		else_if = {
			limit = {
				exists = scope:sc_attacker.knight_army
				scope:sc_attacker.knight_army = {
					is_army_in_combat = yes
					exists = involved_combat_side.combat.location
				}
			}
			scope:sc_attacker.knight_army.involved_combat_side.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}
		else_if = {
			limit = {
				exists = scope:sc_defender.commanding_army
				scope:sc_defender.commanding_army = {
					is_army_in_combat = yes
					exists = involved_combat_side.combat.location
				}
			}
			scope:sc_defender.commanding_army.involved_combat_side.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}
		else_if = {
			limit = {
				exists = scope:sc_defender.knight_army
				scope:sc_defender.knight_army = {
					is_army_in_combat = yes
					exists = involved_combat_side.combat.location
				}
			}
			scope:sc_defender.knight_army.involved_combat_side.combat = {
				save_scope_as = bdp_chronicle_combat_snapshot
			}
		}

		if = {
			limit = { exists = scope:bdp_chronicle_combat_snapshot }
			scope:bdp_chronicle_combat_snapshot = {
				location = { save_scope_as = bdp_chronicle_battle_location_snapshot }
				if = {
					limit = { exists = combat_war }
					combat_war = {
						save_scope_as = bdp_chronicle_war_snapshot
						if = {
							limit = { exists = primary_attacker }
							primary_attacker = { save_scope_as = bdp_chronicle_war_attacker_snapshot }
						}
						if = {
							limit = { exists = primary_defender }
							primary_defender = { save_scope_as = bdp_chronicle_war_defender_snapshot }
						}
						switch = {
							trigger = using_cb
							agot_independence_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_independence } }
							agot_duskendale_independence_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_independence } }
							independence_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_independence } }
							independence_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_independence } }
							tributary_independence_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_independence } }
							agot_liberty_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_liberty } }
							liberty_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_liberty } }
							agot_claimant_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_claimant } }
							agot_bastard_claimant_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_claimant } }
							agot_blackfyre_claim = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_claimant } }
							claimant_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_claimant } }
							claim_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_claim } }
							agot_rebellion_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_rebellion } }
							agot_revolt_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_rebellion } }
							reyne_rebellion = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_rebellion } }
							slavery_revolt = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_rebellion } }
							agot_succession_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_succession } }
							nation_fracturing_faction_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_dissolution } }
							county_conquest_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							duchy_conquest_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							ducal_conquest_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							agot_adventurer_conquest_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							agot_reconquest_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							pirate_adventurer_conquest = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_conquest } }
							tribal_subjugation_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_subjugation } }
							dragon_subjugation_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_subjugation } }
							admiral_subjugation_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_subjugation } }
							vassalization_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_vassalization } }
							invasion_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_invasion } }
							clan_invasion_war = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_invasion } }
							agot_targaryen_exile_invasion_war_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_invasion } }
							faegon_invasion_war_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_invasion } }
							fp2_border_raid = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_raid } }
							wildling_raid_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_raid } }
							slave_raid_cb = { save_scope_value_as = { name = bdp_chronicle_war_type_snapshot value = flag:bdp_chronicle_war_type_raid } }
						}
					}
				}
			}
		}
	}

	clear_saved_scope = bdp_chronicle_combat_snapshot
}

# Put the snapshot on the memory so old battles stay readable.
bdp_battlefield_chronicle_stamp_duel_context_effect = {
	if = {
		limit = { exists = scope:bdp_chronicle_trial_by_combat_snapshot }
		set_variable = bdp_chronicle_trial_by_combat
	}
	else_if = {
		limit = { exists = scope:bdp_chronicle_contract_duel_snapshot }
		set_variable = bdp_chronicle_contract_duel
	}
	if = {
		limit = { exists = scope:bdp_chronicle_battle_location_snapshot }
		set_variable = {
			name = bdp_chronicle_battle_location
			value = scope:bdp_chronicle_battle_location_snapshot
		}
	}
	if = {
		limit = { exists = scope:bdp_chronicle_war_attacker_snapshot }
		set_variable = {
			name = bdp_chronicle_war_attacker
			value = scope:bdp_chronicle_war_attacker_snapshot
		}
	}
	if = {
		limit = { exists = scope:bdp_chronicle_war_defender_snapshot }
		set_variable = {
			name = bdp_chronicle_war_defender
			value = scope:bdp_chronicle_war_defender_snapshot
		}
	}
	if = {
		limit = { exists = scope:bdp_chronicle_war_type_snapshot }
		set_variable = {
			name = bdp_chronicle_war_type_loc
			value = scope:bdp_chronicle_war_type_snapshot
		}
	}

}

bdp_battlefield_chronicle_count_war_for_character_effect = {
	if = {
		limit = { NOT = { has_variable = bdp_chronicle_war_tallies_started } }
		set_variable = bdp_chronicle_war_tallies_started
		set_variable = { name = bdp_chronicle_wars_with_duels value = 0 }
		if = {
			limit = {
				OR = {
					AND = {
						NOT = { has_variable = bdp_chronicle_victories }
						NOT = { has_variable = bdp_chronicle_defeats }
					}
					AND = {
						has_variable = bdp_chronicle_victories
						var:bdp_chronicle_victories = 0
						has_variable = bdp_chronicle_defeats
						var:bdp_chronicle_defeats = 0
					}
				}
			}
			set_variable = bdp_chronicle_war_tallies_complete
		}
	}
	change_variable = { name = bdp_chronicle_wars_with_duels add = 1 }
}

# AI joins Chronicle tracking only during a real AI-vs-AI duel.
bdp_battlefield_chronicle_record_duel_effect = {
	if = {
		limit = { exists = scope:bdp_chronicle_war_snapshot }
		scope:bdp_chronicle_war_snapshot = {
			if = {
				limit = {
						scope:sc_attacker = {
							OR = {
								is_ai = no
								has_character_flag = bdp_ai_vs_ai_chronicle_participant
							}
						}
					NOT = {
						is_target_in_variable_list = {
							name = bdp_chronicle_counted_human_duelists
							target = scope:sc_attacker
						}
					}
				}
				add_to_variable_list = {
					name = bdp_chronicle_counted_human_duelists
					target = scope:sc_attacker
				}
				scope:sc_attacker = { bdp_battlefield_chronicle_count_war_for_character_effect = yes }
			}
			if = {
				limit = {
						scope:sc_defender = {
							OR = {
								is_ai = no
								has_character_flag = bdp_ai_vs_ai_chronicle_participant
							}
						}
					NOT = {
						is_target_in_variable_list = {
							name = bdp_chronicle_counted_human_duelists
							target = scope:sc_defender
						}
					}
				}
				add_to_variable_list = {
					name = bdp_chronicle_counted_human_duelists
					target = scope:sc_defender
				}
				scope:sc_defender = { bdp_battlefield_chronicle_count_war_for_character_effect = yes }
			}
		}
	}
	clear_saved_scope = bdp_chronicle_war_snapshot

	if = {
		limit = {
			scope:sc_victor = {
				OR = {
					is_ai = no
					has_character_flag = bdp_ai_vs_ai_chronicle_participant
				}
			}
		}
		scope:sc_victor = {
			if = {
				limit = { NOT = { has_variable = bdp_chronicle_victories } }
				set_variable = { name = bdp_chronicle_victories value = 0 }
			}
			change_variable = { name = bdp_chronicle_victories add = 1 }
			if = {
				limit = { NOT = { has_variable = bdp_chronicle_outcome_tallies_started } }
				set_variable = bdp_chronicle_outcome_tallies_started
				set_variable = { name = bdp_chronicle_opponents_slain value = 0 }
				set_variable = { name = bdp_chronicle_opponents_spared value = 0 }
				set_variable = { name = bdp_chronicle_opponents_captured value = 0 }
				set_variable = { name = bdp_chronicle_opponents_maimed value = 0 }
				if = {
					limit = { var:bdp_chronicle_victories = 1 }
					set_variable = bdp_chronicle_outcome_tallies_complete
				}
			}
			if = {
				limit = { scope:sc_loser = { is_alive = no } }
				change_variable = { name = bdp_chronicle_opponents_slain add = 1 }
			}

			if = {
				limit = {
					NOT = {
						is_target_in_variable_list = {
							name = bdp_chronicle_opponents_defeated
							target = scope:sc_loser
						}
					}
				}
				add_to_variable_list = {
					name = bdp_chronicle_opponents_defeated
					target = scope:sc_loser
				}
				if = {
					limit = { NOT = { has_variable = bdp_chronicle_unique_opponents_defeated } }
					set_variable = { name = bdp_chronicle_unique_opponents_defeated value = 0 }
				}
				change_variable = { name = bdp_chronicle_unique_opponents_defeated add = 1 }
			}

			clear_saved_scope = bdp_chronicle_existing_opponent_record
			ordered_memory = {
				limit = {
					has_memory_type = bdp_battlefield_opponent_record_memory
					memory_participant:opponent = scope:sc_loser
				}
				order_by = memory_creation_date
				save_scope_as = bdp_chronicle_existing_opponent_record
			}

			create_character_memory = {
				type = bdp_battlefield_duel_victory_memory
				participants = { opponent = scope:sc_loser }
			}
			scope:new_memory = {
				bdp_battlefield_chronicle_stamp_duel_context_effect = yes
				set_variable = {
					name = bdp_chronicle_opponent_stature
					value = scope:bdp_battlefield_loser_stature_snapshot
				}
				set_variable = {
					name = bdp_chronicle_opponent_reputation
					value = scope:bdp_battlefield_loser_reputation_snapshot
				}
				if = {
					limit = { scope:sc_loser = { is_alive = no } }
					set_variable = { name = bdp_chronicle_outcome value = flag:slain }
					set_variable = bdp_chronicle_outcome_final
				}
				else = {
					scope:sc_victor = {
						set_variable = { name = bdp_chronicle_pending_outcome_memory value = scope:new_memory }
					}
				}
			}

			if = {
				limit = { exists = scope:bdp_chronicle_existing_opponent_record }
				scope:bdp_chronicle_existing_opponent_record = {
					change_variable = { name = bdp_chronicle_encounters add = 1 }
					change_variable = { name = bdp_chronicle_record_victories add = 1 }
					remove_variable = bdp_chronicle_outcome
					if = {
						limit = { scope:sc_loser = { is_alive = no } }
						set_variable = { name = bdp_chronicle_outcome value = flag:slain }
					}
				}
			}
			else = {
				create_character_memory = {
					type = bdp_battlefield_opponent_record_memory
					participants = { opponent = scope:sc_loser }
				}
				scope:new_memory = {
					bdp_battlefield_chronicle_stamp_duel_context_effect = yes
					set_variable = {
						name = bdp_chronicle_opponent_stature
						value = scope:bdp_battlefield_loser_stature_snapshot
					}
					set_variable = {
						name = bdp_chronicle_opponent_reputation
						value = scope:bdp_battlefield_loser_reputation_snapshot
					}
					set_variable = { name = bdp_chronicle_encounters value = 1 }
					set_variable = { name = bdp_chronicle_record_victories value = 1 }
					set_variable = { name = bdp_chronicle_record_defeats value = 0 }
					if = {
						limit = {
							OR = {
								scope:bdp_battlefield_loser_stature_snapshot >= 35
								scope:sc_loser = {
									AND = {
										has_variable = bdp_battlefield_reputation
										var:bdp_battlefield_reputation >= 60
									}
								}
								scope:sc_victor = {
									OR = {
										has_relation_rival = scope:sc_loser
										has_relation_nemesis = scope:sc_loser
									}
								}
							}
						}
						set_variable = bdp_chronicle_landmark
					}
					if = {
						limit = { scope:sc_loser = { is_alive = no } }
						set_variable = { name = bdp_chronicle_outcome value = flag:slain }
					}
				}
				bdp_battlefield_chronicle_prune_opponent_records_effect = yes
			}

			bdp_battlefield_chronicle_prune_recent_duels_effect = yes
		}
	}

	if = {
		limit = {
			scope:sc_loser = {
				is_alive = yes
				OR = {
					is_ai = no
					has_character_flag = bdp_ai_vs_ai_chronicle_participant
				}
			}
		}
		scope:sc_loser = {
			if = {
				limit = { NOT = { has_variable = bdp_chronicle_defeats } }
				set_variable = { name = bdp_chronicle_defeats value = 0 }
			}
			change_variable = { name = bdp_chronicle_defeats add = 1 }

			clear_saved_scope = bdp_chronicle_existing_opponent_record
			ordered_memory = {
				limit = {
					has_memory_type = bdp_battlefield_opponent_record_memory
					memory_participant:opponent = scope:sc_victor
				}
				order_by = memory_creation_date
				save_scope_as = bdp_chronicle_existing_opponent_record
			}
			if = {
				limit = { exists = scope:bdp_chronicle_existing_opponent_record }
				scope:bdp_chronicle_existing_opponent_record = {
					change_variable = { name = bdp_chronicle_encounters add = 1 }
					change_variable = { name = bdp_chronicle_record_defeats add = 1 }
					set_variable = { name = bdp_chronicle_outcome value = flag:defeated }
				}
			}

			create_character_memory = {
				type = bdp_battlefield_duel_defeat_memory
				participants = { opponent = scope:sc_victor }
			}
			scope:new_memory = {
				bdp_battlefield_chronicle_stamp_duel_context_effect = yes
			}
			if = {
				limit = { has_character_flag = bdp_ai_vs_ai_chronicle_participant }
				set_variable = { name = bdp_chronicle_pending_defeat_outcome_memory value = scope:new_memory }
			}
			bdp_battlefield_chronicle_prune_recent_duels_effect = yes
		}
	}
	else_if = {
		limit = { scope:sc_loser = { is_alive = no } }
		clear_saved_scope = bdp_chronicle_fatal_defeat_archive
		scope:sc_loser = {
			ordered_memory = {
				limit = { has_memory_type = bdp_battlefield_chronicle_archive_memory }
				order_by = memory_creation_date
				save_scope_as = bdp_chronicle_fatal_defeat_archive
			}
		}
		if = {
			limit = { exists = scope:bdp_chronicle_fatal_defeat_archive }
			scope:bdp_chronicle_fatal_defeat_archive = {
				change_variable = { name = bdp_chronicle_archived_defeats add = 1 }
			}
		}
	}
}

# Stamp the result onto the leaves already made by reputation.
bdp_battlefield_chronicle_mark_latest_victory_outcome_effect = {
	clear_saved_scope = bdp_chronicle_latest_victory
	if = {
		limit = { has_variable = bdp_chronicle_pending_outcome_memory }
		var:bdp_chronicle_pending_outcome_memory = {
			if = {
				limit = {
					has_memory_type = bdp_battlefield_duel_victory_memory
					memory_participant:opponent = $OPPONENT$
					NOT = { has_variable = bdp_chronicle_outcome_final }
				}
				save_scope_as = bdp_chronicle_latest_victory
			}
		}
	}
	if = {
		limit = { exists = scope:bdp_chronicle_latest_victory }
		change_variable = { name = bdp_chronicle_opponents_$OUTCOME$ add = 1 }
		scope:bdp_chronicle_latest_victory = {
			set_variable = { name = bdp_chronicle_outcome value = flag:$OUTCOME$ }
			set_variable = bdp_chronicle_outcome_final
		}
	}
	remove_variable = bdp_chronicle_pending_outcome_memory

	clear_saved_scope = bdp_chronicle_outcome_opponent_record
	ordered_memory = {
		limit = {
			exists = scope:bdp_chronicle_latest_victory
			has_memory_type = bdp_battlefield_opponent_record_memory
			memory_participant:opponent = $OPPONENT$
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_outcome_opponent_record
	}
	if = {
		limit = { exists = scope:bdp_chronicle_outcome_opponent_record }
		scope:bdp_chronicle_outcome_opponent_record = {
			set_variable = { name = bdp_chronicle_outcome value = flag:$OUTCOME$ }
		}
	}
}

# The loser gets their own leaf too. Nothing goes into an uninvolved Chronicle.
bdp_battlefield_chronicle_mark_latest_defeat_outcome_effect = {
	clear_saved_scope = bdp_chronicle_latest_defeat
	if = {
		limit = { has_variable = bdp_chronicle_pending_defeat_outcome_memory }
		var:bdp_chronicle_pending_defeat_outcome_memory = {
			if = {
				limit = {
					has_memory_type = bdp_battlefield_duel_defeat_memory
					memory_participant:opponent = $OPPONENT$
					NOT = { has_variable = bdp_chronicle_outcome_final }
				}
				save_scope_as = bdp_chronicle_latest_defeat
			}
		}
	}
	if = {
		limit = { exists = scope:bdp_chronicle_latest_defeat }
		scope:bdp_chronicle_latest_defeat = {
			set_variable = { name = bdp_chronicle_outcome value = flag:$OUTCOME$ }
			set_variable = bdp_chronicle_outcome_final
		}
	}
	remove_variable = bdp_chronicle_pending_defeat_outcome_memory
}

bdp_battlefield_chronicle_save_recent_duels_effect = {
	clear_saved_scope = bdp_chronicle_duel_1
	clear_saved_scope = bdp_chronicle_duel_2
	clear_saved_scope = bdp_chronicle_duel_3
	clear_saved_scope = bdp_chronicle_duel_4
	clear_saved_scope = bdp_chronicle_duel_5
	clear_saved_scope = bdp_chronicle_duel_6
	clear_saved_scope = bdp_chronicle_duel_7
	clear_saved_scope = bdp_chronicle_duel_8

	ordered_memory = {
		limit = { OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory } }
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_1
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOT = { this = scope:bdp_chronicle_duel_1 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_2
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_3
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 this = scope:bdp_chronicle_duel_3 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_4
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 this = scope:bdp_chronicle_duel_3 this = scope:bdp_chronicle_duel_4 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_5
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 this = scope:bdp_chronicle_duel_3 this = scope:bdp_chronicle_duel_4 this = scope:bdp_chronicle_duel_5 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_6
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 this = scope:bdp_chronicle_duel_3 this = scope:bdp_chronicle_duel_4 this = scope:bdp_chronicle_duel_5 this = scope:bdp_chronicle_duel_6 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_7
	}
	ordered_memory = {
		limit = {
			OR = { has_memory_type = bdp_battlefield_duel_victory_memory has_memory_type = bdp_battlefield_duel_defeat_memory }
			NOR = { this = scope:bdp_chronicle_duel_1 this = scope:bdp_chronicle_duel_2 this = scope:bdp_chronicle_duel_3 this = scope:bdp_chronicle_duel_4 this = scope:bdp_chronicle_duel_5 this = scope:bdp_chronicle_duel_6 this = scope:bdp_chronicle_duel_7 }
		}
		order_by = memory_creation_date
		save_scope_as = bdp_chronicle_duel_8
	}
}

bdp_battlefield_chronicle_save_opponent_records_effect = {
	clear_saved_scope = bdp_chronicle_opponent_1
	clear_saved_scope = bdp_chronicle_opponent_2
	clear_saved_scope = bdp_chronicle_opponent_3
	clear_saved_scope = bdp_chronicle_opponent_4
	clear_saved_scope = bdp_chronicle_opponent_5
	clear_saved_scope = bdp_chronicle_opponent_6
	clear_saved_scope = bdp_chronicle_opponent_7
	clear_saved_scope = bdp_chronicle_opponent_8
	clear_saved_scope = bdp_chronicle_opponent_9
	clear_saved_scope = bdp_chronicle_opponent_10
	clear_saved_scope = bdp_chronicle_opponent_11
	clear_saved_scope = bdp_chronicle_opponent_12

	ordered_memory = {
		limit = { has_memory_type = bdp_battlefield_opponent_record_memory }
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_1
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOT = { this = scope:bdp_chronicle_opponent_1 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_2
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_3
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_4
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_5
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_6
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_7
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 this = scope:bdp_chronicle_opponent_7 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_8
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 this = scope:bdp_chronicle_opponent_7 this = scope:bdp_chronicle_opponent_8 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_9
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 this = scope:bdp_chronicle_opponent_7 this = scope:bdp_chronicle_opponent_8 this = scope:bdp_chronicle_opponent_9 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_10
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 this = scope:bdp_chronicle_opponent_7 this = scope:bdp_chronicle_opponent_8 this = scope:bdp_chronicle_opponent_9 this = scope:bdp_chronicle_opponent_10 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_11
	}
	ordered_memory = {
		limit = {
			has_memory_type = bdp_battlefield_opponent_record_memory
			NOR = { this = scope:bdp_chronicle_opponent_1 this = scope:bdp_chronicle_opponent_2 this = scope:bdp_chronicle_opponent_3 this = scope:bdp_chronicle_opponent_4 this = scope:bdp_chronicle_opponent_5 this = scope:bdp_chronicle_opponent_6 this = scope:bdp_chronicle_opponent_7 this = scope:bdp_chronicle_opponent_8 this = scope:bdp_chronicle_opponent_9 this = scope:bdp_chronicle_opponent_10 this = scope:bdp_chronicle_opponent_11 }
		}
		order_by = bdp_chronicle_saved_opponent_stature_value
		save_scope_as = bdp_chronicle_opponent_12
	}
}

# Keep the dynasty's ten newest sealed Chronicles.
bdp_battlefield_chronicle_archive_player_effect = {
	if = {
		limit = {
			is_ai = no
			has_variable = bdp_battlefield_reputation
			exists = dynasty
		}
		save_scope_as = bdp_chronicle_archived_character
		dynasty = { save_scope_as = bdp_chronicle_archive_dynasty }
		create_character_memory = { type = bdp_battlefield_chronicle_archive_memory }
		scope:new_memory = {
			set_variable = { name = bdp_chronicle_archived_character value = scope:bdp_chronicle_archived_character }
			set_variable = { name = bdp_chronicle_archived_reputation value = scope:bdp_chronicle_archived_character.var:bdp_battlefield_reputation }
			set_variable = { name = bdp_chronicle_archived_victories value = 0 }
			set_variable = { name = bdp_chronicle_archived_defeats value = 0 }
			set_variable = { name = bdp_chronicle_archived_unique_opponents value = 0 }
			if = {
				limit = { scope:bdp_chronicle_archived_character = { has_variable = bdp_chronicle_victories } }
				set_variable = { name = bdp_chronicle_archived_victories value = scope:bdp_chronicle_archived_character.var:bdp_chronicle_victories }
			}
			if = {
				limit = { scope:bdp_chronicle_archived_character = { has_variable = bdp_chronicle_defeats } }
				set_variable = { name = bdp_chronicle_archived_defeats value = scope:bdp_chronicle_archived_character.var:bdp_chronicle_defeats }
			}
			if = {
				limit = { scope:bdp_chronicle_archived_character = { has_variable = bdp_chronicle_unique_opponents_defeated } }
				set_variable = { name = bdp_chronicle_archived_unique_opponents value = scope:bdp_chronicle_archived_character.var:bdp_chronicle_unique_opponents_defeated }
			}
			save_scope_as = bdp_chronicle_new_archive
		}

		scope:bdp_chronicle_archive_dynasty = {
			if = {
				limit = { has_variable = bdp_chronicle_archive_9 }
				set_variable = { name = bdp_chronicle_archive_10 value = var:bdp_chronicle_archive_9 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_8 }
				set_variable = { name = bdp_chronicle_archive_9 value = var:bdp_chronicle_archive_8 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_7 }
				set_variable = { name = bdp_chronicle_archive_8 value = var:bdp_chronicle_archive_7 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_6 }
				set_variable = { name = bdp_chronicle_archive_7 value = var:bdp_chronicle_archive_6 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_5 }
				set_variable = { name = bdp_chronicle_archive_6 value = var:bdp_chronicle_archive_5 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_4 }
				set_variable = { name = bdp_chronicle_archive_5 value = var:bdp_chronicle_archive_4 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_3 }
				set_variable = { name = bdp_chronicle_archive_4 value = var:bdp_chronicle_archive_3 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_2 }
				set_variable = { name = bdp_chronicle_archive_3 value = var:bdp_chronicle_archive_2 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_1 }
				set_variable = { name = bdp_chronicle_archive_2 value = var:bdp_chronicle_archive_1 }
			}
			set_variable = { name = bdp_chronicle_archive_1 value = scope:bdp_chronicle_new_archive }
		}
	}
}

bdp_battlefield_chronicle_save_past_records_effect = {
	clear_saved_scope = bdp_chronicle_past_record_1
	clear_saved_scope = bdp_chronicle_past_record_2
	clear_saved_scope = bdp_chronicle_past_record_3
	clear_saved_scope = bdp_chronicle_past_record_4
	clear_saved_scope = bdp_chronicle_past_record_5
	clear_saved_scope = bdp_chronicle_past_record_6
	clear_saved_scope = bdp_chronicle_past_record_7
	clear_saved_scope = bdp_chronicle_past_record_8
	clear_saved_scope = bdp_chronicle_past_record_9
	clear_saved_scope = bdp_chronicle_past_record_10
	set_variable = { name = bdp_chronicle_archive_count value = 0 }
	if = {
		limit = { exists = dynasty }
		save_scope_as = bdp_chronicle_archive_reader
		dynasty = {
			if = {
				limit = {
					NOT = { has_variable = bdp_chronicle_archive_1 }
					scope:bdp_chronicle_archive_reader = { has_variable = bdp_chronicle_archive_1 }
				}
				set_variable = { name = bdp_chronicle_archive_1 value = scope:bdp_chronicle_archive_reader.var:bdp_chronicle_archive_1 }
				if = {
					limit = { scope:bdp_chronicle_archive_reader = { has_variable = bdp_chronicle_archive_2 } }
					set_variable = { name = bdp_chronicle_archive_2 value = scope:bdp_chronicle_archive_reader.var:bdp_chronicle_archive_2 }
				}
				if = {
					limit = { scope:bdp_chronicle_archive_reader = { has_variable = bdp_chronicle_archive_3 } }
					set_variable = { name = bdp_chronicle_archive_3 value = scope:bdp_chronicle_archive_reader.var:bdp_chronicle_archive_3 }
				}
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_1 }
				var:bdp_chronicle_archive_1 = { save_scope_as = bdp_chronicle_past_record_1 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_2 }
				var:bdp_chronicle_archive_2 = { save_scope_as = bdp_chronicle_past_record_2 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_3 }
				var:bdp_chronicle_archive_3 = { save_scope_as = bdp_chronicle_past_record_3 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_4 }
				var:bdp_chronicle_archive_4 = { save_scope_as = bdp_chronicle_past_record_4 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_5 }
				var:bdp_chronicle_archive_5 = { save_scope_as = bdp_chronicle_past_record_5 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_6 }
				var:bdp_chronicle_archive_6 = { save_scope_as = bdp_chronicle_past_record_6 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_7 }
				var:bdp_chronicle_archive_7 = { save_scope_as = bdp_chronicle_past_record_7 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_8 }
				var:bdp_chronicle_archive_8 = { save_scope_as = bdp_chronicle_past_record_8 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_9 }
				var:bdp_chronicle_archive_9 = { save_scope_as = bdp_chronicle_past_record_9 }
			}
			if = {
				limit = { has_variable = bdp_chronicle_archive_10 }
				var:bdp_chronicle_archive_10 = { save_scope_as = bdp_chronicle_past_record_10 }
			}
		}
	}
	if = { limit = { exists = scope:bdp_chronicle_past_record_1 } set_variable = { name = bdp_chronicle_archive_count value = 1 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_2 } set_variable = { name = bdp_chronicle_archive_count value = 2 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_3 } set_variable = { name = bdp_chronicle_archive_count value = 3 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_4 } set_variable = { name = bdp_chronicle_archive_count value = 4 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_5 } set_variable = { name = bdp_chronicle_archive_count value = 5 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_6 } set_variable = { name = bdp_chronicle_archive_count value = 6 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_7 } set_variable = { name = bdp_chronicle_archive_count value = 7 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_8 } set_variable = { name = bdp_chronicle_archive_count value = 8 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_9 } set_variable = { name = bdp_chronicle_archive_count value = 9 } }
	if = { limit = { exists = scope:bdp_chronicle_past_record_10 } set_variable = { name = bdp_chronicle_archive_count value = 10 } }
}

bdp_battlefield_chronicle_restore_archive_view_scopes_effect = {
	clear_saved_scope = bdp_chronicle_archive_record
	clear_saved_scope = bdp_chronicle_archive_subject
	if = {
		limit = { has_variable = bdp_chronicle_archive_view_record }
		var:bdp_chronicle_archive_view_record = {
			save_scope_as = bdp_chronicle_archive_record
			if = {
				limit = { has_variable = bdp_chronicle_archived_character }
				var:bdp_chronicle_archived_character = { save_scope_as = bdp_chronicle_archive_subject }
			}
			else = {
				# Old saves recover the subject from the memory owner.
				memory_owner = { save_scope_as = bdp_chronicle_archive_subject }
			}
		}
	}
}

bdp_battlefield_chronicle_prepare_archive_view_effect = {
	bdp_battlefield_chronicle_restore_archive_view_scopes_effect = yes
	if = {
		limit = {
			exists = scope:bdp_chronicle_archive_record
			exists = scope:bdp_chronicle_archive_subject
		}
		set_variable = { name = bdp_chronicle_archive_view_subject value = scope:bdp_chronicle_archive_subject }
		set_variable = { name = bdp_chronicle_archive_display_reputation value = 0 }
		set_variable = { name = bdp_chronicle_archive_display_victories value = 0 }
		set_variable = { name = bdp_chronicle_archive_display_defeats value = 0 }
		set_variable = { name = bdp_chronicle_archive_display_unique_opponents value = 0 }
		if = {
			limit = { scope:bdp_chronicle_archive_record = { has_variable = bdp_chronicle_archived_reputation } }
			set_variable = { name = bdp_chronicle_archive_display_reputation value = scope:bdp_chronicle_archive_record.var:bdp_chronicle_archived_reputation }
		}
		if = {
			limit = { scope:bdp_chronicle_archive_record = { has_variable = bdp_chronicle_archived_victories } }
			set_variable = { name = bdp_chronicle_archive_display_victories value = scope:bdp_chronicle_archive_record.var:bdp_chronicle_archived_victories }
		}
		if = {
			limit = { scope:bdp_chronicle_archive_record = { has_variable = bdp_chronicle_archived_defeats } }
			set_variable = { name = bdp_chronicle_archive_display_defeats value = scope:bdp_chronicle_archive_record.var:bdp_chronicle_archived_defeats }
		}
		if = {
			limit = { scope:bdp_chronicle_archive_record = { has_variable = bdp_chronicle_archived_unique_opponents } }
			set_variable = { name = bdp_chronicle_archive_display_unique_opponents value = scope:bdp_chronicle_archive_record.var:bdp_chronicle_archived_unique_opponents }
		}
		set_variable = { name = bdp_chronicle_archive_display_contests value = var:bdp_chronicle_archive_display_victories }
		change_variable = { name = bdp_chronicle_archive_display_contests add = var:bdp_chronicle_archive_display_defeats }
	}
}

bdp_battlefield_chronicle_save_attestor_effect = {
	clear_saved_scope = bdp_chronicle_attestor
	if = { limit = { has_variable = bdp_chronicle_attestor } remove_variable = bdp_chronicle_attestor }
	set_variable = { name = bdp_chronicle_attestor_kind value = 0 }
	if = {
		limit = { exists = court_position:chronicler_court_position }
		court_position:chronicler_court_position = { save_scope_as = bdp_chronicle_attestor }
		set_variable = { name = bdp_chronicle_attestor value = scope:bdp_chronicle_attestor }
		set_variable = { name = bdp_chronicle_attestor_kind value = 1 }
	}
	else_if = {
		limit = { exists = court_position:maester_court_position }
		court_position:maester_court_position = { save_scope_as = bdp_chronicle_attestor }
		set_variable = { name = bdp_chronicle_attestor value = scope:bdp_chronicle_attestor }
		set_variable = { name = bdp_chronicle_attestor_kind value = 2 }
	}
}
