############################################################
##           Elite Recruitment Marshal Helpers            ##
############################################################
##                                                        ##
## Marshal helper effects to add flavor to the Elite      ##
## Recruitment mod.                                       ##
##                                                        ##
############################################################

# Create male marshal in your culture and religion with dynasty lottery
create_male_marshal_dynasty_lottery_effect = {
  random_list = {
    # New random house
    33 = { create_random_soldier = {
      dynasty = random
      female = no
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }

    # Lowborn
    33 = { create_random_soldier = {
      dynasty = none
      female = no
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }

    # Random existing house matching your culture
    33 = { create_random_soldier = {
      dynasty = actually_culture
      female = no
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }
  }
}

# Create female marshal in your culture and religion with dynasty lottery
create_female_marshal_dynasty_lottery_effect = {
  random_list = {
    # New random house
    33 = { create_random_soldier = {
      dynasty = random
      female = yes
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }

    # Lowborn
    33 = { create_random_soldier = {
      dynasty = none
      female = yes
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }

    # Random existing house matching your culture
    33 = { create_random_soldier = {
      dynasty = actually_culture
      female = yes
      random_traits = yes
      age = 16
      religion = ROOT
      culture = ROOT
    } }
  }
}

# Assign the base marshal attributes to the base character
assign_marshal_base_attributes_effect = {
  change_martial = 12
  change_diplomacy = 4
  change_intrigue = 4
  change_learning = 4
  change_stewardship = 4
}

# Assign the marshal traits to the base character (orchestrator)
assign_marshal_traits_effect = {
  remove_marshal_negative_traits_effect = yes
  set_elite_marshal_education_effect = yes
  remove_existing_leadership_traits_effect = yes
  assign_marshal_leadership_trait_effect = yes
  assign_elite_chinese_marshal_trait_effect = yes
  assign_marshal_warrior_lodge_effect = yes
  assign_marshal_flavor_effect = yes
  assign_marshal_battle_wounds_effect = yes
  assign_marshal_legendary_chance_effect = yes
  assign_religion_traits_effect = yes
  assign_marshal_crusade_trait_effect = yes

  set_character_flag = elite_recruit_marshal
  save_event_target_as = invited_character
}

# Remove physical and martial drawbacks unbecoming of an elite marshal: a battle-leader
# must be hale and brave. giant and paranoid are deliberately kept (see inline notes).
remove_marshal_negative_traits_effect = {
  remove_trait = weak
  remove_trait = slow
  remove_trait = imbecile
  remove_trait = dull
  remove_trait = inbred
  remove_trait = dwarf
  # giant not stripped -- net-positive for a marshal (combat rating)
  remove_trait = hunchback
  remove_trait = clubfooted
  remove_trait = craven
  # paranoid not stripped -- intrigue/honor trait, no martial impact

  # Elite addition: Slothful is -1 to all attributes
  remove_trait = slothful

  remove_lifestyle_trait_effect = yes
}

# Strip any leadership trait the base marshal was generated with, so our curated roll is the
# only standard leadership trait and there's room for a bonus (cap is 2). remove_trait on an
# absent trait is a no-op; build-renamed traits are cleared via the trait_compat utility.
remove_existing_leadership_traits_effect = {
  # General
  remove_trait = aggressive_leader
  remove_trait = defensive_leader
  remove_trait = unyielding_leader
  remove_trait = flanker
  remove_trait = inspiring_leader
  remove_trait = trickster
  remove_trait = organizer
  remove_trait = siege_leader
  remove_trait = winter_soldier
  # holy_warrior is a holy-war trait but leader = yes, so it counts toward the cap
  remove_trait = holy_warrior

  # Unit-specific
  remove_trait = cavalry_leader
  remove_trait = heavy_infantry_leader
  remove_trait = light_foot_leader
  remove_trait = war_elephant_leader

  # Chinese (Jade Dragon)
  remove_trait = logistics_expert
  remove_trait = levy_coordinator
  remove_trait = sapper
  remove_trait = master_of_flame

  # Warrior lodge (Holy Fury)
  remove_trait = norse_leader
  remove_trait = tengri_leader
  remove_trait = baltic_leader
  remove_trait = finnish_leader
  remove_trait = slavic_leader
  remove_trait = west_african_leader
  remove_trait = zun_leader
  remove_trait = bon_leader
  remove_trait = hellenic_leader

  # Build-renamed leadership traits (Battlefield Terrain Master, Direct Leader, terrain)
  remove_elite_compat_leadership_traits_effect = yes
}

# Guaranteed top martial education
set_elite_marshal_education_effect = {
  clear_education_trait = yes
  add_trait = brilliant_strategist
}

# Roll one leadership trait, grouped by the wiki's categories.
# Build-specific IDs go through the trait_compat hooks.
assign_marshal_leadership_trait_effect = {
  random_list = {
    # General
    10 = { add_trait = aggressive_leader } # Aggressive Leader
    10 = { add_trait = defensive_leader } # Defender
    10 = { add_trait = unyielding_leader } # Unyielding
    10 = { add_trait = flanker } # Flanker
    10 = { add_trait = inspiring_leader } # Inspiring Leader
    10 = { add_trait = trickster } # Trickster
    10 = { add_trait = organizer } # Organizer
    10 = { add_trait = siege_leader } # Siege Leader
    10 = { add_trait = winter_soldier } # Winter Soldier
    10 = { assign_elite_battlefield_terrain_master_trait_effect = yes } # Battlefield Terrain Master
    10 = { assign_elite_direct_leader_trait_effect = yes } # Direct Leader

    # Unit-specific
    10 = { add_trait = cavalry_leader } # Cavalry Leader
    10 = { add_trait = heavy_infantry_leader } # Heavy Infantry Leader
    10 = { add_trait = light_foot_leader } # Light Foot Leader
    10 = {
      trigger = { ROOT = { OR = { culture_group = indo_aryan_group culture_group = dravidian_group } } }
      add_trait = war_elephant_leader # War Elephant Leader (Indian culture only)
    }

    # Terrain expertise
    10 = { assign_elite_desert_terrain_trait_effect = yes } # Desert
    10 = { assign_elite_flat_terrain_trait_effect = yes } # Flatland
    10 = { assign_elite_jungle_terrain_trait_effect = yes } # Jungle
    10 = { assign_elite_mountain_terrain_trait_effect = yes } # Mountain
    10 = { assign_elite_rough_terrain_trait_effect = yes } # Rough
  }
}

# Chinese (Jade Dragon) bonus: a Chinese-culture recruit has a ~50% chance at a second
# leadership trait (the cap is MAX_LEADERSHIP_TRAITS = 2), as vanilla grants these.
assign_elite_chinese_marshal_trait_effect = {
  if = {
    limit = {
      has_dlc = "Jade Dragon"
      ROOT = { culture_group = chinese_group }
    }
    random_list = {
      100 = {}  # ~50% none
      25 = { trigger = { can_have_more_leadership_traits = yes } add_trait = logistics_expert } # Way of the Dog
      25 = { trigger = { can_have_more_leadership_traits = yes } add_trait = levy_coordinator } # Way of the Tiger
      25 = { trigger = { can_have_more_leadership_traits = yes } add_trait = sapper }           # Way of the Leopard
      25 = { trigger = { can_have_more_leadership_traits = yes } add_trait = master_of_flame }  # Way of the Dragon
    }
  }
}

# If the recruiting ruler belongs to a warrior lodge, sponsor the recruit into it,
# with a 25% chance they have already earned the lodge's command trait.
assign_marshal_warrior_lodge_effect = {
  if = {
    limit = { ROOT = { in_warrior_lodge_trigger = yes } }
    ROOT = { society = { save_event_target_as = elite_ruler_lodge } }
    join_society = event_target:elite_ruler_lodge

    # ~25% effective chance at the lodge trait. A Chinese-culture ruler's recruit may have
    # already spent its 2nd leadership slot on a Chinese trait, so roll 50% for them
    # (50% Chinese-fail x 50% = ~25%) to match the rate other lodge members get.
    if = {
      limit = { ROOT = { culture_group = chinese_group } }
      random_list = {
        50 = {}
        50 = {
          trigger = { can_have_more_leadership_traits = yes }
          add_warrior_lodge_leader_trait_effect = yes
        }
      }
    }
    else = {
      random_list = {
        75 = {}
        25 = {
          trigger = { can_have_more_leadership_traits = yes }
          add_warrior_lodge_leader_trait_effect = yes
        }
      }
    }
  }
}

# Small chance the recruit is a holy-war veteran, with the trait matching their faith.
# Dharmic faiths have no such trait, so they are excluded.
#
# Inlined to bypass vanilla add_crusade_trait_effect: its per-branch `break = yes`
# propagates out of new_character and silently aborts ER.1. Five trait IDs differ
# between vanilla and CleanSlate, gated on cleanslate_active.
assign_marshal_crusade_trait_effect = {
  if = {
    limit = { has_dharmic_religion_trigger = no }
    random = {
      chance = 15

      if = {
        limit = { religion_group = muslim }
        add_trait = mujahid
      }
      else_if = {
        limit = { religion_group = christian }
        add_trait = crusader
      }
      else_if = {
        limit = { religion_openly_norse_or_reformed_trigger = yes }
        add_trait = valhalla_bound
      }
      else_if = {
        limit = { religion_openly_tengri_or_reformed_trigger = yes }
        assign_elite_tengri_crusade_trait_effect = yes
      }
      else_if = {
        limit = { religion_openly_finnish_or_reformed_trigger = yes }
        assign_elite_finnish_crusade_trait_effect = yes
      }
      else_if = {
        limit = { religion_openly_slavic_or_reformed_trigger = yes }
        add_trait = peruns_chosen
      }
      else_if = {
        limit = { religion_openly_west_african_or_reformed_trigger = yes }
        add_trait = nyames_shield
      }
      else_if = {
        limit = { religion_openly_baltic_or_reformed_trigger = yes }
        assign_elite_baltic_crusade_trait_effect = yes
      }
      else_if = {
        limit = { religion_openly_bon_or_reformed_trigger = yes }
        add_trait = kailash_guardian
      }
      else_if = {
        limit = { religion_openly_zun_or_reformed_trigger = yes }
        add_trait = sun_warrior
      }
      else_if = {
        limit = { religion_openly_aztec_or_reformed_trigger = yes }
        assign_elite_aztec_crusade_trait_effect = yes
      }
      else_if = {
        limit = { religion_openly_hellenic_or_reformed_trigger = yes }
        add_trait = ares_own
      }
      else_if = {
        limit = { religion_group = zoroastrian_group }
        add_trait = gondi_shahansha
      }
      else_if = {
        limit = { religion_group = jewish_group }
        assign_elite_jewish_crusade_trait_effect = yes
      }
    }
  }
}

# Weighted "flavor" roll: usually a small, fitting bonus, rarely something bigger
assign_marshal_flavor_effect = {
  random_list = {
    30 = {
      assign_elite_physique_trait_effect = yes
    }
    15 = {
      change_martial = 2
    }
    10 = {
      add_trait = duelist
    }
    10 = {
      trigger = { NOT = { religion = jain } }  # Jain cannot have Hunter
      add_trait = hunter
    }
    10 = {
      add_trait = strong
    }
    5 = {
      add_trait = strategist
    }
    5 = {
      health = 1
    }
    5 = {
      change_martial = 4
    }
    5 = {
      add_trait = brave
    }
    5 = {
      add_trait = shrewd
    }
    1 = {
      add_trait = giant
    }
  }
}

# A veteran commander sometimes carries the marks of past battles. The penalty wounds
# are paired with a hardening trait so the roll is always worth getting.
assign_marshal_battle_wounds_effect = {
  random = {
    chance = 15
    random_list = {
      # Battle scars -- no attribute penalty; the tier scales up with Holy Fury
      50 = {
        random_list = {
          50 = { add_trait = scarred }
          25 = { trigger = { has_dlc = "Holy Fury" } add_trait = scarred_mid }
          25 = { trigger = { has_dlc = "Holy Fury" } add_trait = scarred_high }
        }
      }
      # Lost an eye, but seasoned by it -- patient's +5 combat blunts the -10
      25 = {
        trigger = { has_dlc = "Reapers" }
        add_trait = one_eyed
        add_trait = patient
      }
      # Disfigured in the fighting, all the more wrathful for it
      25 = {
        trigger = { has_dlc = "Reapers" }
        add_trait = disfigured
        add_trait = wroth
      }
    }
  }
}

# Small chance of a legendary, named marshal if the ruler owns an inspire-commanders bloodline
assign_marshal_legendary_chance_effect = {
  if = {
    limit = {  ROOT = {
      any_owned_bloodline = {
        has_bloodline_flag = bloodline_inspire_commanders
        bloodline_is_active_for = ROOT
      }
    } }
    random_list = {
      95 = {}
      5 = {
        assign_legendary_marshal_effect = yes
        opinion = {
          modifier = opinion_legendary_commander
          years = 50
          who = ROOT
        }
      }
    }
  }
}

# Build a legendary, named marshal: one of many hero archetypes, each a themed trait set
assign_legendary_marshal_effect = {
  random_list = {
    20 = {
      add_trait = giant
      assign_elite_physique_trait_effect = yes
      if = { limit = { NOT = { religion = jain } }  add_trait = hunter }  # incidental here; Jain cannot have Hunter
      change_martial = 2
      give_nickname = nick_the_giant
    }

    20 = {
      trigger = { has_dlc = "Reapers" }

      add_trait = giant
      assign_elite_physique_trait_effect = yes
      add_trait = strategist
      add_trait = one_eyed
      change_martial = 1
      give_nickname = nick_the_cyclops
    }

    20 = {
      add_trait = holy_warrior
      add_trait = scarred
      change_martial = 3
      give_nickname = nick_the_hammer
    }

    20 = {
      add_trait = brave
      add_trait = poet
      change_martial = 2
      give_nickname = nick_the_fearless
    }

    20 = {
      assign_elite_physique_trait_effect = yes
      remove_trait = temperate
      add_trait = wroth
      add_trait = falconer
      change_martial = 1
      give_nickname = nick_the_ill_tempered
    }

    20 = {
      add_trait = unyielding_leader
      remove_trait = wroth
      add_trait = patient
      change_martial = 2
      give_nickname = nick_the_defender
    }

    20 = {
      add_trait = aggressive_leader
      remove_trait = patient
      add_trait = wroth
      change_martial = 3
      give_nickname = nick_the_destroyer
    }

    20 = {
      add_trait = shrewd
      add_trait = brave
      change_martial = 2
      give_nickname = nick_the_brave
    }

    20 = {
      assign_elite_physique_trait_effect = yes
      add_trait = strategist
      change_martial = 1
      give_nickname = nick_the_strong
    }

    20 = {
      add_trait = genius
      add_trait = socializer
      add_trait = poet
      change_martial = 4
      give_nickname = nick_the_noble
    }

    20 = {
      add_trait = blinded
      add_trait = strategist
      add_trait = genius
      change_martial = 4
      give_nickname = nick_the_blind
    }

    20 = {
      remove_trait = humble
      add_trait = proud
      add_trait = duelist
      change_martial = 2
      give_nickname = nick_the_proud
    }

    20 = {
      trigger = { NOT = { religion = jain } }  # Hunter is integral to this build; Jain cannot have it
      add_trait = hunter
      add_trait = shrewd
      change_martial = 3
      give_nickname = nick_the_hunter
    }

    20 = {
      trigger = { has_dlc = "Reapers" }

      add_trait = disfigured
      add_trait = scarred
      add_trait = genius
      change_martial = 2
      change_intrigue = 12
      give_nickname = nick_of_a_thousand_faces
    }

    20 = {
      add_trait = genius
      add_trait = clubfooted
      change_martial = 1
      give_nickname = nick_the_bear
    }

    20 = {
      add_trait = trusting
      add_trait = quick
      change_martial = 4
      give_nickname = nick_the_loyal
    }

    20 = {
      add_trait = ugly
      add_trait = strong
      add_trait = duelist
      change_martial = 1
      give_nickname = nick_the_boar
    }

    20 = {
      assign_elite_beauty_trait_effect = yes
      add_trait = strategist
      change_martial = 4
      give_nickname = nick_the_lion
    }

    20 = {
      add_trait = brave
      add_trait = duelist
      change_martial = 3
      give_nickname = nick_the_bold
    }

    20 = {
      add_trait = shrewd
      add_trait = hedonist
      change_martial = 4
      give_nickname = nick_the_quarreller
    }

    20 = {
      add_trait = shrewd
      add_trait = cavalry_leader
      change_martial = 2
      give_nickname = nick_the_wolf
    }
  }
}
