# =============================================================
# WAR COLLEGE - ACADEMY EFFECTS
#
# Two domains live here:
#   1) FACULTY  - opening/closing the headmaster + officer pickers,
#                 populating the leader-array, assign/dismiss handlers.
#   2) UPGRADES - starting an upgrade (kicks off civ drain via timed
#                 idea), completing it (applies tier/global effect),
#                 and the mutual-exclusion bookkeeping.
#
# A single wc_active_upgrade_id (1..16, 0 = idle) gates everything.
# wc_upgrade_days_remaining counts down via on_daily; when it hits 0
# the dispatcher fires the matching complete-effect.
# =============================================================

# ---- Constants ----
@wc_upgrade_tier_days   = 30
@wc_upgrade_global_days = 45

# =============================================================
# FACULTY - PICKER LIFECYCLE
# =============================================================

# Open the headmaster picker. The headmaster slot is reserved for
# field marshals only - so the array is filtered tighter than the
# officer picker. Cleared and refilled at every open so newly
# promoted/demoted characters are picked up.
# Both pickers iterate every_character and filter via is_army_leader.
# Per the HOI4 character-scope trigger reference, is_army_leader = yes
# matches characters that have a General OR Field Marshal role - which
# is exactly the pool we want for both headmaster (FM-recommended) and
# officer slots (generals). The picker's title text guides the player
# on which to pick for which slot - we don't strictly enforce role
# separation because the per-tier (is_field_marshal / is_corps_commander)
# triggers are unit_leader-scope only and can't be used here.
wc_open_headmaster_picker_effect = {
	clear_array = ROOT.wc_academy_leaders_array
	every_character = {
		limit = {
			is_army_leader = yes
			NOT = { is_country_leader = yes }
			# Uniqueness: skip characters already assigned to a slot.
			# Each assign sets the wc_at_academy character flag; each
			# dismiss clears it. So this single trigger covers the
			# headmaster + all 3 officer slots in one shot.
			NOT = { has_character_flag = wc_at_academy }
		}
		add_to_array = { ROOT.wc_academy_leaders_array = THIS }
	}
	set_country_flag = wc_headmaster_picker_open
}

wc_close_headmaster_picker_effect = {
	clr_country_flag = wc_headmaster_picker_open
	clear_array = ROOT.wc_academy_leaders_array
}

# Open the officer picker. wc_officer_target_slot is set by the slot
# button click before this fires (1, 2, or 3). Same uniqueness filter
# as the headmaster picker - same flag.
wc_open_officer_picker_effect = {
	clear_array = ROOT.wc_academy_leaders_array
	every_character = {
		limit = {
			is_army_leader = yes
			NOT = { is_country_leader = yes }
			NOT = { has_character_flag = wc_at_academy }
		}
		add_to_array = { ROOT.wc_academy_leaders_array = THIS }
	}
	set_country_flag = wc_officer_picker_open
}

wc_close_officer_picker_effect = {
	clr_country_flag = wc_officer_picker_open
	clear_array = ROOT.wc_academy_leaders_array
}

# Assign the picked character (wc_headmaster_pick_value) as headmaster.
# Sets wc_at_academy on the character so the pickers' filter excludes
# them from future selection. If a previous headmaster was already
# assigned, their flag is cleared first so the slot doesn't leak a
# stale "at academy" marker.
wc_assign_headmaster_effect = {
	if = {
		limit = { has_variable = wc_headmaster_id }
		var:wc_headmaster_id = { clr_character_flag = wc_at_academy }
	}
	set_variable = { wc_headmaster_id = wc_headmaster_pick_value }
	var:wc_headmaster_id = { set_character_flag = wc_at_academy }
	# Reset the per-officer XP timers? No - timers belong to officers,
	# not the headmaster. They're reset on slot dismiss instead.
	wc_close_headmaster_picker_effect = yes
}

wc_dismiss_headmaster_effect = {
	if = {
		limit = { has_variable = wc_headmaster_id }
		var:wc_headmaster_id = { clr_character_flag = wc_at_academy }
	}
	clear_variable = wc_headmaster_id
}

# Assign officer to whichever slot wc_officer_target_slot points at.
# Same flag-management pattern as headmaster: clear stale flag on
# replacement, set fresh flag on new occupant.
wc_assign_officer_effect = {
	if = {
		limit = { check_variable = { wc_officer_target_slot = 1 } }
		if = {
			limit = { has_variable = wc_officer_1_id }
			var:wc_officer_1_id = { clr_character_flag = wc_at_academy }
		}
		set_variable = { wc_officer_1_id = wc_officer_pick_value }
		set_variable = { wc_officer_1_xp_timer = 0 }
		var:wc_officer_1_id = { set_character_flag = wc_at_academy }
	}
	else_if = {
		limit = { check_variable = { wc_officer_target_slot = 2 } }
		if = {
			limit = { has_variable = wc_officer_2_id }
			var:wc_officer_2_id = { clr_character_flag = wc_at_academy }
		}
		set_variable = { wc_officer_2_id = wc_officer_pick_value }
		set_variable = { wc_officer_2_xp_timer = 0 }
		var:wc_officer_2_id = { set_character_flag = wc_at_academy }
	}
	else_if = {
		limit = { check_variable = { wc_officer_target_slot = 3 } }
		if = {
			limit = { has_variable = wc_officer_3_id }
			var:wc_officer_3_id = { clr_character_flag = wc_at_academy }
		}
		set_variable = { wc_officer_3_id = wc_officer_pick_value }
		set_variable = { wc_officer_3_xp_timer = 0 }
		var:wc_officer_3_id = { set_character_flag = wc_at_academy }
	}
	wc_close_officer_picker_effect = yes
}

wc_dismiss_officer_effect = {
	if = {
		limit = { check_variable = { wc_officer_target_slot = 1 } }
		if = {
			limit = { has_variable = wc_officer_1_id }
			var:wc_officer_1_id = { clr_character_flag = wc_at_academy }
		}
		clear_variable = wc_officer_1_id
		set_variable = { wc_officer_1_xp_timer = 0 }
	}
	else_if = {
		limit = { check_variable = { wc_officer_target_slot = 2 } }
		if = {
			limit = { has_variable = wc_officer_2_id }
			var:wc_officer_2_id = { clr_character_flag = wc_at_academy }
		}
		clear_variable = wc_officer_2_id
		set_variable = { wc_officer_2_xp_timer = 0 }
	}
	else_if = {
		limit = { check_variable = { wc_officer_target_slot = 3 } }
		if = {
			limit = { has_variable = wc_officer_3_id }
			var:wc_officer_3_id = { clr_character_flag = wc_at_academy }
		}
		clear_variable = wc_officer_3_id
		set_variable = { wc_officer_3_xp_timer = 0 }
	}
}

# =============================================================
# UPGRADES - START / COMPLETE
# =============================================================

# Start an upgrade. Caller sets wc_pending_upgrade_id (1..16) before
# calling this. Variable-driven dispatch is used because parameterized
# scripted_effects (effect = { ID = 1 } syntax) aren't accepted inside
# scripted_gui effect blocks - HOI4 parses the parameter as a separate
# effect and erroring out cascades into the rest of the scripted_gui.
wc_start_upgrade_effect = {
	if = {
		limit = {
			check_variable = { wc_active_upgrade_id = 0 }
			check_variable = { wc_built = 1 }
		}
		set_variable = { wc_active_upgrade_id = wc_pending_upgrade_id }

		# Tier upgrades = 1, 4, 7, 10 (90 days, 3 civs).
		# Everything else (globals 13..16, plus future placeholders)
		# uses the longer 120-day / 5-civ idea.
		if = {
			limit = {
				OR = {
					check_variable = { wc_active_upgrade_id = 1 }
					check_variable = { wc_active_upgrade_id = 4 }
					check_variable = { wc_active_upgrade_id = 7 }
					check_variable = { wc_active_upgrade_id = 10 }
				}
			}
			set_variable = { wc_upgrade_days_remaining = @wc_upgrade_tier_days }
			add_timed_idea = { idea = wc_academy_upgrading_tier days = @wc_upgrade_tier_days }
		}
		else = {
			set_variable = { wc_upgrade_days_remaining = @wc_upgrade_global_days }
			add_timed_idea = { idea = wc_academy_upgrading_global days = @wc_upgrade_global_days }
		}
	}
}

# Complete dispatcher. Called from on_daily the moment
# wc_upgrade_days_remaining transitions to 0. Reads the active id,
# applies the matching effect, then clears bookkeeping. The civ-drain
# idea is timed and self-removes; we don't need to remove it here.
wc_complete_upgrade_effect = {
	if = {
		limit = { check_variable = { wc_active_upgrade_id = 1 } }
		add_to_variable = { wc_infantry_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 4 } }
		add_to_variable = { wc_artillery_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 7 } }
		add_to_variable = { wc_armor_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 10 } }
		add_to_variable = { wc_operational_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 13 } }
		set_variable = { wc_academy_slots_unlocked = 1 }
		add_ideas = wc_academy_slots
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 14 } }
		set_variable = { wc_academy_spirit_unlocked = 1 }
		add_ideas = wc_academy_spirit
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 15 } }
		set_variable = { wc_academy_theorist_unlocked = 1 }
		add_ideas = wc_academy_theorist
	}
	else_if = {
		limit = { check_variable = { wc_active_upgrade_id = 16 } }
		add_to_variable = { wc_academy_speed_level = 1 }
	}

	set_variable = { wc_active_upgrade_id = 0 }
	set_variable = { wc_upgrade_days_remaining = 0 }
}

# =============================================================
# DAILY ACADEMY TICK
# gain_xp is the unit-leader effect that grants integer XP. To keep
# accumulation gradual, each officer ticks a daily counter; when the
# counter exceeds wc_xp_threshold we fire gain_xp = 1 and reset.
#
# wc_xp_threshold is recomputed each tick from:
#   - Curriculum Reform speed level (lower threshold = faster XP)
#   - Headmaster's average_stats (higher = lower threshold)
#
# Threshold floor is 1 day so a 5-skill headmaster + max speed level
# can't make it free. Note: HOI4 check_variable only supports > and <
# (no >=), so we compare timer > threshold-1 by setting the threshold
# to the inclusive value minus one.
# =============================================================
wc_academy_daily_tick_effect = {
	# Base threshold from Curriculum Reform speed level. Values are
	# "fire when timer > N", so 7 means every 8 days, 1 means every 2.
	if = {
		limit = { check_variable = { wc_academy_speed_level = 3 } }
		set_temp_variable = { wc_xp_threshold = 1 }
	}
	else_if = {
		limit = { check_variable = { wc_academy_speed_level = 2 } }
		set_temp_variable = { wc_xp_threshold = 3 }
	}
	else_if = {
		limit = { check_variable = { wc_academy_speed_level = 1 } }
		set_temp_variable = { wc_xp_threshold = 5 }
	}
	else = {
		set_temp_variable = { wc_xp_threshold = 7 }
	}

	# Headmaster effect on pacing: scope into the assigned character
	# (which has the unit_leader role) and read average_stats.
	# 5+ shaves 2 days off; 3+ shaves 1.
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { average_stats > 4 }
		}
		subtract_from_variable = { wc_xp_threshold = 2 }
	}
	else_if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { average_stats > 2 }
		}
		subtract_from_variable = { wc_xp_threshold = 1 }
	}

	# Personality-trait pacing modifiers. These are NOT inheritable
	# (per design - personality traits stay with the headmaster) but
	# they shape how the academy operates while the trait-bearer is
	# in charge. Effects compose: a harsh_leader career_officer would
	# subtract 2 days total. old_guard then adds 2 back, etc.
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { has_trait = harsh_leader }
		}
		subtract_from_variable = { wc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { has_trait = career_officer }
		}
		subtract_from_variable = { wc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { has_trait = war_hero }
		}
		subtract_from_variable = { wc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { has_trait = old_guard }
		}
		add_to_variable = { wc_xp_threshold = 2 }
	}

	# Floor at 0 (= "every 1 day"). Without this a max-speed +
	# max-skill headmaster could push the threshold negative,
	# which would never trigger the > comparison.
	if = {
		limit = { check_variable = { wc_xp_threshold < 0 } }
		set_temp_variable = { wc_xp_threshold = 0 }
	}

	# politically_connected headmaster: +0.02 PP per filled officer
	# slot per day. Caps naturally at +0.06/day with all 3 slots.
	# Roughly +22 PP/year max - notable but not game-warping.
	if = {
		limit = {
			has_variable = wc_headmaster_id
			var:wc_headmaster_id = { has_trait = politically_connected }
		}
		if = {
			limit = { has_variable = wc_officer_1_id }
			add_political_power = 0.02
		}
		if = {
			limit = { has_variable = wc_officer_2_id }
			add_political_power = 0.02
		}
		if = {
			limit = { has_variable = wc_officer_3_id }
			add_political_power = 0.02
		}
	}

	# Apply to each filled officer slot.
	if = {
		limit = { has_variable = wc_officer_1_id }
		add_to_variable = { wc_officer_1_xp_timer = 1 }
		if = {
			limit = { check_variable = { wc_officer_1_xp_timer > wc_xp_threshold } }
			var:wc_officer_1_id = { gain_xp = 1 }
			set_variable = { wc_officer_1_xp_timer = 0 }
		}
	}
	if = {
		limit = { has_variable = wc_officer_2_id }
		add_to_variable = { wc_officer_2_xp_timer = 1 }
		if = {
			limit = { check_variable = { wc_officer_2_xp_timer > wc_xp_threshold } }
			var:wc_officer_2_id = { gain_xp = 1 }
			set_variable = { wc_officer_2_xp_timer = 0 }
		}
	}
	if = {
		limit = { has_variable = wc_officer_3_id }
		add_to_variable = { wc_officer_3_xp_timer = 1 }
		if = {
			limit = { check_variable = { wc_officer_3_xp_timer > wc_xp_threshold } }
			var:wc_officer_3_id = { gain_xp = 1 }
			set_variable = { wc_officer_3_xp_timer = 0 }
		}
	}

	# Skill-up event cycle: every 30 academy-days while at least one
	# officer is assigned, fire the random skill-up roll for each
	# filled slot. The timer only ticks when staffed so it can't drift
	# during empty stretches.
	if = {
		limit = {
			OR = {
				has_variable = wc_officer_1_id
				has_variable = wc_officer_2_id
				has_variable = wc_officer_3_id
			}
		}
		add_to_variable = { wc_academy_skillup_timer = 1 }
		if = {
			limit = { check_variable = { wc_academy_skillup_timer > 29 } }
			set_variable = { wc_academy_skillup_timer = 0 }
			if = {
				limit = { has_variable = wc_officer_1_id }
				wc_apply_skillup_to_officer_1_effect = yes
			}
			if = {
				limit = { has_variable = wc_officer_2_id }
				wc_apply_skillup_to_officer_2_effect = yes
			}
			if = {
				limit = { has_variable = wc_officer_3_id }
				wc_apply_skillup_to_officer_3_effect = yes
			}
		}
	}
}

# =============================================================
# RANDOM SKILL-UP EVENTS (MTTH-style, 30-day cycle)
#
# Each filled slot rolls a random_list every 30 days. Branches:
#
#   - Generic XP (50 weight): the "regular practice" outcome
#   - 4 specific skill-ups (8 weight each): biased by the
#     headmaster's matching *_skill_level AND by personality
#     traits that align with that skill (brilliant_strategist
#     boosts attack/planning, inflexible_strategist boosts
#     defense/logistics, etc.)
#   - 8 terrain trait inheritance branches (8 weight each):
#     fire ONLY when the headmaster has the trait and the
#     student doesn't; factor=0 modifier zeros them out otherwise.
#   - 4 officer-type trait inheritance branches (8 weight each)
#   - 4 assignable trait inheritance branches (8 weight each)
#
# Equal-weight design: each "specific outcome" branch is 8 so a
# skill-up and a trait-inheritance roll have the same odds when
# both are viable. Personality traits (harsh_leader, old_guard,
# politically_connected, etc.) are NOT inherited - their effects
# live in the daily tick (XP threshold + political power).
#
# Three near-identical effects (one per officer slot) because
# var:wc_officer_X_id has to be hardcoded inside random_list
# branches - HOI4 doesn't let us pass a variable name as a parameter.
# =============================================================

wc_apply_skillup_to_officer_1_effect = {
	random_list = {
		# --- Generic XP ---
		50 = {
			var:wc_officer_1_id = { gain_xp = 30 }
		}

		# --- Skill-ups (HM stat-level + personality bias) ---
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = trait_reckless
						has_trait = harsh_leader
						has_trait = war_hero
					}
				}
			}
			var:wc_officer_1_id = { add_attack = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = trait_cautious
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { has_trait = trait_reckless }
			}
			var:wc_officer_1_id = { add_defense = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_1_id = { add_planning = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_1_id = { add_logistics = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}

		# --- Terrain trait inheritance ---
		# Each branch fires only if HM has the trait AND officer doesn't.
		# Factor=0 modifier zeros otherwise. add_unit_leader_trait directly
		# grants the trait, bypassing the trait's normal gain_xp condition.
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = winter_specialist } }
					var:wc_officer_1_id = { has_trait = winter_specialist }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = winter_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = desert_fox } }
					var:wc_officer_1_id = { has_trait = desert_fox }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = desert_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = swamp_fox } }
					var:wc_officer_1_id = { has_trait = swamp_fox }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = swamp_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trait_mountaineer } }
					var:wc_officer_1_id = { has_trait = trait_mountaineer }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = trait_mountaineer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = jungle_rat } }
					var:wc_officer_1_id = { has_trait = jungle_rat }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = jungle_rat unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = ranger } }
					var:wc_officer_1_id = { has_trait = ranger }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = ranger unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = hill_fighter } }
					var:wc_officer_1_id = { has_trait = hill_fighter }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = hill_fighter unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = urban_assault_specialist } }
					var:wc_officer_1_id = { has_trait = urban_assault_specialist }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = urban_assault_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}

		# --- Officer-type trait inheritance ---
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_officer } }
					var:wc_officer_1_id = { has_trait = infantry_officer }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = infantry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = cavalry_officer } }
					var:wc_officer_1_id = { has_trait = cavalry_officer }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = cavalry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = armor_officer } }
					var:wc_officer_1_id = { has_trait = armor_officer }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = armor_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = engineer_officer } }
					var:wc_officer_1_id = { has_trait = engineer_officer }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = engineer_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}

		# --- High-tier assignable trait inheritance ---
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trickster } }
					var:wc_officer_1_id = { has_trait = trickster }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = trickster unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = commando } }
					var:wc_officer_1_id = { has_trait = commando }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = commando unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = panzer_leader } }
					var:wc_officer_1_id = { has_trait = panzer_leader }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = panzer_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_leader } }
					var:wc_officer_1_id = { has_trait = infantry_leader }
				}
			}
			var:wc_officer_1_id = { add_unit_leader_trait = infantry_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
	}
}

wc_apply_skillup_to_officer_2_effect = {
	random_list = {
		50 = {
			var:wc_officer_2_id = { gain_xp = 30 }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = trait_reckless
						has_trait = harsh_leader
						has_trait = war_hero
					}
				}
			}
			var:wc_officer_2_id = { add_attack = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = trait_cautious
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { has_trait = trait_reckless }
			}
			var:wc_officer_2_id = { add_defense = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_2_id = { add_planning = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_2_id = { add_logistics = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = winter_specialist } }
					var:wc_officer_2_id = { has_trait = winter_specialist }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = winter_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = desert_fox } }
					var:wc_officer_2_id = { has_trait = desert_fox }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = desert_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = swamp_fox } }
					var:wc_officer_2_id = { has_trait = swamp_fox }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = swamp_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trait_mountaineer } }
					var:wc_officer_2_id = { has_trait = trait_mountaineer }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = trait_mountaineer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = jungle_rat } }
					var:wc_officer_2_id = { has_trait = jungle_rat }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = jungle_rat unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = ranger } }
					var:wc_officer_2_id = { has_trait = ranger }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = ranger unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = hill_fighter } }
					var:wc_officer_2_id = { has_trait = hill_fighter }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = hill_fighter unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = urban_assault_specialist } }
					var:wc_officer_2_id = { has_trait = urban_assault_specialist }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = urban_assault_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_officer } }
					var:wc_officer_2_id = { has_trait = infantry_officer }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = infantry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = cavalry_officer } }
					var:wc_officer_2_id = { has_trait = cavalry_officer }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = cavalry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = armor_officer } }
					var:wc_officer_2_id = { has_trait = armor_officer }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = armor_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = engineer_officer } }
					var:wc_officer_2_id = { has_trait = engineer_officer }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = engineer_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trickster } }
					var:wc_officer_2_id = { has_trait = trickster }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = trickster unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = commando } }
					var:wc_officer_2_id = { has_trait = commando }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = commando unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = panzer_leader } }
					var:wc_officer_2_id = { has_trait = panzer_leader }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = panzer_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_leader } }
					var:wc_officer_2_id = { has_trait = infantry_leader }
				}
			}
			var:wc_officer_2_id = { add_unit_leader_trait = infantry_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
	}
}

wc_apply_skillup_to_officer_3_effect = {
	random_list = {
		50 = {
			var:wc_officer_3_id = { gain_xp = 30 }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = trait_reckless
						has_trait = harsh_leader
						has_trait = war_hero
					}
				}
			}
			var:wc_officer_3_id = { add_attack = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = trait_cautious
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { has_trait = trait_reckless }
			}
			var:wc_officer_3_id = { add_defense = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { planning_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = brilliant_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_3_id = { add_planning = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = { logistics_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = wc_headmaster_id
				var:wc_headmaster_id = {
					OR = {
						has_trait = inflexible_strategist
						has_trait = career_officer
					}
				}
			}
			var:wc_officer_3_id = { add_logistics = 1 unit_leader_event = { id = wc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = winter_specialist } }
					var:wc_officer_3_id = { has_trait = winter_specialist }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = winter_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = desert_fox } }
					var:wc_officer_3_id = { has_trait = desert_fox }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = desert_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = swamp_fox } }
					var:wc_officer_3_id = { has_trait = swamp_fox }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = swamp_fox unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trait_mountaineer } }
					var:wc_officer_3_id = { has_trait = trait_mountaineer }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = trait_mountaineer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = jungle_rat } }
					var:wc_officer_3_id = { has_trait = jungle_rat }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = jungle_rat unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = ranger } }
					var:wc_officer_3_id = { has_trait = ranger }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = ranger unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = hill_fighter } }
					var:wc_officer_3_id = { has_trait = hill_fighter }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = hill_fighter unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = urban_assault_specialist } }
					var:wc_officer_3_id = { has_trait = urban_assault_specialist }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = urban_assault_specialist unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_officer } }
					var:wc_officer_3_id = { has_trait = infantry_officer }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = infantry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = cavalry_officer } }
					var:wc_officer_3_id = { has_trait = cavalry_officer }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = cavalry_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = armor_officer } }
					var:wc_officer_3_id = { has_trait = armor_officer }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = armor_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = engineer_officer } }
					var:wc_officer_3_id = { has_trait = engineer_officer }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = engineer_officer unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = trickster } }
					var:wc_officer_3_id = { has_trait = trickster }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = trickster unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = commando } }
					var:wc_officer_3_id = { has_trait = commando }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = commando unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = panzer_leader } }
					var:wc_officer_3_id = { has_trait = panzer_leader }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = panzer_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = wc_headmaster_id }
					var:wc_headmaster_id = { NOT = { has_trait = infantry_leader } }
					var:wc_officer_3_id = { has_trait = infantry_leader }
				}
			}
			var:wc_officer_3_id = { add_unit_leader_trait = infantry_leader unit_leader_event = { id = wc_academy.2 hours = 0 } }
		}
	}
}

# Default initialization - sets the per-track tier vars to T1 the
# moment the college finishes construction. Without this the tier
# vars are 0 and the GetWcAcademy*RowLabel scripted_loc would show
# "T0" until the first upgrade. Called from wc_complete_construction.
wc_academy_init_defaults_effect = {
	set_variable = { wc_infantry_tier = 1 }
	set_variable = { wc_artillery_tier = 1 }
	set_variable = { wc_armor_tier = 1 }
	set_variable = { wc_operational_tier = 1 }
	set_variable = { wc_active_upgrade_id = 0 }
	set_variable = { wc_pending_upgrade_id = 0 }
	set_variable = { wc_upgrade_days_remaining = 0 }
	set_variable = { wc_academy_slots_unlocked = 0 }
	set_variable = { wc_academy_spirit_unlocked = 0 }
	set_variable = { wc_academy_theorist_unlocked = 0 }
	set_variable = { wc_academy_speed_level = 0 }
	set_variable = { wc_officer_1_xp_timer = 0 }
	set_variable = { wc_officer_2_xp_timer = 0 }
	set_variable = { wc_officer_3_xp_timer = 0 }
	set_variable = { wc_academy_skillup_timer = 0 }
	# Auto-advance toggle: 0 = manual (default), 1 = on. The frame
	# variable feeds the checkbox sprite (1 = unchecked, 2 = checked).
	set_variable = { wc_auto_advance_enabled = 0 }
	set_variable = { wc_auto_advance_frame = 1 }
}
