Bannerlord mechanics

Battles

Bannerlord v1.5.7 · checked 2026-11-12 · updated 2026-11-13

Every skill, perk, banner, feat and policy that changes battle morale, combat XP, battle rewards, the auto-resolve simulation, troop sacrifice, team AI tactics, tournaments (entry, start chance, matches resolved without the player), stealth detection and post-battle recovery in game v1.5.7.

Module overrides:

Naval conditions in detail: Naval battles.

Skill guides with these perks: Leadership, Tactics, One Handed, Two Handed, Polearm, Bow, Crossbow, Throwing, Riding, Scouting, Roguery, Charm, Steward, Medicine, Engineering, Mariner, Shipmaster.

Verdicts: works = does what the tooltip says, or more — broader effects are noted; differs = narrower, different or extra conditions/values than the tooltip; unused = never read by the game; ui_only = only shown in the interface; dead = the code never runs in a campaign (the reason is given). A "skill level" source reads the skill value itself, with no skill effect or perk in between. "Captain" halves come from a formation captain; "Personal" halves from the hero's own character; "PartyLeader" halves from the party's leader hero.

Battle morale

Initial battle morale

initial_battle_morale is an agent's morale when it spawns. Consumer: NavalBattleMoraleModel::GetEffectiveInitialMorale (NavalDLC), which continues the explained number of SandboxBattleMoraleModel::GetEffectiveInitialMoraleExplained. Base base_morale (the method's base morale argument), combine rule custom, no clamp.

initial_battle_morale = (base_morale + Σ adds + Σ naval adds) · (1 + Σ factors + Σ naval factors)
Source Half Bonus Stage Conditions Verdict
Fervent Attacker (Leadership) primary 4.0 add party is the attacker works
Stout Defender (Leadership) primary 8.0 add party is the defender works
Great Leader (Leadership) primary 5.0 add army commander; party in an army (army leader's own agent included) works
Great Leader (Leadership) secondary 5.0 add troop culture matches the leader's works
Uplifting Spirit (Leadership) primary 10.0 add siege assault or battle outside a besieged settlement works
We Pledge our Swords (Leadership) secondary 1.0 add min(tier6_troops, 10) — differs
Lead by example (One Handed) secondary 5.0 add — works
Stand United (One Handed) primary 8.0 add party side weaker than the opposing side works
Last Hit (Throwing) secondary 5.0 add — works
Relief Force (Riding) primary 10.0 add party is not the leading party of its battle side differs
Patrols (Scouting) primary 5.0 add scout role; enemy side has a bandit-culture party differs
Renowned Archer (Bow) primary 0.1 factor ranged troop works
Marksmen (Crossbow) secondary 0.1 factor ranged troop works
Improviser (Tactics) primary 0.0 cancels the −0.2 disorganized factor leader has the perk differs
Disorganized party — −0.2 factor party disorganized; not a siege attacker works
Calculating trait — 0.2 / 0.1 for the two lowest Calculating levels factor the army leader, else the party leader, has the trait and is not the agent works

Reading the table:

Naval terms (NavalDLC, second layer):

Source Half Bonus Stage Conditions Verdict
Axe of the North Wind (Mariner) secondary 20.0 add naval battle; mariner troop works
Sunny Disposition (Mariner) secondary 20.0 add naval battle; not a mariner troop works
Rallying Cry (Mariner) primary 0.2 factor naval battle; party leader works
Commodore (Shipmaster) primary figurehead_effect add army commander; party in an army; own party flagship has a Lion figurehead differs
Lion figurehead — 10 add agent is on a ship with a Lion figurehead works
Auxiliaries to the Fleet (policy) — 0.2 factor leader's kingdom has the policy works

Morale change when an agent falls

SandboxBattleMoraleModel::CalculateMaxMoraleChangeDueToAgentIncapacitated returns two values, built by CalculateMaxMoraleChangeDueToAgentIncapacitatedExplained. When an agent is removed, the mission applies:

Only AI-controlled agents are affected.

weapon_factor = 0.75 default
              | 0.25    killing-blow weapon flags have any of mask 1073766400
              | 0.3125  ... and all of mask 1073774592
              | 0.5     weapon class maps to Bow, Crossbow or Throwing
              then max(0, weapon_factor)

Item1 = max(0, battle_importance · 4 · weapon_factor · casualties_factor · (1 + Σ Item1 factors))
Item2 = max(0, battle_importance · 3 · weapon_factor · (1 + Σ Item2 factors))

Item1 sources (loss of the victim's allies)

Killer-side terms need a killer with a campaign character. Victim-side terms need the victim to have a campaign character.

Source Half Bonus Side Conditions Verdict
Terror (Two Handed) primary 0.2 killer two-handed killing blow works
Annoying Buzz (Riding) primary 0.2 killer ranged killing blow; killer mounted works
Annoying Buzz (Riding) secondary 0.05 killer's captain ranged killing blow; killer mounted works
Thunderous Charge (Riding) primary 0.2 killer melee killing blow; killer mounted works
Thunderous Charge (Riding) secondary 0.1 killer's captain melee killing blow; killer mounted works
Heroic Leader (Leadership) secondary 0.1 killer's captain any weapon works
Terror (Crossbow) secondary 0.25 killer's captain crossbow killing blow works
Health Advice (Medicine) secondary 0.0 victim's party surgeon victim unconscious; sets the loss to 0 works
Standard Bearer (Polearm) primary −0.2 victim's captain — differs
Loose Formations (Tactics) secondary −0.25 victim's captain victim's formation in line, loose, circle or scatter differs
Tight Formations (Tactics) secondary −0.25 victim's captain victim's formation in shield wall, square, skein or column differs
Price of Loyalty (Steward) primary −0.005 · (skill − 250) victim's party quartermaster skipped for an unconscious victim under Health Advice differs
Decreased Morale Shock banner — −0.1 / −0.2 / −0.3 by banner level victim's formation banner — works
Terror of the Seas (Mariner) secondary −0.1 killer's captain naval-only half differs

Item2 sources (gain of the killer's side)

Source Half Bonus Conditions Verdict
Make a Difference (Leadership) primary 1.0 killer has the perk; any weapon works
Hope (Two Handed) primary 0.3 two-handed killing blow works
Increased Morale Shock by melee troops banner — 0.1 / 0.2 / 0.3 by banner level killer's formation banner; killer's default formation is infantry; melee killing blow works

Example: morale gain for a two-handed kill

A hero with Make a Difference and Hope kills an enemy with a two-handed weapon (weapon factor 0.75) in a battle of importance 1. Inputs: battle importance 1, weapon factor 0.75.

Step Source Stage Change Running value
Base Morale gain of the killer's side when an enemy agent falls base 2.2500
1 Make a Difference factor +100% +2.2500 4.5000
2 Hope factor +30% +0.6750 5.1750
Result Morale gain of the killer's side when an enemy agent falls 5.1750

With these inputs, morale gain of the killer's side when an enemy agent falls is 5.1750.

Base battle_importance · 3 · weapon_factor = 2.2500; both perks are factors on that base, so the gain is 5.1750.

Morale loss when an agent panics

battle_morale_loss_panicked: Item1 of SandboxBattleMoraleModel::CalculateMaxMoraleChangeDueToAgentPanicked, the loss of the panicking agent's side. NavalBattleMoraleModel delegates.

battle_morale_loss_panicked = max(0, battle_importance · casualties_factor · 1.1 · (1 + Σ factors))
Item2                       = battle_importance · 2
Source Half Bonus Conditions Verdict
Standard Bearer (Polearm) primary −0.2 panicking agent's formation captain; no self-exclusion differs
Price of Loyalty (Steward) primary −0.005 · (skill − 250) panicking agent's party quartermaster works
Decreased Morale Shock banner — −0.1 / −0.2 / −0.3 panicking agent's formation banner works

Panic

can_panic_due_to_morale (SandboxBattleMoraleModel::CanPanicDueToMorale) is a boolean, base 1 (can panic). NavalBattleMoraleModel calls the base model.

Source Half Bonus Conditions Verdict
Loyalty and Honor (Leadership) primary 3.0 human agent with a campaign character; its party leader has the perk; troop tier at least the bonus works

The bonus (3) is the tier threshold. When the test passes the method returns false: tier 3+ troops cannot panic.

Combat XP

XP per hit

troop_hit_xp is the XP one hit earns, the game's battle experience. Consumer: NavalDLCCombatXpModel::GetXpFromHit, wrapping DefaultCombatXpModel::GetXpFromHit. Combine rule explained number, no clamp. There is no separate post-battle XP award: every perk that says "after battles" acts on this per-hit value.

base        = 0.4 · (attacked_power + 0.5) · (attacker_power + 0.5) · (min(damage, max_hp) + fatal_hp) · mission_xp_multiplier
troop_hit_xp = base · (1 + Σ factors)
Source Half Bonus Conditions Verdict
Lead by example (One Handed) primary 0.05 all troops; halved at sea works
Corps-a-corps (One Handed) primary 0.1 infantry; halved at sea works
Trainer (One Handed) secondary 0.05 not ranged; halved at sea works
Baptised in Blood (Two Handed) secondary 0.05 not ranged; halved at sea works
Bulls Eye (Bow) primary 0.1 ranged; halved at sea works
Mounted Crossbowman (Crossbow) secondary 0.05 ranged; halved at sea works
Resourceful (Throwing) secondary 0.1 troop has a throwing weapon; halved at sea works
No Rest for the Wicked (Roguery) primary 0.2 bandit-culture troop; land only works
Guards (Polearm) secondary 0.2 governor in the town; garrison party; mounted troop works
Projectile Deflection (Two Handed) secondary 0.1 governor in the town; garrison party works
Inspiring Leader (Leadership) secondary 0.05 captain; hero attacker; party mobile and not at sea differs
Non-hero attacker in a naval map event — 0.5 naval map event; attacker not a hero works
Naval Fighting Training (Mariner) primary 0.1 naval map event; attacker is a companion hero differs
Auxiliaries to the Fleet (policy) — −0.15 attacker leader's kingdom has the policy; any map event works

Example: one hit by an infantry troop

A melee infantry troop of a land party hits an enemy for 30 damage (not fatal) in a field battle. The party leader has Lead by Example, Corps-a-corps and Trainer; the party is not at sea. Inputs: attacked power 1.5, attacker power 1.5, damage 30, max hp 100, fatal hp 0, mission xp multiplier 1.

Step Source Stage Change Running value
Base Combat XP from one hit base 48.0000
1 Corps-a-corps factor +10% +4.8000 52.8000
2 Lead by example factor +5% +2.4000 55.2000
3 Trainer factor +5% +2.4000 57.6000
Result Combat XP from one hit 57.6000

With these inputs, combat XP from one hit is 57.6000.

The three factors are added together and applied once to the base 48.0000, giving 57.6000.

Two-handed kills and other roster XP grants

troop_xp is a one-off XP grant written straight to the troop roster. Each site is a separate event, not a term of a shared total. Base 0, sequential.

Source Half Bonus Event Conditions Verdict
Baptised in Blood (Two Handed) primary 5.0 BattleCampaignBehavior::OnHeroCombatHit fatal hit by the hero with a TwoHandedSword, TwoHandedPolearm, TwoHandedAxe or TwoHandedMace; every non-hero infantry stack gets trunc(bonus · troop count) works
Apprenticeship (Engineering) primary 5.0 siege engine built effective engineer of the building party; every non-hero stack gets trunc(bonus · stack count) works
Master and commander (Shipmaster) primary 1.0 hourly at sea once per troop stack differs
Stormrider (Shipmaster) primary 30.0 entering a storm perk checked for every party, the main party included; once per troop stack differs

Daily garrison XP

garrison_daily_troop_xp (DefaultDailyTroopXpBonusModel::CalculateTroopXpBonusInternal): base 0, result truncated to int and given to every garrison roster element.

garrison_daily_troop_xp = trunc((0 + building XP + Raise The Meek) · (1 + Projectile Deflection))
Source Half Bonus Stage Conditions Verdict
Training Fields (town) — 1 / 2 / 3 by level add town works
Training Fields (castle) — 3 / 4 / 5 by level add castle works
Drills (castle daily project) — 8 add castle; the town's current daily project works
Raise The Meek (Leadership) secondary 3.0 add governor in the town works
Projectile Deflection (Two Handed) secondary 0.1 factor governor in the town works

Building amounts pass through the building effect model (Steward Contractors and, for daily projects, Master of Planning apply inside).

Hero skill XP multiplier

hero_skill_xp (DefaultGenericXpModel::GetXpMultiplier): base 1, custom. Applied to every skill XP gain of a hero.

Source Half Bonus Conditions Verdict
Natural Leader (Charm) secondary 1.2 (replaces) hero is a player companion; the player has the perk differs

differs: the secondary half's bonus value (0.2) is never read; the method returns the constant 1.2. The perk is read on the player, not the clan leader role.

Battle rewards

DefaultBattleRewardModel. Perk and feat terms need a mobile winner party. NavalDLCBattleRewardModel delegates all of these except the loot share.

Renown

battle_renown_gain = renown_value · contribution_share · renown_multiplier · (1 + Σ factors)
Source Half Bonus Conditions Verdict
Public Speaker (Charm) primary 0.3 party leader has the perk works
Famous Commander (Leadership) primary 0.5 party leader hero works
Long Reach (Throwing) secondary 0.2 party leader has the perk works
Vlandian renown mercenary feat — 0.05 leader's culture, else party culture works
Valor trait — 0.1 / 0.2 for the two highest Valor levels party leader hero has the trait works

Influence

battle_influence_gain = 0                                                                  (winner's faction is not a kingdom)
                      = influence_value · contribution_share · influence_multiplier · (1 + Σ factors)
Source Half Bonus Conditions Verdict
Warlord (Charm) primary 0.3 kingdom faction; party leader hero works

Victory morale

victory_morale_gain = (0.5 + renown_value · contribution_share · 0.5) · (1 + Σ factors)
Source Half Bonus Conditions Verdict
Citizen Militia (Leadership) secondary 0.1 — works
Long Reach (Throwing) secondary 0.2 — works

Relation for helping a lord

battle_help_relation_gain (GetPlayerGainedRelationAmount):

r             = (side_strength[main side] − player_party_initial_strength) / (side_strength[opponent] + 1)
strength_term = 1 + (1 − r)      r < 1
              = 0.5 · (3 − r)    1 ≤ r < 3
              = 0                r ≥ 3
battle_help_relation_gain = trunc((0.75 + (contribution_rate · 1.3 · (strength_term + side_renown)) ^ 0.67) · (1 + Σ factors))
Source Half Bonus Conditions Verdict
Camaraderie (Charm) primary 1.0 the player has the perk works

A +1.0 factor gives base · 2.

Loot share

battle_loot_share (NavalDLCBattleRewardModel::GetLootItemChancesForWinnerParties, wrapping the default method): each winner party's share of the defeated party's loot. Custom.

weight            = 1 + Roguery skill factor + Rogue Extraordinaire factor
know_how          = 1 + Know-How bonus      (defeated party is a caravan or villager party), else 1
battle_loot_share = contribution / total_contribution · weight · know_how · 0.5 · naval_factor
Source Half Bonus Stage Conditions Verdict
Roguery skill (RogueryLootBonus) — 0.0025 per point factor party leader's Roguery works
Rogue Extraordinaire (Roguery) primary 0.01 · (skill − 200) factor Roguery above 200 works
Know-How (Roguery) primary 0.05 multiply 1 + bonus defeated party is a caravan or villager party works
Nord hostile action loot bonus feat — 0.3 factor Nord culture; defeated caravan or villager party works
Pirate's Prowess (Mariner) secondary 0.3 factor defeated party is a caravan with naval navigation (merchant convoy) works

Negative modifier removal on loot

loot_modifier_removal_chance: per looted item whose modifier lowers its price, the chance it is replaced with the unmodified item. Base 0; the only source sets it.

Source Half Bonus Read in Verdict
Metallurgy (Engineering) primary 0.3 loot collection, per unit of each looted item, effective engineer of the looting party works
Metallurgy (Engineering) primary 0.3 main party casualty loot differs

differs: the player's casualty loot gets two rolls. Casualty loot is rolled first, then the same items go through loot collection, which rolls again on items still carrying a negative modifier. Effective chance for those items 1 − (1 − bonus)^2.

Combat simulation

Battle advantage

simulation_battle_advantage (NavalDLCCombatSimulationModel::GetBattleAdvantage, wrapping the default): each side's advantage, used as striker_advantage of simulation_damage. It is computed for each side's leading party and starts at 1.0.

simulation_battle_advantage = (1 + Σ adds) · (1 + Σ factors)
Source Half Bonus Stage Conditions Verdict
Tactics skill (TacticsAdvantage) — 0.001 per point factor leader hero's Tactics; not a naval map event differs
Pre Battle Maneuvers (Tactics) secondary 0.01 · tactics_difference add both parties mobile with leader heroes; difference > 0 differs
Patrols (Scouting) secondary 0.1 factor opposing party is bandit culture; leader hero differs
Siege attacker penalty — −0.1 factor attacker side; siege map event works
Mariner skill (NavalAutoBattleSimulationAdvantage) — 0.001 per point factor naval map event differs
Pirate Hunter (Mariner) primary 0.2 factor naval map event; bandit leads the defender side differs

Example: a siege attacker with Pre Battle Maneuvers

The attacker leader in a simulated siege assault has Tactics 150 and Pre Battle Maneuvers; the defender leader has Tactics 100.

Step Source Stage Change Running value
Base Side advantage in simulated battles base 1.0000
1 Pre Battle Maneuvers add +0.5000 1.5000
2 Simulation advantage factor +15% +0.2250 1.7250
3 Siege attacker advantage penalty factor -10% -0.1500 1.5750
Result Side advantage in simulated battles 1.5750

With these inputs, side advantage in simulated battles is 1.5750.

With Tactics 150 versus 100, Pre Battle Maneuvers adds 0.5000 to the base before the factors.

Settlement advantage

settlement_simulation_advantage (DefaultCombatSimulationModel::GetSettlementAdvantage; NavalDLC delegates). Only for a fortification with a SiegeEvent; otherwise 1.25 for a village, else 1.0, with no perk terms.

wall_strength  = 4 + (wall_level − 1), × 0.25 when the settlement's total wall hit points < 1e-05
engine_pressure = 0.25 (any ram or siege tower built)
                + 0.24 improved ram | 0.16 ram | 0
                + 0.24 more than one siege tower | 0.16 one
                + 0.08 · ranged engines (trebuchet, onager, ballista)
                + 0.12 · fire engines (fire onager, fire ballista)
settlement_simulation_advantage = (1 + wall_strength) / (1 + engine_pressure) · (1 + Σ factors)
Source Half Bonus Conditions Verdict
On The March (Tactics) primary −0.2 any besieger-side party has the perk (army commander); applied once works
On The March (Tactics) secondary 0.2 governor in the besieged town works

On The March primary reads the perk with a fixed land environment. That matches its land_only half: besieger-side parties are never at sea. A besiege order targets the settlement, not its port; only the besiege branch of the settlement encounter adds a party to the camp, while a party arriving at sea at a besieged port fights the blockade or enters the port; a party moving onto land switches to land navigation; army members copy the leader's at-sea state.

Simulated hit damage

simulation_damage (NavalDLCCombatSimulationModel::SimulateHit, wrapping the troop overload of the default):

base              = floor((0.5 + 0.5 · random) · 40 · (striker_power / struck_power) ^ 0.7 · striker_advantage)
morale_factor     = (min(striker_morale − 50, 0) − max(struck_morale − 50, 0)) · 0.005
simulation_damage = base · (1 + Σ perk factors + morale_factor + ship_combat_factor)
Source Half Bonus Conditions Verdict
Tight Formations (Tactics) primary 0.1 striker infantry; struck mounted works
Loose Formations (Tactics) primary −0.1 struck party's perk; struck infantry; striker ranged works
Decisive Battle (Tactics) primary 0.05 striker on Plain, Steppe or Desert works
Extended Skirmish (Tactics) primary 0.1 striker on Snow or Forest works
Coaching (Tactics) primary 0.03 — works
Law Keeper (Tactics) primary 0.1 struck party is bandit; striker not bandit differs
Elite Reserves (Tactics) primary −0.2 struck party's perk; struck troop tier ≥ 3 works
Encirclement (Tactics) primary 0.05 striker party has more healthy men than the struck party works
Counter Offensive (Tactics) primary 0.1 field battle; striker defends works
Counter Offensive (Tactics) secondary 0.1 striker party has fewer healthy men than the struck party works
Besieged (Tactics) primary 0.1 siege assault; striker defends; any hero in the party works
Tactical Mastery (Tactics) primary 0.005 · (skill − 200) army leader's own party; Tactics above 200 differs
Vanguard (Scouting) primary 0.05 struck party on the defender side works
Vanguard (Scouting) secondary 0.1 sally-out; striker on the attacker side works
Rearguard (Scouting) secondary 0.1 battle outside a besieged settlement or sally-out; striker on the defender side works
Side morale — morale_factor — works
Weighted ship combat factor — ship_combat_factor naval map event works
Mariner skill (NavalAutoBattleCombatPenaltyNegation) — 0.5 per point — unused

Hero power modifier

hero_power_modifier (DefaultMilitaryPowerModel::GetPowerModifierOfHero; NavalDLC delegates): base 0, sequential. For every perk with primary role Captain the hero has (NavalDLC perks included):

t = required skill / 250
add 0.01  t ≤ 0.3
    0.02  0.3 < t ≤ 0.6
    0.03  0.6 < t ≤ 0.9
    0.06  t > 0.9

0 for no hero. Recomputed when a Captain-role perk is picked. Every source differs: the perk bonus is never read and the power term is not stated in any tooltip. Examples:

Perk Required skill / 250 Add
Shield Breaker (Mariner) primary 50/250 = 0.2 0.01
Rallying Cry (Mariner) primary 125/250 = 0.5 0.02
Standard Bearer (Polearm) primary 175/250 = 0.7 0.03
Gens d'armes (Tactics) primary 250/250 = 1.0 0.06

Example: four Captain-role perks

A hero holding Shield Breaker, Rallying Cry, Standard Bearer and Gens d'armes, four perks whose primary role is Captain.

Step Source Stage Change Running value
Base Hero power modifier in simulation base 0.0000
1 Shield Breaker add +0.0100 0.0100
1 Standard Bearer add +0.0300 0.0400
1 Rallying Cry add +0.0200 0.0600
1 Gens d'armes add +0.0600 0.1200
Result Hero power modifier in simulation 0.1200

With these inputs, hero power modifier in simulation is 0.1200.

Troop sacrifice

Breaking into or out of a besieged settlement

siege_break_lost_troops: consumer NavalDLCTroopSacrificeModel::GetLostTroopCountForBreakingInBesiegedSettlement; break-out (GetLostTroopCountForBreakingOutOfBesiegedSettlement) has the same formula. Both reach DefaultTroopSacrificeModel::GetLostTroopCount. Callers are player menus only, so MainParty is the breaking party.

is_port     = targeting the port and at sea              (break-in)
           = breaking out from the port                (break-out)
loss_ratio = clamp(0.12 · ((besieger_strength + 1) / (own_strength + 1)) ^ 0.25, 0.12, 0.24)
first      = loss_ratio · regulars · (1 + skill_factor)
siege_break_lost_troops = (5 + floor(first)) · (1 + Σ later factors)
                        = 0                              (is_port and no active blockade)
Source Half Bonus Stage Conditions Verdict
Tactics skill (TacticsTroopSacrificeReduction) — −0.001 per point factor on first player character's Tactics works
Improviser (Tactics) secondary −0.25 later factor main party leader; halved when is_port works
Ghost Ship (Shipmaster) primary −0.2 later factor navigator; break-in at sea, or break-out from port differs
Port without blockade — 0 override is_port and no active blockade works

Getting away

troops_sacrificed_getaway (DefaultTroopSacrificeModel::GetNumberOfTroopsSacrificedForTryingToGetAway; NavalDLC delegates). Player menus only.

strength_ratio = side_strength[opponent] / (side_strength[own] + 1)
first  = (5 + 0.1 · regulars · min(strength_ratio, 3) ^ 1.3) · (1 + skill_factor)
second = max(1, Round(first)) · (1 + Swift Regroup)
troops_sacrificed_getaway = Round(second)    when Round(second) ≤ available_troops
                          = −1               otherwise
Source Half Bonus Stage Conditions Verdict
Tactics skill (TacticsTroopSacrificeReduction) — −0.001 per point factor on first player character's Tactics works
Swift Regroup (Tactics) secondary −0.5 factor on second main party; land only works

Team AI tactics

team_ai_tactic_options (MissionCombatantsLogic::EarlyStart) is the number of tactics a team AI may choose from in a field battle. Each side reads its best Tactics skill:

t = max over the side's parties of the party leader's Tactics (0 for a party without a leader hero)
t Defender side adds Attacker side adds
any Charge Charge
≥ 20 Full Scale Attack, Defensive Engagement, Defensive Line Full Scale Attack, Ranged Harassment Offensive
≥ 50 Frontal Cavalry Charge, Defensive Ring, Hold Choke Point Frontal Cavalry Charge, Coordinated Retreat
Source Stage Value Conditions Verdict
Tactics skill level add +3 at 20, +3 more at 50 field battle, defender side works
Tactics skill level add +2 at 20, +2 more at 50 field battle, attacker side works

Captain selection

captain_selection_score (Formation::GetHeroPointForCaptainSelection) = level + 100 · Charm (raw skill).

Source Stage Value Conditions Verdict
Charm skill level add 100 · Charm dead

Tournaments

Simulated matches

When a fight tournament match is skipped (TournamentFightMissionController::SkipMatch), Simulate scores each participant from its match equipment (CharacterObject::GetSimulationAttackPower). Each exchange subtracts the attacker's attack from the target's defense.

f      = 0.3 + 0.7 · item_skill / 300            item with a relevant skill, else 1
attack = max over weapons of f · effectiveness (+ f · ammo effectiveness for a ranged weapon) + 2.5 · m
defense = 4000 + 10 · armor_sum² / armor_weight + 10 · f · shield effectiveness per shield + 5 · m
m      = f_horse · (horse + harness effectiveness)
Number Source Stage Value Conditions Verdict
tournament_sim_attack_power Weapon skill level (the weapon's own skill) multiply 0.3 + 0.7 · item_skill / 300 tournament works
tournament_sim_attack_power Riding skill level (horse term m) multiply 0.3 + 0.7 · Riding / 300 tournament works
tournament_sim_defense_power One Handed skill level (shields) multiply 0.3 + 0.7 · One Handed / 300 tournament, shield works
tournament_sim_defense_power Riding skill level (horse term m) multiply 0.3 + 0.7 · Riding / 300 tournament works

Archery tournament

tournament_archery_sim_hit_chance (TournamentArcheryMissionController::GetDeadliness) = 0.01 + Bow / 300 · 0.19 (raw Bow), the hit chance per shot of a simulated archery match.

Source Stage Value Conditions Verdict
Bow skill level add Bow / 300 · 0.19 tournament dead

Tournaments without the player

tournament_simulation_score (DefaultTournamentModel::GetTournamentSimulationScore; NavalDLC delegates). A tournament resolved without the player (TournamentManager::SimulateTournament) is won by the participant with the highest score · (0.75 + 0.25 · random).

score = hero_factor · (max(One Handed, Two Handed, Polearm) + Athletics + Riding) · 0.01
Source Stage Value Conditions Verdict
One Handed, Two Handed or Polearm skill level (the highest) add 0.01 · hero_factor · skill works
Athletics skill level add 0.01 · hero_factor · skill works
Riding skill level add 0.01 · hero_factor · skill works

Tournament start chance

tournament_start_chance (DefaultTournamentModel::GetTournamentStartChance; NavalDLC delegates): 0 during a siege or outside the town's week of the season, else

chance = 0.1 · (qualifying parties in town + suitable heroes without a party in town) − 0.2

A hero is suitable when of age and max(One Handed, Two Handed) > 100 (raw, SuitableForTournament).

Source Stage Value Conditions Verdict
One Handed or Two Handed skill level (the higher) add +0.1 per suitable hero town works

Tournament entry

tournament_npc_can_join (FightTournamentGame::CanBeAParticipant; not a model, no module replaces it). The main hero always enters. Other heroes (lords of parties in town, heroes without a party in town, player clan heroes in the main party) need max(One Handed, Two Handed) ≥ 100 (raw), besides being of age, unwounded, combatant, and a lord or wanderer. Regular troops need tier 3 or higher.

Source Stage Value Conditions Verdict
One Handed or Two Handed skill level (the higher) override 0 (cannot enter) below 100 works

Tournament renown

tournament_renown (DefaultTournamentModel::GetRenownReward; NavalDLC delegates): sequential.

tournament_renown = Round(3 · Duelist + Self Promoter)
Source Half Bonus Stage Conditions Verdict
Duelist (One Handed) secondary 2.0 multiply winner hero has the perk works
Self Promoter (Charm) primary 3.0 add after the multiply winner hero has the perk works

Maximum bet

tournament_max_bet (TournamentBehavior::GetMaximumBet, SandBox): integer 150, multiplied by the whole-number bonus when the player has the perk.

Source Half Bonus Stage Conditions Verdict
Deep Pockets (Roguery) primary 2.0 multiply the player has the perk; 150 · 2 = 300 works

Hideouts

SetCleanHideoutRelations (HideoutCampaignBehavior) runs after a hideout is cleared. Both numbers are set only by Effort For The People, read on the player.

Number Source Bonus Effect Verdict
hideout_clear_relation Effort For The People (Charm) primary 3.0 relation +bonus (whole number) with the clan leader of the town nearest the hideout, when that leader is not the player works
town_loyalty Effort For The People (Charm) primary 1 town loyalty +1 when that leader is the player (constant, bonus not read) works

Stealth detection

stealth_sound_factor (AlarmedBehaviorGroup::UpdateAgentAlarmState, SandBox) scales how loud a sneaking agent is to an alarmed guard, in missions with alarmed agents (stealth and scene missions).

m = max(0, 1 − 0.0001 · roguery − 0.002 · equipment_stealth_bonus)
heard = raw sound · m / (20 + 2.5 · distance²), 0 when 0.125 or less
Source Stage Value Conditions Verdict
Roguery skill level add −0.0001 · roguery works

Recovery after battle

CampaignBattleRecoveryBehavior. Each number is base 0 and set only by its perk.

Number Source Bonus Effect Verdict
lame_horse_daily_recovery_chance Veterinarian (Medicine) primary 0.3 daily, with chance bonus: one lame horse becomes a healthy horse; land only works
dead_cavalry_mount_recovery_chance Veterinarian (Medicine) secondary 0.5 per dead mounted troop with a horse in equipment slot 10, with chance bonus: one copy added to the party's ItemRoster differs
wounded_troop_battle_xp Battle Hardened (Medicine) primary 25.0 per WoundedInBattle element, Round(bonus · sea) · count XP; sea = 0.5 at sea, else 1 (the half is naval_reduced) differs

Game code

Changelog