Bannerlord mechanics

Naval campaign

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

Every campaign-map game number that NavalDLC adds or changes and that a skill, perk, feat or policy touches, at full precision for game v1.5.7: party speed at sea, ship crew, cargo at sea, spotting at sea, wages and food at sea, raids, fishing, embark and recall times, getting away from an engagement, ship salvage and shipyards, governor income from ships, and the Nord naval feats. Land formulas are on Party and map; village production and militia terms of NavalDLC are on Settlements. Plain-language versions per skill: Shipmaster, Boatswain, Mariner, Steward, Roguery.

Module status: only what NavalDLC adds or changes needs NavalDLC; the base raid hit damage, No Rest for the Wicked, Efficient Campaigner's raid food loot and the default inventory, food, spotting, wage and cohesion terms are in the base game. NavalDLC models extend the default models (call the default method first, then add terms) unless a section says replaces. SandBox and BirthAndDeath change none of these formulas; StoryMode's only extension here is the party size limit, in the story campaign.

Conventions

Most numbers here are the game's standard modifier sum:

result = clamp( (base + Σ adds) · (1 + Σ factors), min, max )

Other combine rules: sequential (each term applied in code order to a plain float), custom (formula given in the section).

Roles name the hero whose perk or skill is read: PartyLeader, Navigator, FirstMate (the party's clan role holders, else the effective party leader), Governor (the governor of the named town; for most governor perks the governor must be in that town; sites that read the governor directly have no presence check and say so), Personal. "At sea" means the party is currently sailing. Terrain names are the map face terrain types: OpenSea, CoastalSea, River, UnderBridge.

Verdicts in the tables:

Party speed at sea

Live consumer NavalDLCPartySpeedCalculationModel (CalculateFinalSpeed). The pipeline is the same as on land (base number, then final number; an attached army member reuses its leader party's base): see Party map speed. At sea NavalDLC's base step discards the land base and uses the sea base below. NavalDLC's final step then runs the default final step (its terms guarded by "not at sea" are skipped; Snow or Blizzard −0.1 has no at-sea guard and still applies) and adds the at-sea terms below.

Formula

base_sea = 4                                                   party has no ships
base_sea = 0.5 · (mean_ship_speed + slowest_ship_speed)        otherwise
speed    = clamp( (base_sea + overburdened_sea + shallow_draft_bonus + storyline)
                  · (1 + Σ base factors + Σ default final factors + Σ sea final factors), 1, 10 )

Adds (overburden, shallow draft, storyline) enter the base, so every factor scales them.

Base terms (CalculateNavalBaseSpeed), in code order

  1. Base: 4 without ships, else 0.5 · (mean_ship_speed + slowest_ship_speed).
  2. Ghost Ship (Shipmaster, secondary): fishing parties only, factor from the governor of the fishing village's bound town.
  3. Undermanned: -0.4 · (1 - crew / skeletal_crew) when crew < skeletal_crew (see Ship crew and Skeletal crew).
  4. Overmanned: crew_capacity / crew - 1 when crew > crew_capacity; crew_capacity is the sum of each ship's total crew capacity over the party's and attached parties' ships.
  5. Overburdened at sea: added to the base when cargo_weight > capacity.
  6. Over fleet size: -fleet_size_penalty when the party and attached parties have more than 3 ships.
  7. Disorganized: −0.4.
  8. Minimum 1.

Sea final terms (CalculateFinalSpeed), in code order

  1. Terrain: OpenSea +0.448; else River +0.5. CoastalSea and UnderBridge get neither.

  2. Shallow draft (party with own ships): each own ship whose hull can navigate shallow water contributes +0.066 · campaign_speed on CoastalSea, River or UnderBridge and -0.066 · campaign_speed on any other face; other hulls contribute 0. The sum divided by the party's own ship count is added to the base. Attached parties' ships do not count. Steps 3 to 8 are skipped for a party on a raft or a ferry (naval auto travel).

  3. River Raider (Shipmaster, primary): on CoastalSea, River or UnderBridge, factor -0.448 · bonus.

  4. Nord ship movement feat: on CoastalSea, River or UnderBridge, factor equal to the feat value (0.1).

  5. Sailing speed skill effect (Shipmaster): navigator's skill × 0.0005.

  6. Old Salt's Touch (Shipmaster, primary).

  7. Favorable Tide (Shipmaster, primary).

  8. Storyline: +1 added to the base for the main party while the naval storyline is active.

  9. Wind: factor wind_boost · (1 + sum_of_factors), where sum_of_factors is the sum of every factor already on the number (base factors, default final factors and steps 1-7). Fair Winds and Shock and Awe are left out of the boost on a raft or a ferry.

  10. Maximum 10.

Wind boost

CalculateWindBoostForParty (CalculateWindBoostForParty):

angle      = |bearing rotation − wind rotation| in degrees
wind_boost = 0                                                      wind length 0
wind_boost = clamp(wind_length · (1 − angle / 120) · 1.5, 0, 1.5) + Fair Winds bonus     angle < 120
wind_boost = Shock and Awe bonus (0 without the perk)                angle ≥ 120
factor     = wind_boost · (1 + sum_of_factors)

Sources

Source Stage Value Conditions Verdict IL
Sea base speed without ships override 4 Party: at sea, no ships works CalculateNavalBaseSpeed
Ship campaign speed override 0.5 * (mean_ship_speed + slowest_ship_speed) Party: at sea works CalculateNavalBaseSpeed
Ghost Ship (Shipmaster, secondary) factor bonus, bonus = 0.2 Party: fishing party; role: governor works CalculateNavalBaseSpeed
Undermanned ships factor -0.4 * (1 - crew / skeletal_crew) Party: at sea; crew below skeletal crew works GetUnderSkeletalCrewEffect
Overmanned ships factor crew_capacity / crew - 1 Party: at sea; crew above capacity works GetOverCrewSizeEffect
Overburdened at sea add overburdened_effect Party: at sea works CalculateNavalBaseSpeed
Over fleet size factor -fleet_size_penalty Party: at sea; more than 3 ships works CalculateNavalBaseSpeed
Disorganized at sea factor -0.4 Party: at sea, disorganized works CalculateNavalBaseSpeed
Open sea factor 0.448 Party: at sea; terrain: open sea works CalculateFinalSpeed
River sailing factor 0.5 Party: at sea; terrain: river works CalculateFinalSpeed
Shallow draft hulls add shallow_draft_bonus Party: at sea; shallow-draft ships works CalculateFinalSpeed
River Raider (Shipmaster, primary) factor -0.448 * bonus, bonus = -0.03 Party: at sea, not on a raft or ferry; role: navigator; terrain: coastal sea, river or under bridge works CalculateFinalSpeed
Nord ship movement feat factor 0.1 Culture: Nord; party: at sea, not on a raft or ferry; terrain: coastal sea, river or under bridge differs CalculateFinalSpeed
Sailing speed increased (Shipmaster skill effect) factor bonus, 0.0005 per skill point Party: at sea; role: navigator works CalculateFinalSpeed
Old Salt's Touch (Shipmaster, primary) factor bonus, bonus = 0.02 Party: at sea, not on a raft or ferry; role: navigator works CalculateFinalSpeed
Favorable Tide (Shipmaster, primary) factor bonus, bonus = 0.05 Party: at sea, not on a raft or ferry; role: navigator works CalculateFinalSpeed
Wind factor wind_boost * (1 + sum_of_factors) Party: at sea works CalculateWindBoostForParty
Fair Winds (Shipmaster, primary) factor bonus * (1 + sum_of_factors), bonus = 0.1 Party: at sea, not on a raft or ferry; role: navigator differs CalculateWindBoostForParty
Shock and Awe (Shipmaster, secondary) factor bonus * (1 + sum_of_factors), bonus = 0.1 Party: at sea, not on a raft or ferry; role: navigator differs CalculateWindBoostForParty
Naval storyline speed (Gunnar's Skill) add 1 Party: main party, at sea, not on a raft or ferry works CalculateFinalSpeed
Sea speed cap cap 10 Party: at sea works CalculateFinalSpeed

Differences from the tooltips:

Worked example

A party with three ships (mean campaign speed 5, slowest 4) on open sea, running before the wind (non-perk wind boost 0.3), with a Shipmaster 0 navigator holding Old Salt's Touch, Favorable Tide and Fair Winds. Factors before the wind step sum to 0.518. Inputs: mean ship speed 5, slowest ship speed 4, wind boost 0.3, sum of factors 0.518.

Step Source Stage Change Running value
Base Ship campaign speed override 4.5000
1 Fair Winds factor +15.18% +0.6831 5.1831
2 Favorable Tide factor +5% +0.2250 5.4081
3 Old Salt's Touch factor +2% +0.0900 5.4981
4 Open sea factor +44.8% +2.0160 7.5141
5 Wind factor +45.54% +2.0493 9.5634
Result Party map speed 9.5634

With these inputs, party map speed is 9.5634.

  1. Base: 0.5 · (5 + 4) = 4.5000. Ship campaign speed replaces the land base.
  2. Wind: 0.3 · (1 + 0.518) = +45.54%; Fair Winds is part of the same boost, 0.1 · (1 + 0.518) = +15.18%.
  3. The Shipmaster skill effect contributes 0 at Shipmaster 0. All five factors are summed and applied once to 4.5000: 9.5634, inside the 1 to 10 clamp.

Fleet size speed penalty

Consumer NavalDLCPartySpeedCalculationModel::CalculateNavalBaseSpeed (CalculateNavalBaseSpeed). Sequential float, computed only when ships > 3, entered into party speed as factor -penalty. No clamp.

penalty = 0.2 / (1 + e ^ (−0.5 · ((ships − 3) − 3)))
penalty = penalty · (1 + Shore Master bonus)          navigator has Shore Master (secondary)
penalty = penalty · (1 + Fleet Commander bonus)       leader has Fleet Commander (primary)
Source Stage Value Conditions Verdict IL
Shore Master (Shipmaster, secondary) multiply 1 + bonus, bonus = -0.3 Party: at sea; role: navigator works CalculateNavalBaseSpeed
Fleet Commander (Shipmaster, primary) multiply 1 + bonus, bonus = -0.3 Party: at sea; role: party leader works CalculateNavalBaseSpeed

The two perks multiply each other (0.7 × 0.7), they do not add to −60%.

Worked example

A fleet of 6 ships (party plus attached parties) whose navigator has Shore Master and whose leader has Fleet Commander. Inputs: ships 6.

Step Source Stage Change Running value
Base Fleet size speed penalty (sea) base 0.1000
1 Shore Master multiply ×0.7 -0.0300 0.0700
2 Fleet Commander multiply ×0.7 -0.0210 0.0490
Result Fleet size speed penalty (sea) 0.0490

With these inputs, fleet size speed penalty (sea) is 0.0490.

With 6 ships the exponent is 0, so the base penalty is half of 0.2: 0.1000. The two perks bring it to 0.0490 instead of 0.1000.

Ship crew count

Consumer NavalDLCPartySpeedCalculationModel::CalculateNavalBaseSpeed (CalculateNavalBaseSpeed). Integer, read only by the Undermanned and Overmanned speed factors.

crew = members (+ prisoners with Chain to Oars)           Undermanned check
crew = members                                           Overmanned check
Source Stage Value Conditions Verdict IL
Chain to Oars (Shipmaster, secondary) add prisoners Party: at sea; role: party leader differs GetSkeletalCrewCount

Skeletal crew requirement

Consumer NavalDLCPartySpeedCalculationModel::CalculateNavalBaseSpeed (CalculateNavalBaseSpeed). Standard modifier sum, then rounded; used only for the Undermanned speed factor.

skeletal_crew = round( skeletal_crew_capacity · (1 + Fleet Commander bonus) )
Source Stage Value Conditions Verdict IL
Fleet Commander (Shipmaster, secondary) factor bonus, bonus = -0.2 Party: at sea; role: party leader differs CalculateNavalBaseSpeed

Cargo at sea

Overburdened effect at sea

Sub-number added to the sea speed base when cargo_weight > capacity. Consumer NavalDLCPartySpeedCalculationModel::GetOverburdenedEffect (GetOverburdenedEffect); its only caller is CalculateNavalBaseSpeed. The land version is on Overburdened effect.

overburdened_sea = (−1 · excess_weight / capacity) · (1 + Σ factors)
excess_weight    = cargo_weight − capacity
Source Stage Value Conditions Verdict IL
Overburdened at sea override -1 * excess_weight / capacity Party: at sea works GetOverburdenedEffect
Veteran's Wisdom (Boatswain, secondary) factor bonus, bonus = -0.2 Party: at sea; role: first mate works GetOverburdenedEffect

The sea base is −1 per unit of excess ratio, against −0.4 on land. The land perks Energetic and Unburdened are never reached at sea.

Inventory capacity at sea

Live consumer NavalDLCInventoryCapacityModel::CalculateInventoryCapacity (CalculateInventoryCapacity). NavalDLC calls the default and, when the at-sea flag is true, adds the ships' cargo. The default terms and the land-only terms (spare mounts, pack animals, Forced Labor, Caravan Master) are on Inventory capacity.

Source Stage Value Conditions Verdict IL
Ship cargo capacity add ship_inventory_capacity Party: at sea works CalculateInventoryCapacity

Item cargo weight

Consumer NavalDLCInventoryCapacityModel::GetItemEffectiveWeight (GetItemEffectiveWeight). Standard modifier sum per item; the party's total weight carried sums them.

Source Stage Value Conditions Verdict IL
Mount weight at sea override 50 Item: mount; party: at sea works GetItemEffectiveWeight
Pack animal weight at sea override 30 Item: pack animal; party: at sea works GetItemEffectiveWeight
Livestock weight at sea override 20 Item: livestock; party: at sea works GetItemEffectiveWeight
Naval Horde (Boatswain, secondary) factor bonus, bonus = -0.3 Item: mount; party: at sea; role: first mate works GetItemEffectiveWeight
Optimization (Boatswain, secondary) factor bonus, bonus = -0.3 Item: pack animal or livestock; party: at sea; role: first mate works GetItemEffectiveWeight
Gilded Purse (Boatswain, secondary) factor bonus, bonus = -0.15 Item: trade good; party: at sea; role: first mate works GetItemEffectiveWeight

Spotting at sea

Seeing range base

Consumer NavalDLCMapVisibilityModel::GetPartySeeingRangeBase (GetPartySeeingRangeBase). Sequential float; it is the base of the spotting range.

seeing_base = 12 by day, 6 at night                    default model
seeing_base = seeing_base · 0.5                        at sea, on a raft or ferry
seeing_base = seeing_base + 3                          at sea, night, navigator has Night Raider
Source Stage Value Conditions Verdict IL
Raft state seeing range multiply 0.5 Party: at sea, raft or ferry works GetPartySeeingRangeBase
Night Raider (Shipmaster, primary) add 3 Party: at sea; role: navigator; time: night differs GetPartySeeingRangeBase

Spotting range at sea

Live consumer NavalDLCMapVisibilityModel::GetPartySpottingRange (GetPartySpottingRange). NavalDLC calls the default (land terms on Party spotting range) and adds the at-sea factors; the default maximum of 60 still clamps.

Source Stage Value Conditions Verdict IL
Raven Eye (Shipmaster, primary) factor bonus, bonus = 0.2 Party: at sea; role: navigator works GetPartySpottingRange
Spotting at sea factor 0.3 Party: at sea works GetPartySpottingRange
Storm spotting penalty factor -0.4 Party: at sea, inside a storm works GetPartySpottingRange

Food and wages at sea

Food consumption at sea

Live consumer NavalDLCMobilePartyFoodConsumptionModel::CalculateDailyFoodConsumptionf (CalculateDailyFoodConsumptionf). The value is negative (food lost per day); negative factors shrink consumption. Default terms and the maximum of −0.01 are on Party food consumption.

Source Stage Value Conditions Verdict IL
Food consumption reduction at sea factor -0.2 Party: at sea works CalculateDailyFoodConsumptionf
Smooth Operator (Boatswain, secondary) factor bonus, bonus = -0.3 Party: at sea; role: first mate works CalculateDailyFoodConsumptionf

Daily wage at sea and convoys

Live consumer NavalDLCPartyWageModel::GetTotalWage (GetTotalWage). NavalDLC calls the default (terms and the minimum of 0 on Party daily wage) and adds factors only at sea.

mounted_wage_share     = Σ wage of non-hero mounted troops / base_wage
non_mariner_wage_share = Σ wage of non-hero non-mariner troops / base_wage
Source Stage Value Conditions Verdict IL
Wage reduction at sea factor -0.2 Party: at sea works GetTotalWage
Convoy wage cut at sea factor -0.8 Party: at sea, caravan works GetTotalWage
Optimization (Boatswain, primary) factor bonus * non_mariner_wage_share, bonus = -0.1 Party: at sea; role: first mate works GetTotalWage
Naval Horde (Boatswain, primary) factor bonus * mounted_wage_share, bonus = -0.3 Party: at sea; role: first mate works GetTotalWage
Aid Corps (Steward, primary) base 0 Party: at sea; role: quartermaster differs GetTotalWage

Raids

Raid hit damage

Live consumer NavalDLCRaidModel::CalculateHitDamage (CalculateHitDamage). Hourly damage to the raided village. NavalDLC calls the default DefaultRaidModel::CalculateHitDamage (CalculateHitDamage) and adds terms per raiding party. No clamp.

damage      = ((troops ^ 0.5 + 5) / 900 · hours) · (1 + Σ factors)
party_share = party members / side total troops
Source Stage Value Conditions Verdict IL
No Rest for the Wicked (Roguery, secondary) factor bonus, bonus = 0.05 Role: party leader works CalculateHitDamage
Nord hostile action speed feat factor 0.2 * party_share Culture: Nord works CalculateHitDamage
Shield Breaker (Mariner, secondary) factor bonus * party_share, bonus = 0.25 Party: at sea; role: party leader differs CalculateHitDamage

Raid loot multiplier

Live consumer NavalDLCRaidModel::GetRaidLootMultiplier (GetRaidLootMultiplier). Sequential since v1.5.7: base 1, plus the Mercy trait of the army leader's hero (else the party leader), plus 0.5 for a party at sea. RaidEventComponent::Update gives each looted item to the looting party with chance 0.5 · multiplier; the attacker side leader party's multiplier also scales the hearth gold and production rewards of the raid.

Source Stage Value Conditions Verdict IL
Mercy trait: raid loot add trait_effect Hero: army or party leader mercy trait works GetRaidLootMultiplier
Raiding party at sea add 0.5 Party: at sea works GetRaidLootMultiplier
Brute Force (Mariner, secondary) factor bonus, bonus = 0.2 unused

Raid food loot

Consumer RaidEventComponent::Update (Update), base game. Each raid tick a raiding party picked by a random troop index loots one item roll: the village loses 1, and with chance 0.5 · raid_loot_multiplier the party receives 1 unit, +1 for food when its leader has Efficient Campaigner. The loot-item-in-raid helper adds the same +1 for food.

Source Stage Value Conditions Verdict IL
Efficient Campaigner (Steward, primary) add 1 Role: party leader differs Update
Efficient Campaigner (Steward, primary) add 1 Role: party leader works LootItemInRaid

The +1 is a constant; it equals the perk bonus. Efficient Campaigner differs: the Update check takes no environment, so the +1 also applies to raids from the sea (the same component runs naval raids), although the half is land only; the LootItemInRaid check gives nothing to a party at sea.

Fishing

Catch chance while sailing

Consumer NavalFishingCampaignBehaviour::OnHourlyTickParty (OnHourlyTickParty). Hourly: chance = Master Angler bonus; a random roll below the chance adds one fish to the party. The perk is the only source of the chance. The half is naval only (the tooltip shows it), so the party's perk check fails on land; v1.5.7 dropped the code's own at-sea test.

Source Stage Value Conditions Verdict IL
Master Angler (Shipmaster, primary) add bonus, bonus = 0.25 Role: navigator works OnHourlyTickParty

Fishing parties per village

Consumer FishingPartyCampaignBehavior::GetIdealFishingPartyCount (GetIdealFishingPartyCount). Integer.

count = min(2, hearth_level + 1) + round(Corsair's Edge bonus)     governor of the village's bound town has the perk
Source Stage Value Conditions Verdict IL
The Corsair's Edge (Shipmaster, secondary) add bonus, bonus = 1.0 Role: governor works GetIdealFishingPartyCount

Fishing party catch

Consumer FishingPartyCampaignBehavior::CatchFish (CatchFish), called hourly. Custom:

c     = random roll                                         uniform [0, 1)
c     = c + c · Master Angler bonus                         governor of the village's bound town has the perk
catch = min( randomly rounded c, trunc(free_capacity / (fish_weight + 0.1)) )
Source Stage Value Conditions Verdict IL
Master Angler (Shipmaster, secondary) multiply 1 + bonus, bonus = 0.15 Party: fishing party; role: governor works CatchFish
Fishing party free cargo space cap floor(free_capacity / (fish_weight + 0.1)) Party: fishing party works CatchFish

The governor here is read directly, with no presence check.

Daily village fish

Consumer NavalFishingCampaignBehaviour::OnDailyTickSettlement (OnDailyTickSettlement). Base 0 plus the perk; when the rounded result is above 0, that many fish are added to the village each day.

Source Stage Value Conditions Verdict IL
Night Raider (Shipmaster, secondary) add bonus, bonus = 5.0 Role: governor differs OnDailyTickSettlement

Transitions

Disembark time

Consumer NavalDLCPartyTransitionModel::GetTransitionTimeDisembarking (GetTransitionTimeDisembarking). NavalDLC replaces the default method. Hours:

time = 0                                  raft or ferry
time = 2 · (1 + Unflinching)              otherwise
Source Stage Value Conditions Verdict IL
Raft disembark override 0 Party: raft or ferry works GetTransitionTimeDisembarking
Unflinching (Shipmaster, primary) factor bonus, bonus = -0.5 Party: at sea; role: party leader works GetTransitionTimeDisembarking

Worked example

A party (not on a raft or ferry) disembarking while its leader has Unflinching.

Step Source Stage Change Running value
Base Disembark transition time (hours) base 2.0000
1 Unflinching factor -50% -1.0000 1.0000
Result Disembark transition time (hours) 1.0000

With these inputs, disembark transition time (hours) is 1.0000.

Ship recall time

Consumer NavalDLCPartyTransitionModel::GetFleetTravelTimeToSettlement (GetFleetTravelTimeToSettlement). NavalDLC replaces the default method. Hours:

reach = clamp(distance ^ 0.95 / 35 · (1 + Shore Master), 3, 48)   distance > 0, else 0
time  = min(48, reach + arrival_hours)                           anchor moving, or anchor position valid
time  = 48                                                       otherwise
Source Stage Value Conditions Verdict IL
Anchor reach duration override min(48, min(48, max(3, distance ^ 0.95 / 35)) + arrival_hours) Ship: anchor valid or moving works GetAnchorReachDurationInHours
Shore Master (Shipmaster, primary) factor bonus, bonus = -0.5 Role: party leader; ship: anchor valid or moving works GetFleetTravelTimeToSettlement

Getting away from an engagement

Consumer NavalDLCTroopSacrificeModel::CanPlayerSideTryToGetAwayWithTheirShipStats (CanPlayerSideTryToGetAwayWithTheirShipStats). The ship damage the player side takes to get away; the player can get away when it is below the player side's total ship hit points. It is used when the game picks ships to leave behind and when it checks whether the player can get away.

D = own_ship_hp · min(enemy_ship_hp / own_ship_hp, 3) ^ 1.3 · 0.1
D = D · (1 + Σ factors)                                         when D > 0
D = D − 0.5 · D                                                 navigator has Ghost Ship
D = D − D · clamp(own_base_speed / enemy_base_speed, 1, 5) · 0.1    own_base_speed > enemy_base_speed
can get away = D < own_ship_hp
Source Stage Value Conditions Verdict IL
Reduce ships' received damage (Boatswain skill effect) factor bonus * skill, −0.0025 per skill point Party: main party; role: first mate works CanPlayerSideTryToGetAwayWithTheirShipStats
Ghost Ship (Shipmaster, primary) multiply 0.5 Party: main party; role: navigator differs CanPlayerSideTryToGetAwayWithTheirShipStats
Speed advantage when getting away multiply 1 - min(5, max(1, own_base_speed / enemy_base_speed)) * 0.1 Party: main party works CanPlayerSideTryToGetAwayWithTheirShipStats

Worked example

The player side has 1000 ship hit points against 2000 on the enemy side; the first mate has Boatswain 100, the navigator Ghost Ship, and the main party's base speed is 1.2 times the enemy leader party's. Inputs: own ship hp 1000, enemy ship hp 2000, own base speed 1.2, enemy base speed 1.

Step Source Stage Change Running value
Base Ship damage taken by the player side to get away base 246.2289
1 Reduce ships' received damage factor -25% -61.5572 184.6717
2 Ghost Ship multiply ×0.5 -92.3359 92.3358
3 Speed advantage when getting away multiply ×0.88 -11.0803 81.2555
Result Ship damage taken by the player side to get away 81.2555

With these inputs, ship damage taken by the player side to get away is 81.2555.

  1. Base: the enemy has twice the hit points, so 1000 · 2 ^ 1.3 · 0.1 = 246.2289.
  2. All three reductions multiply, so their order does not change the result: 81.2555, well below the 1000 own ship hit points, so the player side can get away.

Ships and shipyards

Salvage repair from a discarded ship

Consumer ShipRepairCampaignBehavior::OnShipDestroyed (OnShipDestroyed). Only when a ship is discarded by a mobile party whose leader has Shipwright's Hand.

pool   = discarded ship hit points · 0.5
repair = min(pool, missing hit points of the ship)     each party ship in list order, pool reduced by repair, stop when pool ≤ 0
Source Stage Value Conditions Verdict IL
Shipwright's Hand (Boatswain, primary) add ship_hit_points * 0.5 Role: party leader works OnShipDestroyed

The total restored is the smaller of the pool and the party ships' total missing hit points. The perk's bonus value (0) is not read.

Shipyard production chance

Consumer ShipProductionCampaignBehavior::DailyTickTown (DailyTickTown). Daily, for a town with a port, not under siege and with no map event: base 0.5 plus the perk. When the town has fewer ships than its maximum and a random roll is below the result, ships are built until the maximum or 10 ships.

Source Stage Value Conditions Verdict IL
Streamlined Operations (Boatswain, secondary) factor bonus, bonus = 0.2 Role: governor; settlement: town with port, not under siege works DailyTickTown

With the perk: base 0.5 plus a factor of 0.2.

Governor gold from ships

Consumers ShipTradeCampaignBehavior::OnShipRepaired (OnShipRepaired) and ShipTradeCampaignBehavior::OnShipOwnerChanged (OnShipOwnerChanged). Each is base 0 plus one perk; the rounded result is given to the governor hero. Both are skipped when the governor is the main hero and the ship owner's leader is the main hero.

Source Number Stage Value Conditions Verdict IL
Master Shipwright (Boatswain, secondary) Gold per ship repaired in the town add bonus, bonus = 30.0 Role: governor; settlement: town works OnShipRepaired
Merchant Prince (Boatswain, secondary) Gold per ship traded with the town add bonus, bonus = 500.0 Role: governor; settlement: town works OnShipOwnerChanged

Garrison recruits from convoys

Consumer ShipTradeCampaignBehavior::OnSettlementEntered (OnSettlementEntered). A caravan that can navigate at sea enters a town whose governor has Shipwright's Hand (no presence check):

count = min(garrison_wage_room / basic_troop_wage, round(bonus))      integer division
Source Stage Value Conditions Verdict IL
Shipwright's Hand (Boatswain, secondary) add min(garrison_wage_room / basic_troop_wage, round(bonus)), bonus = 1.0 Party: caravan; role: governor; settlement: town differs OnSettlementEntered
Garrison wage budget cap floor(garrison_wage_room / basic_troop_wage) Party: caravan; settlement: town works OnSettlementEntered

Building progress from convoys

Consumer NavalNimbleSurgeCampaignBehaviour::OnSettlementEntered (OnSettlementEntered). Sequential: the current building's progress gets +bonus (Favorable Tide's secondary value, 1), then the game checks whether the building is complete. Daily construction power feeds the same progress from other code (Settlements).

Source Stage Value Conditions Verdict IL
Favorable Tide (Shipmaster, secondary) add bonus, bonus = 1 Party: caravan; role: governor differs OnSettlementEntered

Nord naval feats

Feat values are set in NavalCulturalFeats::InitializeAll (InitializeAll).

Feat Number Stage Value Conditions Verdict IL
Nord ship movement feat Party speed factor 0.1 Party: at sea; terrain: coastal sea, river or under bridge differs CalculateFinalSpeed
Nord army cohesion feat Army daily cohesion change factor -0.3 Army leader party: not at sea, has the feat differs CalculateDailyCohesionChange
Nord hostile action speed feat Raid hit damage factor 0.2 * party_share Raiding party has the feat works CalculateHitDamage

Other NavalDLC terms on shared numbers

These numbers are defined on Party and map, Battles and Settlements; the NavalDLC models and behaviours add the perk terms below.

Source Number Stage Value Conditions Verdict IL
Arr! (Mariner, primary) Bribe chance add 0 Role: personal; victim: pirate differs GetBribeChance
Arr! (Mariner, primary) Forcing bandits to join override 1 Party: main party, at sea; role: personal works CanPlayerForceBanditsToJoin
Arr! (Mariner, secondary) Battle experience gain factor bonus, bonus = 0.15 Role: party leader; troops: mariner works CalculateXpGainFromBattles
Pirate Hunter (Mariner, secondary) Battle experience gain factor bonus, bonus = 0.1 Role: party leader; troops: regular works CalculateXpGainFromBattles
Rolling Thunder (Mariner, secondary) Prisoner conformity per hour factor bonus, bonus = 0.5 Role: party leader; victim: pirate works GetConformityChangePerHour
Efficient Captain (Boatswain, primary) Troop upgrade cost factor bonus, bonus = -0.3 Role: party leader; troops: mariner works GetGoldCostForUpgrade
Popular Captain (Boatswain, primary) Troop recruitment cost factor bonus, bonus = -0.3 Role: party leader; troops: mariner works GetTroopRecruitmentCost
Resilience (Boatswain, primary) Battle-end hero healing add bonus * missing_hp, bonus = 0.3 Role: personal differs GetBattleEndHealingAmount
Resilience (Boatswain, secondary) Daily healing of wounded regulars factor bonus, bonus = 0.3 Role: first mate works GetDailyHealingForRegulars
Veteran's Wisdom (Boatswain, primary) Daily hero skill experience add bonus * leader_level, bonus = 10.0 Role: party leader works OnDailyTickParty
Salvage (Boatswain, primary) Kingdom influence gain add ship_hit_points * 0.01 Role: party leader works OnShipDestroyed
Salvage (Boatswain, secondary) Town trade tax add round(bonus), bonus = 40.0 Party: caravan; role: governor; settlement: town works OnSettlementEntered
Merchant Fleet (Boatswain, secondary) Kingdom influence gain add bonus, bonus = 5.0 Role: governor; settlement: fortification works OnShipCreated
Windborne (Shipmaster, secondary) Disorganized duration factor bonus, bonus = -0.5 Role: navigator works GetDisorganizedStateDuration
Ghost Ship (Shipmaster, primary) Troops lost breaking into a besieged settlement factor -bonus, bonus = 0.2 Role: navigator works GetLostTroopCountForBreakingInBesiegedSettlement
Ghost Ship (Shipmaster, primary) Troops lost breaking out of a besieged settlement factor -bonus, bonus = 0.2 Role: navigator; settlement: breaking out from the port differs GetLostTroopCountForBreakingOutOfBesiegedSettlement
Master and Commander (Shipmaster, primary) Troop experience add bonus, bonus = 1.0 Party: at sea; role: party leader differs HourlyTickParty
Stormrider (Shipmaster, primary) Troop experience add bonus, bonus = 30.0 Party: at sea, not main party; role: party leader differs OnPartyEnteredStorm
Stormrider (Shipmaster, primary) Troop experience add bonus, bonus = 30.0 Party: main party; role: party leader differs TickEvent
Fair Winds (Shipmaster, secondary) Village hearth change factor bonus, bonus = 0.1 Role: governor; settlement: port works CalculateHearthChange
Raven Eye (Shipmaster, secondary) Town loyalty add bonus, bonus = 1.0 Party: fishing party; role: governor works OnDropOff
The Helmsman's Shield (Shipmaster, secondary) Settlement prosperity add bonus, bonus = 1.0 Party: fishing party; role: governor works OnDropOff
Naval Fighting Training (Mariner, secondary) Veteran militia chance factor bonus, bonus = 0.1 Role: governor; settlement: port works CalculateVeteranMilitiaSpawnChance

Changelog