Bannerlord mechanics

Naval battles

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

Every skill, perk, figurehead, feat, policy and fixed term that changes ship siege weapons, ship morale events, ship damage, simulated ship combat, naval battle rewards, ship costs, ship deployment, ship movement and ship collisions in naval missions in game v1.5.7. All of it is NavalDLC.

Module overrides:

Land and agent counterparts: Battles (initial morale, morale loss on a kill, per-hit XP, loot, simulated troop hits), Combat agent stats (agent reload speed, naval agent penalties, the other figureheads), Combat damage (melee damage on ships, sail fire damage), Sieges (siege bombardment).

Skill guides with these perks: Boatswain, Shipmaster, Mariner, Crossbow.

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. "Captain" halves come from a formation captain; "FirstMate" halves from the party's First Mate role holder; "PartyLeader" halves from the party's leader hero; "ArmyCommander" halves from the army leader.

Ship siege weapons

Reload speed

ship_siege_engine_reload_speed: the reload speed of a siege weapon operated on a ship. Consumer NavalMissionSiegeEngineCalculationModel::CalculateReloadSpeed (NavalDLC, extends). Base base_reload_speed, explained number, no clamp. This is a different number from the agent's own reload speed.

ship_siege_engine_reload_speed = base_reload_speed · (1 + Σ factors)
Source Half Bonus Stage Conditions Verdict
Streamlined Operations (Boatswain) primary 0.1 factor operator's formation captain has the perk works
Viper figurehead — 0.25 factor the operator stands on a ship with a Viper figurehead works

Worked example.

A troop reloads a ballista on a ship with a Viper figurehead in a naval battle. The operator's formation captain (another hero) has Streamlined Operations. Base reload speed from the base model is 1. Inputs: base reload speed 1.

Step Source Stage Change Running value
Base Siege weapon reload speed in naval battles base 1.0000
1 Viper figurehead factor +25% +0.2500 1.2500
2 Streamlined Operations factor +10% +0.1000 1.3500
Result Siege weapon reload speed in naval battles 1.3500

With these inputs, siege weapon reload speed in naval battles is 1.3500.

Streamlined Operations adds its +10% factor next to the Viper figurehead, so the result is 1.3500.

Hull damage

ship_siege_engine_hull_damage: damage a ship siege weapon missile deals to a ship hull. Consumer NavalMissionSiegeEngineCalculationModel::CalculateDamage (NavalDLC, extends). Base floor(base_damage), custom, clamp 0 to 2000.

ship_siege_engine_hull_damage = clamp(ceil(floor(base_damage) · (1 + Σ factors)), 0, 2000)
Source Half Bonus Stage Conditions Verdict
Shipwright's Insight (Boatswain) primary 0.3 factor the shooting hero has the perk; ship siege engine missile works

Starting ammo

ship_siege_weapon_ammo: a ship siege weapon's starting ammo. Consumer NavalMissionSiegeEngineCalculationModel::CalculateShipSiegeWeaponAmmoCount (NavalDLC, replaces the base). Base ammo_count, custom, no clamp.

ship_siege_weapon_ammo = ceil(ammo_count + Σ adds)
Source Half Bonus Stage Conditions Verdict
Smooth Operator (Boatswain) primary 5.0 add the ship's captain has the perk works

Morale events on ships

Ramming

ramming_morale_change: the morale change of the ramming ship's team when it rams an enemy ship. Consumer NavalBattleMoraleModel::CalculateMoraleOnRamming (NavalDLC, extends). Base agent_morale, explained number, no clamp.

ramming_morale_change = agent_morale · (1 + Σ factors)
morale after the ram  = agent_morale + ramming_morale_change = agent_morale · (2 + Σ factors)
Source Half Bonus Stage Conditions Verdict
Shock and Awe (Shipmaster) primary 0.3 factor captain; naval battle works
Ram figurehead — 0.2 factor the first (ramming) ship has a Ram figurehead works

Worked example.

An AI troop with morale 50 is on the team of the ramming ship. Its formation captain (another hero) has Shock and Awe, and the ramming ship has a Ram figurehead. Inputs: agent morale 50.

Step Source Stage Change Running value
Base Morale change of the ramming ship's team on a ram base 50.0000
1 Ram figurehead factor +20% +10.0000 60.0000
2 Shock and Awe factor +30% +15.0000 75.0000
Result Morale change of the ramming ship's team on a ram 75.0000

With these inputs, morale change of the ramming ship's team on a ram is 75.0000.

The 75.0000 is added to the agent's current morale of 50.

Ship sunk

morale_change_on_ship_sunk: the morale change of a sunk ship's team. Consumer NavalBattleMoraleModel::CalculateMoraleChangeOnShipSunk (NavalDLC, extends). Base 0, sequential, no clamp.

morale_change_on_ship_sunk = 0 + Enemy of the Wood bonus
Source Half Bonus Stage Conditions Verdict
Enemy of the Wood (Mariner) primary −10.0 add the enemy army leader has the perk works

The formulas are on Battles and Battles: morale change when an agent falls.

Game number Source Half Bonus Stage Conditions Verdict
initial_battle_morale Rallying Cry (Mariner) primary 0.2 factor naval battle; party leader has the perk works
initial_battle_morale Lion figurehead — 10 add agent is on a ship with a Lion figurehead works
initial_battle_morale Auxiliaries to the Fleet — 0.2 factor party leader's kingdom has the policy works
battle_morale_loss_incapacitated Terror of the Seas (Mariner) secondary −0.1 factor killer's formation captain; naval-only half differs

Ship damage

Campaign ship damage

ship_damage_received: damage dealt to a ship on the campaign side. Consumer NavalDLCCampaignShipDamageModel::GetShipDamage (NavalDLC, replaces the default). Base raw_damage, explained number, clamp min 0.

ship_damage_received = max(0, raw_damage · (1 + Σ factors))
Source Half Bonus Stage Conditions Verdict
Boatswain skill: ship damage reduction — −0.0025 per point factor damaged ship's owner is a mobile party; its First Mate (else the effective party leader) works
Ram figurehead — 0.2 factor attacker ship has a Ram figurehead works

Worked example.

A ship takes 100 raw damage from an attacker ship with a Ram figurehead. The damaged ship's party First Mate has Boatswain 100. Inputs: raw damage 100.

Step Source Stage Change Running value
Base Campaign damage dealt to a ship base 100.0000
1 Ram figurehead factor +20% +20.0000 120.0000
2 Reduce ships' received damage factor -25% -25.0000 95.0000
Result Campaign damage dealt to a ship 95.0000

With these inputs, campaign damage dealt to a ship is 95.0000.

Simulated ship-weapon hits

The ship overload of NavalDLCCombatSimulationModel::SimulateHit (NavalDLC, replaces the default) returns two numbers for one simulated ship-weapon hit. The troop overload is on Battles.

ship_simulation_damage: hull damage. Base engine_damage (ranged engine) or engine_damage · hull_size_factor (non-ranged engine), explained number, no clamp.

ship_simulation_damage = engine_damage                                     ranged engine
                       | (engine_damage · hull_size_factor) · (1 + Σ factors)  non-ranged engine (crew strike)
Source Half Bonus Stage Conditions Verdict
Striker ship hull size factor — engine_damage · hull_size_factor base non-ranged engine works
Seaborne Fortress (Shipmaster) primary −0.1 factor struck party is mobile and its leader has the perk; non-ranged engine works

Worked example.

In a simulated naval battle a ship with hull size factor 3 sends its crew to strike with a non-ranged engine of damage 10. The struck party's leader has Seaborne Fortress. Inputs: engine damage 10, hull size factor 3.

Step Source Stage Change Running value
Base Striker ship hull size factor base 30.0000
1 Seaborne Fortress factor -10% -3.0000 27.0000
Result Hull damage of one simulated ship-weapon hit 27.0000

With these inputs, hull damage of one simulated ship-weapon hit is 27.0000.

ship_simulation_casualties: crew casualties of the same hit. Base ranged_engine, sequential, no clamp.

ship_simulation_casualties = ranged_engine + (1 if Terror holder wins its roll)
Source Half Bonus Stage Conditions Verdict
Ranged ship weapon base casualty — ranged_engine base ranged engine works
Terror (Crossbow) primary 0.2 add striker party leader has the perk differs

Weighted ship combat factor: in naval map events the troop overload of SimulateHit also adds the striker side's weighted ship combat factor as a factor on simulation_damage (works; see Battles).

Combat XP in naval map events

troop_hit_xp: the formula is on Battles. NavalDLC adds its factors on the same explained number after the base model.

Source Half Bonus Stage Conditions Verdict
Non-hero attacker in a naval map event — 0.5 factor attacker party's map event is naval; attacker is not a hero works
Naval Fighting Training (Mariner) primary 0.1 factor naval map event; attacker is a hero and a companion; party is mobile differs
Auxiliaries to the Fleet — −0.15 factor attacker party has a map event; its leader's kingdom has the policy works

Battle rewards

Prisoner capture share

prisoner_capture_share: each winner party's chance weight to capture defeated members. Consumer NavalDLCBattleRewardModel::GetCaptureMemberChancesForWinnerParties (NavalDLC, extends the default). Base contribution / total_contribution · capture_factor, custom, no clamp. The method fills two lists per winner party.

share_i  = contribution_i · trait_i / total_contribution
w_i      = share_i · 1.0 · (1 + Σ factors_i)
list 1_i = w_i / Σ w                                              (when Σ w > 0)
h_i      = share_i · capture_factor · (1 + Σ factors_i)
list 2_i = h_i / Σ h                                              (when Σ h > 0)
Source Half Bonus Stage Conditions Verdict
Contribution share — contribution / total_contribution base — works
Healthy-member capture factor — capture_factor base second list only works
River Raider (Shipmaster) secondary 0.1 factor party leader has the perk differs

Ship loot score

ship_loot_score: each winner party's score for receiving defeated ships. Consumer NavalDLCBattleRewardModel::PartyLootShipScore, read by DistributeDefeatedPartyShipsAmongWinners (NavalDLC, replaces the default) to split defeated ships among the winner parties. Base contribution, explained number, no clamp, rounded.

ship_loot_score = round((contribution + men + leader_bonus + leader_clan_tier_term + party_clan_tier_term) · (1 + Σ factors))
Source Half Bonus Stage Conditions Verdict
Men count — men add — works
Kingdom leader bonus — 50000 add party leader is a kingdom leader works
Clan leader bonus — 20000 add party leader is a clan leader, not a kingdom leader works
Leader's clan tier — 5000 to 10000 add leader has a clan works
Party clan tier — 5000 to 10000 add party has an actual clan works
Gilded Purse (Boatswain) primary 0.25 factor party leader has the perk; party is mobile differs

Loot share

battle_loot_share naval terms (formula on Battles):

Source Half Bonus Stage Conditions Verdict
Nord hostile action loot bonus feat — 0.3 factor defeated party is a caravan or villager party; winner has the Nord feat (leader culture, else party culture) works
Pirate's Prowess (Mariner) secondary 0.3 factor defeated party is a caravan with naval navigation (merchant convoy) works

Ship costs

Upgrade piece cost

ship_upgrade_cost: the cost of a ship upgrade piece. GetShipUpgradePieceCost (NavalDLC, replaces the default) returns 0 when the piece is already unlocked or installed in a slot, else the piece value from NavalDLCShipCostModel::GetShipUpgradePieceValueInternal. Base piece_value, sequential, no clamp, rounded.

v1 = piece_value                          light / medium / heavy value by hull type 0 / 1 / 2
v2 = v1 · (1 + Σ factors)                 party is mobile
v3 = v2 · 0.9                             Royal Navy Prerogative
v4 = v3 · 0.01                            neither party argument is in the player clan
ship_upgrade_cost = round(v4)
Source Half Bonus Stage Conditions Verdict
Master Shipwright (Boatswain) primary −0.3 factor First Mate has the perk; party is mobile works
Royal Navy Prerogative (policy) — 0.9 multiply party's clan is the ruling clan of its kingdom; the kingdom has the policy works
Non-player-clan ship cost factor — 0.01 multiply neither party argument belongs to the player clan works

Worked example.

The player's party buys an upgrade piece whose hull-class value is 1000. The party's First Mate has Master Shipwright, and the player clan is the ruling clan of a kingdom with Royal Navy Prerogative. Inputs: piece value 1000.

Step Source Stage Change Running value
Base Ship upgrade piece cost base 1000.0000
1 Master Shipwright factor -30% -300.0000 700.0000
2 Royal Navy Prerogative multiply ×0.9 -70.0000 630.0000
Result Ship upgrade piece cost 630.0000

With these inputs, ship upgrade piece cost is 630.0000.

Repair cost

ship_repair_cost: the cost to repair a ship. Consumer NavalDLCShipCostModel::GetShipRepairCost (NavalDLC, replaces the default). Base ship_base_value · missing_hp_ratio · 0.25, explained number, no clamp, not rounded.

missing_hp_ratio = (max_hit_points − hit_points) / max_hit_points
ship_base_value  = hull_value · (0.01 if the party is not in the player clan) + 0.3 · Σ slots best piece value
ship_repair_cost = ship_base_value · missing_hp_ratio · 0.25 · (1 + Σ factors)
Source Half Bonus Stage Conditions Verdict
Ship missing hit-point ratio — missing_hp_ratio base — works
Ship base value — ship_base_value base — works
Non-player-clan ship cost factor — 0.01 base party is not in the player clan works
Royal Navy Prerogative (policy) — 0.9 base through the upgrade-piece part of the ship base value only works
Merchant Prince (Boatswain) primary −0.3 factor First Mate has the perk works

Ship deployment and handling

Deployment limit

ship_deployment_limit: ships a party can deploy in a naval battle. Consumer NavalDLCShipDeploymentModel::GetShipDeploymentLimit (NavalDLC). Base 3, explained number, no clamp, truncated to an integer.

ship_deployment_limit = trunc(base + Σ adds)        base = 3, or 8 with the ignore-deployment-limits setting on
Source Half Bonus Stage Conditions Verdict
Ignore-deployment-limits flag — 8 base the game's ignore-deployment-limits setting is on works
Port Authority (Boatswain) primary 1.0 add party leader works
Blessings Of The Sea (Boatswain) primary 1.0 add party leader works
Merchant Fleet (Boatswain) primary 1.0 add party leader works
Master and commander (Shipmaster) secondary 1.0 add party leader works
Stormrider (Shipmaster) secondary 1.0 add party leader works

Sail force, oar force, main deck crew

NavalMissionShipParametersModel (campaign missions). NavalCustomBattleMissionShipParametersModel (custom battles) has identical sail and oar methods; its main deck method has no terms. Only NavalCustomGame::InitializeGameModels (0xfe) creates it, so its Windborne, Chain to Oars and wind bonus sites are dead in the campaign.

ship_sail_force     = base_sail_force · (1 + Σ factors)
ship_oar_force      = max(0, base_oar_force_multiplier · (1 + Σ factors))
main_deck_crew_size = min(ceil(main_deck_crew_capacity · (1 + Σ factors)), total_crew_capacity)
Game number Source Half Bonus Stage Conditions Verdict
ship_sail_force Shipmaster skill: wind bonus — 0.0005 per point factor the ship captain agent's own Shipmaster differs
ship_sail_force Windborne (Shipmaster) primary 0.2 factor the ship captain agent's own character has the perk works
ship_oar_force Chain to Oars (Shipmaster) primary 0.2 factor captain of the pilot agent's formation, no self-exclusion works
main_deck_crew_size Popular Captain (Boatswain) secondary 0.05 factor party leader of the agent's party works

Ship collisions

ship_collision_stagger (ShipCollisionOutcomeLogic::HandleAgentActions): when ships collide, every agent on the hit ship within 30 m of the impact point gets a stagger strength

s = impact · 0.15 · 30 / (distance + 0.1) · (0.5 + 0.5 · random) · 100 / (mariner + 100)
Source Stage Value Conditions Verdict
Mariner skill level multiply 100 / (mariner + 100) naval battle works

Game code

Changelog