# =============================================================
# NAVAL 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 nc_active_upgrade_id (1..16, 0 = idle) gates everything.
# nc_upgrade_days_remaining counts down via on_daily; when it hits 0
# the dispatcher fires the matching complete-effect.
#
# Per-tier upgrade ids:
#   1  = Submarine    tier ↑
#   4  = Screen       tier ↑
#   7  = Carrier      tier ↑
#   10 = Battleship   tier ↑
#   13 = Expanded Drydocks (slots unlock)
#   14 = Spirit of the Naval Academy
#   15 = Naval Theorist Chair
#   16 = Curriculum Reform (speed level +1, repeatable to 3)
# =============================================================

# ---- Constants ----
@nc_upgrade_tier_days   = 30
@nc_upgrade_global_days = 45

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

# Open the headmaster picker. The headmaster slot is conceptually for
# Grand Admirals / senior fleet commanders, but is_navy_leader is the
# only character-scope trigger that picks up admiral-role characters
# (it matches both Admiral and Grand Admiral roles, the naval analogue
# of is_army_leader for Generals + Field Marshals). The picker's title
# guides the player on the intended slot - we don't strictly enforce
# role separation because the per-tier (is_grand_admiral etc.) triggers
# are unit_leader-scope only and can't be used here.
nc_open_headmaster_picker_effect = {
	clear_array = ROOT.nc_academy_leaders_array
	every_character = {
		limit = {
			is_navy_leader = yes
			NOT = { is_country_leader = yes }
			# Uniqueness: skip characters already assigned to a slot.
			# Each assign sets the nc_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 = nc_at_academy }
		}
		add_to_array = { ROOT.nc_academy_leaders_array = THIS }
	}
	set_country_flag = nc_headmaster_picker_open
}

nc_close_headmaster_picker_effect = {
	clr_country_flag = nc_headmaster_picker_open
	clear_array = ROOT.nc_academy_leaders_array
}

# Open the officer picker. nc_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.
nc_open_officer_picker_effect = {
	clear_array = ROOT.nc_academy_leaders_array
	every_character = {
		limit = {
			is_navy_leader = yes
			NOT = { is_country_leader = yes }
			NOT = { has_character_flag = nc_at_academy }
		}
		add_to_array = { ROOT.nc_academy_leaders_array = THIS }
	}
	set_country_flag = nc_officer_picker_open
}

nc_close_officer_picker_effect = {
	clr_country_flag = nc_officer_picker_open
	clear_array = ROOT.nc_academy_leaders_array
}

# Assign the picked character (nc_headmaster_pick_value) as headmaster.
# Sets nc_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.
nc_assign_headmaster_effect = {
	if = {
		limit = { has_variable = nc_headmaster_id }
		var:nc_headmaster_id = { clr_character_flag = nc_at_academy }
	}
	set_variable = { nc_headmaster_id = nc_headmaster_pick_value }
	var:nc_headmaster_id = { set_character_flag = nc_at_academy }
	# Per-officer XP timers belong to officers, not the headmaster -
	# they're reset on slot dismiss instead.
	nc_close_headmaster_picker_effect = yes
}

nc_dismiss_headmaster_effect = {
	if = {
		limit = { has_variable = nc_headmaster_id }
		var:nc_headmaster_id = { clr_character_flag = nc_at_academy }
	}
	clear_variable = nc_headmaster_id
}

# Assign officer to whichever slot nc_officer_target_slot points at.
# Same flag-management pattern as headmaster: clear stale flag on
# replacement, set fresh flag on new occupant.
nc_assign_officer_effect = {
	if = {
		limit = { check_variable = { nc_officer_target_slot = 1 } }
		if = {
			limit = { has_variable = nc_officer_1_id }
			var:nc_officer_1_id = { clr_character_flag = nc_at_academy }
		}
		set_variable = { nc_officer_1_id = nc_officer_pick_value }
		set_variable = { nc_officer_1_xp_timer = 0 }
		var:nc_officer_1_id = { set_character_flag = nc_at_academy }
	}
	else_if = {
		limit = { check_variable = { nc_officer_target_slot = 2 } }
		if = {
			limit = { has_variable = nc_officer_2_id }
			var:nc_officer_2_id = { clr_character_flag = nc_at_academy }
		}
		set_variable = { nc_officer_2_id = nc_officer_pick_value }
		set_variable = { nc_officer_2_xp_timer = 0 }
		var:nc_officer_2_id = { set_character_flag = nc_at_academy }
	}
	else_if = {
		limit = { check_variable = { nc_officer_target_slot = 3 } }
		if = {
			limit = { has_variable = nc_officer_3_id }
			var:nc_officer_3_id = { clr_character_flag = nc_at_academy }
		}
		set_variable = { nc_officer_3_id = nc_officer_pick_value }
		set_variable = { nc_officer_3_xp_timer = 0 }
		var:nc_officer_3_id = { set_character_flag = nc_at_academy }
	}
	nc_close_officer_picker_effect = yes
}

nc_dismiss_officer_effect = {
	if = {
		limit = { check_variable = { nc_officer_target_slot = 1 } }
		if = {
			limit = { has_variable = nc_officer_1_id }
			var:nc_officer_1_id = { clr_character_flag = nc_at_academy }
		}
		clear_variable = nc_officer_1_id
		set_variable = { nc_officer_1_xp_timer = 0 }
	}
	else_if = {
		limit = { check_variable = { nc_officer_target_slot = 2 } }
		if = {
			limit = { has_variable = nc_officer_2_id }
			var:nc_officer_2_id = { clr_character_flag = nc_at_academy }
		}
		clear_variable = nc_officer_2_id
		set_variable = { nc_officer_2_xp_timer = 0 }
	}
	else_if = {
		limit = { check_variable = { nc_officer_target_slot = 3 } }
		if = {
			limit = { has_variable = nc_officer_3_id }
			var:nc_officer_3_id = { clr_character_flag = nc_at_academy }
		}
		clear_variable = nc_officer_3_id
		set_variable = { nc_officer_3_xp_timer = 0 }
	}
}

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

# Start an upgrade. Caller sets nc_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.
nc_start_upgrade_effect = {
	if = {
		limit = {
			check_variable = { nc_active_upgrade_id = 0 }
			check_variable = { nc_built = 1 }
		}
		set_variable = { nc_active_upgrade_id = nc_pending_upgrade_id }

		# Tier upgrades = 1, 4, 7, 10 (30 days, 5% consumer goods).
		# Everything else (globals 13..16) uses the longer 45-day / 10%.
		if = {
			limit = {
				OR = {
					check_variable = { nc_active_upgrade_id = 1 }
					check_variable = { nc_active_upgrade_id = 4 }
					check_variable = { nc_active_upgrade_id = 7 }
					check_variable = { nc_active_upgrade_id = 10 }
				}
			}
			set_variable = { nc_upgrade_days_remaining = @nc_upgrade_tier_days }
			add_timed_idea = { idea = nc_academy_upgrading_tier days = @nc_upgrade_tier_days }
		}
		else = {
			set_variable = { nc_upgrade_days_remaining = @nc_upgrade_global_days }
			add_timed_idea = { idea = nc_academy_upgrading_global days = @nc_upgrade_global_days }
		}
	}
}

# Complete dispatcher. Called from on_daily the moment
# nc_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.
nc_complete_upgrade_effect = {
	if = {
		limit = { check_variable = { nc_active_upgrade_id = 1 } }
		add_to_variable = { nc_submarine_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 4 } }
		add_to_variable = { nc_screen_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 7 } }
		add_to_variable = { nc_carrier_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 10 } }
		add_to_variable = { nc_battleship_tier = 1 }
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 13 } }
		set_variable = { nc_academy_slots_unlocked = 1 }
		add_ideas = nc_academy_slots
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 14 } }
		set_variable = { nc_academy_spirit_unlocked = 1 }
		add_ideas = nc_academy_spirit
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 15 } }
		set_variable = { nc_academy_theorist_unlocked = 1 }
		add_ideas = nc_academy_theorist
	}
	else_if = {
		limit = { check_variable = { nc_active_upgrade_id = 16 } }
		add_to_variable = { nc_academy_speed_level = 1 }
	}

	set_variable = { nc_active_upgrade_id = 0 }
	set_variable = { nc_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 nc_xp_threshold we fire gain_xp = 1 and reset.
#
# nc_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.
# =============================================================
nc_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 = { nc_academy_speed_level = 3 } }
		set_temp_variable = { nc_xp_threshold = 1 }
	}
	else_if = {
		limit = { check_variable = { nc_academy_speed_level = 2 } }
		set_temp_variable = { nc_xp_threshold = 3 }
	}
	else_if = {
		limit = { check_variable = { nc_academy_speed_level = 1 } }
		set_temp_variable = { nc_xp_threshold = 5 }
	}
	else = {
		set_temp_variable = { nc_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 = nc_headmaster_id
			var:nc_headmaster_id = { average_stats > 4 }
		}
		subtract_from_variable = { nc_xp_threshold = 2 }
	}
	else_if = {
		limit = {
			has_variable = nc_headmaster_id
			var:nc_headmaster_id = { average_stats > 2 }
		}
		subtract_from_variable = { nc_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 caustic_personality navy_career_officer
	# would subtract 2 days total. old_guard_navy then adds 2 back, etc.
	if = {
		limit = {
			has_variable = nc_headmaster_id
			var:nc_headmaster_id = { has_trait = caustic_personality }
		}
		subtract_from_variable = { nc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = nc_headmaster_id
			var:nc_headmaster_id = { has_trait = navy_career_officer }
		}
		subtract_from_variable = { nc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = nc_headmaster_id
			var:nc_headmaster_id = { has_trait = bold }
		}
		subtract_from_variable = { nc_xp_threshold = 1 }
	}
	if = {
		limit = {
			has_variable = nc_headmaster_id
			var:nc_headmaster_id = { has_trait = old_guard_navy }
		}
		add_to_variable = { nc_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 = { nc_xp_threshold < 0 } }
		set_temp_variable = { nc_xp_threshold = 0 }
	}

	# navy_media_personality 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 = nc_headmaster_id
			var:nc_headmaster_id = { has_trait = navy_media_personality }
		}
		if = {
			limit = { has_variable = nc_officer_1_id }
			add_political_power = 0.02
		}
		if = {
			limit = { has_variable = nc_officer_2_id }
			add_political_power = 0.02
		}
		if = {
			limit = { has_variable = nc_officer_3_id }
			add_political_power = 0.02
		}
	}

	# Apply to each filled officer slot.
	if = {
		limit = { has_variable = nc_officer_1_id }
		add_to_variable = { nc_officer_1_xp_timer = 1 }
		if = {
			limit = { check_variable = { nc_officer_1_xp_timer > nc_xp_threshold } }
			var:nc_officer_1_id = { gain_xp = 1 }
			set_variable = { nc_officer_1_xp_timer = 0 }
		}
	}
	if = {
		limit = { has_variable = nc_officer_2_id }
		add_to_variable = { nc_officer_2_xp_timer = 1 }
		if = {
			limit = { check_variable = { nc_officer_2_xp_timer > nc_xp_threshold } }
			var:nc_officer_2_id = { gain_xp = 1 }
			set_variable = { nc_officer_2_xp_timer = 0 }
		}
	}
	if = {
		limit = { has_variable = nc_officer_3_id }
		add_to_variable = { nc_officer_3_xp_timer = 1 }
		if = {
			limit = { check_variable = { nc_officer_3_xp_timer > nc_xp_threshold } }
			var:nc_officer_3_id = { gain_xp = 1 }
			set_variable = { nc_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 = nc_officer_1_id
				has_variable = nc_officer_2_id
				has_variable = nc_officer_3_id
			}
		}
		add_to_variable = { nc_academy_skillup_timer = 1 }
		if = {
			limit = { check_variable = { nc_academy_skillup_timer > 29 } }
			set_variable = { nc_academy_skillup_timer = 0 }
			if = {
				limit = { has_variable = nc_officer_1_id }
				nc_apply_skillup_to_officer_1_effect = yes
			}
			if = {
				limit = { has_variable = nc_officer_2_id }
				nc_apply_skillup_to_officer_2_effect = yes
			}
			if = {
				limit = { has_variable = nc_officer_3_id }
				nc_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 admiral skill-ups (8 weight each): biased by the
#     headmaster's matching *_skill_level AND by personality
#     traits that align with that skill (bold boosts attack/maneuvering,
#     gunnery_expert boosts defense/coordination, etc.)
#   - 4 water-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 ship-type officer trait inheritance branches (8 weight each)
#   - 4 high-tier 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 (bold, old_guard_navy,
# navy_media_personality, etc.) are NOT inherited - their effects
# live in the daily tick (XP threshold + political power).
#
# Admiral skill effects (vs general): admirals use add_attack /
# add_defense / add_maneuvering / add_coordination, with matching
# *_skill_level character triggers (planning/logistics → maneuvering/coordination).
#
# Three near-identical effects (one per officer slot) because
# var:nc_officer_X_id has to be hardcoded inside random_list
# branches - HOI4 doesn't let us pass a variable name as a parameter.
# =============================================================

nc_apply_skillup_to_officer_1_effect = {
	random_list = {
		# --- Generic XP ---
		50 = {
			var:nc_officer_1_id = { gain_xp = 30 }
		}

		# --- Skill-ups (HM stat-level + personality bias) ---
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = caustic_personality
						has_trait = naval_lineage
					}
				}
			}
			var:nc_officer_1_id = { add_attack = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = craven
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { has_trait = bold }
			}
			var:nc_officer_1_id = { add_defense = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_1_id = { add_maneuvering = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_1_id = { add_coordination = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}

		# --- Water-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 = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = arctic_water_expert } }
					var:nc_officer_1_id = { has_trait = arctic_water_expert }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = arctic_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = inshore_fighter } }
					var:nc_officer_1_id = { has_trait = inshore_fighter }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = inshore_fighter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = blue_water_expert } }
					var:nc_officer_1_id = { has_trait = blue_water_expert }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = blue_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = green_water_expert } }
					var:nc_officer_1_id = { has_trait = green_water_expert }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = green_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}

		# --- Ship-type officer trait inheritance ---
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = destroyer_leader } }
					var:nc_officer_1_id = { has_trait = destroyer_leader }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = destroyer_leader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = cruiser_captain } }
					var:nc_officer_1_id = { has_trait = cruiser_captain }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = cruiser_captain unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = flight_deck_manager } }
					var:nc_officer_1_id = { has_trait = flight_deck_manager }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = flight_deck_manager unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = big_guns_expert } }
					var:nc_officer_1_id = { has_trait = big_guns_expert }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = big_guns_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}

		# --- High-tier assignable trait inheritance ---
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = silent_hunter } }
					var:nc_officer_1_id = { has_trait = silent_hunter }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = silent_hunter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = naval_invader } }
					var:nc_officer_1_id = { has_trait = naval_invader }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = naval_invader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = ironside } }
					var:nc_officer_1_id = { has_trait = ironside }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = ironside unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = superior_tactician } }
					var:nc_officer_1_id = { has_trait = superior_tactician }
				}
			}
			var:nc_officer_1_id = { add_unit_leader_trait = superior_tactician unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
	}
}

nc_apply_skillup_to_officer_2_effect = {
	random_list = {
		50 = {
			var:nc_officer_2_id = { gain_xp = 30 }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = caustic_personality
						has_trait = naval_lineage
					}
				}
			}
			var:nc_officer_2_id = { add_attack = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = craven
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { has_trait = bold }
			}
			var:nc_officer_2_id = { add_defense = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_2_id = { add_maneuvering = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_2_id = { add_coordination = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = arctic_water_expert } }
					var:nc_officer_2_id = { has_trait = arctic_water_expert }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = arctic_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = inshore_fighter } }
					var:nc_officer_2_id = { has_trait = inshore_fighter }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = inshore_fighter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = blue_water_expert } }
					var:nc_officer_2_id = { has_trait = blue_water_expert }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = blue_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = green_water_expert } }
					var:nc_officer_2_id = { has_trait = green_water_expert }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = green_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = destroyer_leader } }
					var:nc_officer_2_id = { has_trait = destroyer_leader }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = destroyer_leader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = cruiser_captain } }
					var:nc_officer_2_id = { has_trait = cruiser_captain }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = cruiser_captain unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = flight_deck_manager } }
					var:nc_officer_2_id = { has_trait = flight_deck_manager }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = flight_deck_manager unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = big_guns_expert } }
					var:nc_officer_2_id = { has_trait = big_guns_expert }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = big_guns_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = silent_hunter } }
					var:nc_officer_2_id = { has_trait = silent_hunter }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = silent_hunter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = naval_invader } }
					var:nc_officer_2_id = { has_trait = naval_invader }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = naval_invader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = ironside } }
					var:nc_officer_2_id = { has_trait = ironside }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = ironside unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = superior_tactician } }
					var:nc_officer_2_id = { has_trait = superior_tactician }
				}
			}
			var:nc_officer_2_id = { add_unit_leader_trait = superior_tactician unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
	}
}

nc_apply_skillup_to_officer_3_effect = {
	random_list = {
		50 = {
			var:nc_officer_3_id = { gain_xp = 30 }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { attack_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = caustic_personality
						has_trait = naval_lineage
					}
				}
			}
			var:nc_officer_3_id = { add_attack = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { defense_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = craven
					}
				}
			}
			modifier = {
				factor = 0.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { has_trait = bold }
			}
			var:nc_officer_3_id = { add_defense = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { maneuvering_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = bold
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_3_id = { add_maneuvering = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 2 }
			}
			modifier = {
				factor = 2
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = { coordination_skill_level > 4 }
			}
			modifier = {
				factor = 1.5
				has_variable = nc_headmaster_id
				var:nc_headmaster_id = {
					OR = {
						has_trait = gunnery_expert
						has_trait = navy_career_officer
					}
				}
			}
			var:nc_officer_3_id = { add_coordination = 1 unit_leader_event = { id = nc_academy.1 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = arctic_water_expert } }
					var:nc_officer_3_id = { has_trait = arctic_water_expert }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = arctic_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = inshore_fighter } }
					var:nc_officer_3_id = { has_trait = inshore_fighter }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = inshore_fighter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = blue_water_expert } }
					var:nc_officer_3_id = { has_trait = blue_water_expert }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = blue_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = green_water_expert } }
					var:nc_officer_3_id = { has_trait = green_water_expert }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = green_water_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = destroyer_leader } }
					var:nc_officer_3_id = { has_trait = destroyer_leader }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = destroyer_leader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = cruiser_captain } }
					var:nc_officer_3_id = { has_trait = cruiser_captain }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = cruiser_captain unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = flight_deck_manager } }
					var:nc_officer_3_id = { has_trait = flight_deck_manager }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = flight_deck_manager unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = big_guns_expert } }
					var:nc_officer_3_id = { has_trait = big_guns_expert }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = big_guns_expert unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = silent_hunter } }
					var:nc_officer_3_id = { has_trait = silent_hunter }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = silent_hunter unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = naval_invader } }
					var:nc_officer_3_id = { has_trait = naval_invader }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = naval_invader unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = ironside } }
					var:nc_officer_3_id = { has_trait = ironside }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = ironside unit_leader_event = { id = nc_academy.2 hours = 0 } }
		}
		8 = {
			modifier = {
				factor = 0
				OR = {
					NOT = { has_variable = nc_headmaster_id }
					var:nc_headmaster_id = { NOT = { has_trait = superior_tactician } }
					var:nc_officer_3_id = { has_trait = superior_tactician }
				}
			}
			var:nc_officer_3_id = { add_unit_leader_trait = superior_tactician unit_leader_event = { id = nc_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 GetNcAcademy*RowLabel scripted_loc would show
# "T0" until the first upgrade. Called from nc_complete_construction.
nc_academy_init_defaults_effect = {
	set_variable = { nc_submarine_tier = 1 }
	set_variable = { nc_screen_tier = 1 }
	set_variable = { nc_carrier_tier = 1 }
	set_variable = { nc_battleship_tier = 1 }
	set_variable = { nc_active_upgrade_id = 0 }
	set_variable = { nc_pending_upgrade_id = 0 }
	set_variable = { nc_upgrade_days_remaining = 0 }
	set_variable = { nc_academy_slots_unlocked = 0 }
	set_variable = { nc_academy_spirit_unlocked = 0 }
	set_variable = { nc_academy_theorist_unlocked = 0 }
	set_variable = { nc_academy_speed_level = 0 }
	set_variable = { nc_officer_1_xp_timer = 0 }
	set_variable = { nc_officer_2_xp_timer = 0 }
	set_variable = { nc_officer_3_xp_timer = 0 }
	set_variable = { nc_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 = { nc_auto_advance_enabled = 0 }
	set_variable = { nc_auto_advance_frame = 1 }
}
