﻿# Generous Motherhood
# 0001 - Hidden: after each birth, syncs the trait, announces a new level, gives Mother's Milk
# 0100 - Level-up popup (gui/event_windows/gm_motherhood_event.gui), for the mother if she is a
#        player and for every player who shares her bed

namespace = gm_motherhood

# Root is the mother, scope:child the newborn (from on_birth_mother)
gm_motherhood.0001 = {
	hidden = yes

	trigger = {
		is_female = yes
		is_alive = yes
	}

	immediate = {
		save_scope_value_as = {
			name = gm_old_level
			value = gm_trait_level
		}
		gm_sync_trait_effect = yes
		if = {
			limit = { gm_trait_level > scope:gm_old_level }
			gm_announce_level_effect = yes
		}
		# Only children born while she has the trait, and only if she lives to nurse them
		if = {
			limit = {
				has_trait = gm_nourishing_mother
				NOT = { has_character_flag = birth_mother_will_die }
				exists = scope:child
				scope:child = { is_alive = yes }
			}
			gm_give_mothers_milk_effect = yes
		}
	}
}

# Root is the player who sees it: the mother herself, or one of her bed partners.
# Scene by level, mother always in left_portrait (centre of the window):
#   1: holding her newborn, her husband (or concubinist) in love, three of her children
#   2: compassionate, four of her children
#   3: ecstatic, her bed partners cheering and admiring
#   4: zealous, the two nearest praying, the two outer ones curtseying
# At levels 3 and 4, slots her bed partners leave empty go to her court musician (playing the lute),
# her court chaplain, then her siblings.
# Slots in the window: a = right_portrait (inner right), b = lower_left_portrait (inner left),
# c = lower_right_portrait (outer right), d = lower_center_portrait (outer left).
gm_motherhood.0100 = {
	type = character_event
	window = gm_motherhood_event
	theme = faith

	title = {
		first_valid = {
			triggered_desc = {
				trigger = { scope:gm_level = 1 }
				desc = gm_motherhood.0100.t1
			}
			triggered_desc = {
				trigger = { scope:gm_level = 2 }
				desc = gm_motherhood.0100.t2
			}
			triggered_desc = {
				trigger = { scope:gm_level = 3 }
				desc = gm_motherhood.0100.t3
			}
			triggered_desc = {
				trigger = {
					scope:gm_mother = {
						faith = { religion = { is_in_family = rf_abrahamic } }
					}
				}
				desc = gm_motherhood.0100.t4
			}
			desc = gm_motherhood.0100.t4_goddess
		}
	}

	desc = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:gm_level = 1
					this = scope:gm_mother
				}
				desc = gm_motherhood.0100.desc1_mother
			}
			triggered_desc = {
				trigger = { scope:gm_level = 1 }
				desc = gm_motherhood.0100.desc1_partner
			}
			triggered_desc = {
				trigger = {
					scope:gm_level = 2
					this = scope:gm_mother
				}
				desc = gm_motherhood.0100.desc2_mother
			}
			triggered_desc = {
				trigger = { scope:gm_level = 2 }
				desc = gm_motherhood.0100.desc2_partner
			}
			triggered_desc = {
				trigger = {
					scope:gm_level = 3
					this = scope:gm_mother
				}
				desc = gm_motherhood.0100.desc3_mother
			}
			triggered_desc = {
				trigger = { scope:gm_level = 3 }
				desc = gm_motherhood.0100.desc3_partner
			}
			triggered_desc = {
				trigger = { this = scope:gm_mother }
				desc = gm_motherhood.0100.desc4_mother
			}
			desc = gm_motherhood.0100.desc4_partner
		}
		# Closing line about the people around her, only when they are in the scene
		first_valid = {
			triggered_desc = {
				trigger = {
					this = scope:gm_mother
					scope:gm_level = 1
					exists = scope:gm_slot_a
				}
				desc = gm_motherhood.0100.desc1_mother_spouse
			}
			triggered_desc = {
				trigger = {
					this = scope:gm_mother
					scope:gm_level = 3
					exists = scope:gm_scene_has_partners
				}
				desc = gm_motherhood.0100.desc3_mother_partners
			}
			triggered_desc = {
				trigger = {
					this = scope:gm_mother
					scope:gm_level = 3
					exists = scope:gm_slot_a
				}
				desc = gm_motherhood.0100.desc3_mother_court
			}
			triggered_desc = {
				trigger = {
					this = scope:gm_mother
					scope:gm_level >= 4
					exists = scope:gm_scene_has_partners
				}
				desc = gm_motherhood.0100.desc4_mother_partners
			}
			triggered_desc = {
				trigger = {
					this = scope:gm_mother
					scope:gm_level >= 4
					exists = scope:gm_slot_a
				}
				desc = gm_motherhood.0100.desc4_mother_court
			}
			desc = gm_motherhood.0100.desc_none
		}
	}

	override_background = {
		trigger = { scope:gm_level = 1 }
		reference = bedchamber
	}
	override_background = {
		trigger = { scope:gm_level = 2 }
		reference = bp2_nursery
	}
	override_background = {
		trigger = { scope:gm_level = 3 }
		reference = throne_room
	}
	override_background = {
		reference = temple
	}

	left_portrait = {
		character = scope:gm_mother
		triggered_animation = {
			trigger = { scope:gm_level = 1 }
			animation = newborn
		}
		triggered_animation = {
			trigger = { scope:gm_level = 2 }
			animation = personality_compassionate
		}
		triggered_animation = {
			trigger = { scope:gm_level = 3 }
			animation = ecstasy
		}
		animation = personality_zealous
	}
	right_portrait = {
		character = scope:gm_slot_a
		trigger = { exists = scope:gm_slot_a }
		triggered_animation = {
			trigger = {
				scope:gm_level >= 3
				exists = scope:gm_musician
				scope:gm_slot_a = scope:gm_musician
			}
			animation = lute_active
		}
		triggered_animation = {
			trigger = { scope:gm_level = 1 }
			animation = love
		}
		triggered_animation = {
			trigger = { scope:gm_level = 2 }
			animation = happiness
		}
		triggered_animation = {
			trigger = { scope:gm_level = 3 }
			animation = throne_room_cheer_1
		}
		animation = prayer
	}
	lower_left_portrait = {
		character = scope:gm_slot_b
		trigger = { exists = scope:gm_slot_b }
		triggered_animation = {
			trigger = {
				scope:gm_level >= 3
				exists = scope:gm_musician
				scope:gm_slot_b = scope:gm_musician
			}
			animation = lute_active
		}
		triggered_animation = {
			trigger = { scope:gm_level <= 2 }
			animation = happiness
		}
		triggered_animation = {
			trigger = { scope:gm_level = 3 }
			animation = admiration
		}
		animation = prayer
	}
	lower_right_portrait = {
		character = scope:gm_slot_c
		trigger = { exists = scope:gm_slot_c }
		triggered_animation = {
			trigger = {
				scope:gm_level >= 3
				exists = scope:gm_musician
				scope:gm_slot_c = scope:gm_musician
			}
			animation = lute_active
		}
		triggered_animation = {
			trigger = { scope:gm_level <= 2 }
			animation = happiness
		}
		triggered_animation = {
			trigger = { scope:gm_level = 3 }
			animation = admiration
		}
		animation = throne_room_curtsey_1
	}
	lower_center_portrait = {
		character = scope:gm_slot_d
		trigger = { exists = scope:gm_slot_d }
		triggered_animation = {
			trigger = {
				scope:gm_level >= 3
				exists = scope:gm_musician
				scope:gm_slot_d = scope:gm_musician
			}
			animation = lute_active
		}
		triggered_animation = {
			trigger = { scope:gm_level <= 2 }
			animation = happiness
		}
		triggered_animation = {
			trigger = { scope:gm_level = 3 }
			animation = throne_room_cheer_1
		}
		animation = throne_room_curtsey_1
	}

	trigger = {
		exists = scope:gm_mother
		scope:gm_mother = { is_alive = yes }
	}

	immediate = {
		play_music_cue = "mx_cue_epic_sacral_moment"
		scope:gm_mother = {
			save_scope_value_as = {
				name = gm_level
				value = gm_trait_level
			}
		}
		# Each slot takes the best candidate not yet in the scene (gm_scene_used): ordered_child with
		# position = 1, 2... returned the first child every time in game.
		# The mother seeds every list so that none is ever empty; being "used", she is never picked
		scope:gm_mother = {
			add_to_temporary_list = gm_scene_used
			add_to_temporary_list = gm_scene_children
			add_to_temporary_list = gm_scene_partners
		}
		if = {
			limit = { scope:gm_level <= 2 }
			scope:gm_mother = {
				every_child = {
					limit = {
						is_alive = yes
						age >= 1 # babies are left out of the scene
					}
					add_to_temporary_list = gm_scene_children
				}
			}
		}
		if = {
			limit = { scope:gm_level = 1 }
			scope:gm_mother = {
				if = {
					limit = { exists = primary_spouse }
					primary_spouse = { save_scope_as = gm_slot_a }
				}
				else_if = {
					limit = { exists = concubinist }
					concubinist = { save_scope_as = gm_slot_a }
				}
			}
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_b }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_c }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_d }
		}
		else_if = {
			limit = { scope:gm_level = 2 }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_a }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_b }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_c }
			gm_pick_scene_slot_effect = { LIST = gm_scene_children ORDER = gm_youngest_first_order SLOT = gm_slot_d }
		}
		else = {
			scope:gm_mother = {
				gm_list_bed_partners_effect = { LIST = gm_scene_partners }
			}
			gm_pick_scene_slot_effect = { LIST = gm_scene_partners ORDER = gm_bed_partner_order SLOT = gm_slot_a }
			gm_pick_scene_slot_effect = { LIST = gm_scene_partners ORDER = gm_bed_partner_order SLOT = gm_slot_b }
			gm_pick_scene_slot_effect = { LIST = gm_scene_partners ORDER = gm_bed_partner_order SLOT = gm_slot_c }
			gm_pick_scene_slot_effect = { LIST = gm_scene_partners ORDER = gm_bed_partner_order SLOT = gm_slot_d }
			if = {
				limit = { exists = scope:gm_slot_a }
				save_scope_value_as = {
					name = gm_scene_has_partners
					value = yes
				}
			}
			gm_fill_scene_with_court_effect = yes
		}
		# Cameras other than the window's defaults (see gm_set_scene_camera_effect):
		#   level 1: her children are framed from further away, so that they look smaller, and the
		#            outer ones stand nearer to her (her husband keeps the default framing);
		#   level 2: her children are framed from further away, so that they look smaller, a little
		#            higher and to the side, so that they stand lower and nearer to her;
		#   levels 3 and 4: the mother is framed lower, so that she stands higher; everyone around
		#                   her is framed from further away, so that they look smaller;
		#   level 3: the admiring slots b and c are also seen from the other side and flipped, so
		#            that they face her; the outer slots c and d stand nearer to her; the mother is
		#            also framed from a little further away, so that she looks smaller;
		#   level 4: the curtseying slots c and d are also framed lower, so that they stand higher.
		gm_clear_scene_camera_effect = { SLOT = gm_mother }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_a }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_b }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_c }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_d }
		if = {
			limit = { scope:gm_level = 1 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_b CAMERA = 3 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_c CAMERA = 4 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_d CAMERA = 4 }
		}
		else_if = {
			limit = { scope:gm_level = 2 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_a CAMERA = 5 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_b CAMERA = 5 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_c CAMERA = 5 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_d CAMERA = 5 }
		}
		else_if = {
			limit = { scope:gm_level = 3 }
			gm_set_scene_camera_effect = { SLOT = gm_mother CAMERA = 2 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_a CAMERA = 3 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_b CAMERA = 1 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_c CAMERA = 1 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_d CAMERA = 4 }
		}
		else_if = {
			limit = { scope:gm_level >= 4 }
			gm_set_scene_camera_effect = { SLOT = gm_mother CAMERA = 1 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_a CAMERA = 3 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_b CAMERA = 3 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_c CAMERA = 2 }
			gm_set_scene_camera_effect = { SLOT = gm_slot_d CAMERA = 2 }
		}
		# The lute-playing musician is skipped above; whatever his slot, he stands, so he only needs
		# to look as small as the others
		if = {
			limit = {
				scope:gm_level >= 3
				exists = scope:gm_musician
				scope:gm_musician = { is_in_list = gm_scene_used }
			}
			scope:gm_musician = {
				set_variable = {
					name = gm_scene_camera
					value = 3
					days = 30
				}
			}
		}
	}

	after = {
		gm_clear_scene_camera_effect = { SLOT = gm_mother }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_a }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_b }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_c }
		gm_clear_scene_camera_effect = { SLOT = gm_slot_d }
	}

	# Mother's point of view
	option = {
		name = gm_motherhood.0100.a1
		trigger = {
			this = scope:gm_mother
			scope:gm_level = 1
		}
	}
	option = {
		name = gm_motherhood.0100.a2
		trigger = {
			this = scope:gm_mother
			scope:gm_level = 2
		}
	}
	option = {
		name = gm_motherhood.0100.a3
		trigger = {
			this = scope:gm_mother
			scope:gm_level = 3
		}
	}
	option = {
		name = gm_motherhood.0100.a4
		trigger = {
			this = scope:gm_mother
			scope:gm_level >= 4
		}
	}

	# A bed partner's point of view
	option = {
		name = gm_motherhood.0100.b1
		trigger = {
			NOT = { this = scope:gm_mother }
			scope:gm_level = 1
		}
	}
	option = {
		name = gm_motherhood.0100.b2
		trigger = {
			NOT = { this = scope:gm_mother }
			scope:gm_level = 2
		}
	}
	option = {
		name = gm_motherhood.0100.b3
		trigger = {
			NOT = { this = scope:gm_mother }
			scope:gm_level = 3
		}
	}
	option = {
		name = gm_motherhood.0100.b4
		trigger = {
			NOT = { this = scope:gm_mother }
			scope:gm_level >= 4
		}
	}
}
