Bannerlord mechanics

Skills and perks catalog

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

Every skill, skill effect and perk in game v1.5.7, how each one is checked against the game, and the downloadable data files that hold them. For a plain-language overview, see the skills guide.

Definitions come from TaleWorlds.CampaignSystem.dll, TaleWorlds.Core.dll (Native) and NavalDLC.dll: DefaultSkills, NavalSkills, DefaultSkillEffects, NavalSkillEffects, DefaultPerks, NavalPerks and the fallback text strings in their code. No XML is read. The data files are exported from the decoded IL of the v1.5.7 game DLLs, which also gives every place where the game reads a perk or skill effect.

What each effect does in play, number by number:

At a glance

What Native NavalDLC Total
Skills 18 3 (Mariner, Boatswain, Shipmaster) 21
Skill effects 43 6 49
Perks 374 62 436
Perk-effect rows (perks.csv) 721 121 842

A perk has a primary and, for 406 of 436 perks, a secondary effect half; each half is one row. Perk skill thresholds are 25·tier for tiers 1..12.

Verdicts

Every perk half and skill effect has an implementation verdict, read from the game code:

Verdict Meaning
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
File Rows works differs unused ui_only
perks.csv 842 617 216 5 4
skill_effects.csv 49 30 16 2 1

An effect's verdict is built from every place the game reads it (its effect sites; dead and unused sites are not live): unused when no site is live, ui_only when every live site is interface code, differs when any live site differs, otherwise works. The reason for each differs is on the deep dive of the game number it changes.

Unused and interface-only effects

Effect Skill Tooltip Verdict Why
NoiseSuppression (skill effect) Roguery Noise suppression -{a0}% unused never read anywhere in the game
NavalAutoBattleCombatPenaltyNegation (skill effect) Mariner Naval Auto Battle Combat Penalty Negation Effect unused never read; only created at start-up
TrackingTrackInformation (skill effect) Scouting Track information level: {a0} ui_only sets how many lines the track tooltip shows (from level 1 party size, 2 time, 3 speed, 4 mounted, 6 prisoners, 7 pack animals, 8 enemy, 9 culture, 10 name; party type at levels 5 to 9 only, replaced by the name at 10)
Special Arrows, secondary Boatswain +40% damage dealt by crew to enemy sails. unused the sail fire damage code applies only the primary half's value (Captain, +5 Add); the +40% factor is never read
Naval Bombardment, primary Boatswain Shipboard ballistas fire during sieges unused never read; nothing makes shipboard ballistas fire during sieges
Terror of the Seas, primary Mariner +20% to morale loss suffered by enemy ships in battle. unused the morale code reads the perk through the captain lookup, which applies the secondary half (Captain, −10%) instead; the +20% is never read
Brute Force, secondary Mariner +20% more loot from naval raids. unused the raid loot code adds the primary half's value (+0.5) for every raiding party at sea without checking the perk; the +20% is never read
Cavalry Tactics, primary Riding +30% volunteering rate of cavalry troops in the settlements governed by your clan. unused the volunteer code applies the secondary half (Governor, −50%) through the governor lookup; the +30% is never read
Appraiser, secondary Trade Your profits are marked. ui_only profit marker on your items in trade mode; the bonus is never read
Whole Seller, secondary Trade Your profits are marked. ui_only same profit marker as Appraiser
Caravan Master, secondary Trade Item prices are marked relative to the average price. ui_only average-price marker on the merchant's items
Market Dealer, secondary Trade Item prices are marked relative to the average price. ui_only same average-price marker as Caravan Master

The trade markers are explained in Crafting and trade.

Data files

One .csv per table, ; inside a cell separates list items.

skills.csv: one row per skill.

Columns Content
skill_id, name, attribute, module skill identity, governing attribute, Native or NavalDLC

skill_effects.csv: one row per skill-level effect.

Columns Content
effect_id, skill_id, game_role effect, owning skill, assignment the game applies it to
bonus_per_point, base_value, limit_min, limit_max, increment_type value = base_value + bonus_per_point · skill, clamped to limit_min..limit_max; AddFactor or Add
description tooltip with {a0} kept (value depends on skill level)
module Native or NavalDLC
role, aspect, context, target tags, ;-separated
implementation_status verdict: works, differs, unused or ui_only
game_numbers game numbers the effect changes (game_number_id values)
hero_kinds, positions hero kinds (player, relative, wanderer) and positions the effect works for, sorted, ;-separated; see Who the perk works for and research/skills/holders/REPORT.md

perks.csv: one row per perk effect half.

Columns Content
effect_id <perk_id>:primary or <perk_id>:secondary
perk_id, perk_name, skill_id, tier, required_skill, alternative_perk_id perk identity; alternative_perk_id is the other choice at the same tier
half primary or secondary
game_role, bonus, increment_type game role the half applies to, raw bonus, AddFactor or Add
troop_mask raw troop-type bitmask (integer)
troop_flags mask decoded to flag names (Undefined for 65535, OnFoot, Mounted, ...)
environment where the half applies: land_only, naval_only, naval_reduced or all (below)
description_raw source string with {=id} and {VALUE}
description rendered tooltip
module Native or NavalDLC
role, aspect, context, target tags, ;-separated
implementation_status verdict: works, differs, unused or ui_only
game_numbers game numbers the half changes (game_number_id values)
hero_kinds, positions hero kinds (player, relative, wanderer) and positions the half works for, sorted, ;-separated; see Who the perk works for and research/skills/holders/REPORT.md

tags.csv: one row per tag (list, tag, definition); 110 tags.

game_numbers.csv: one row per game number (a quantity the game computes, such as party speed or a weapon's damage); 360 rows.

Columns Content
game_number_id, name id and readable name
consumer, module the game method that computes it, and its module (Native, SandBox or NavalDLC)
base starting value before any effect
combine_rule how the effect sites combine (below)
clamp_min, clamp_max limits of the result; empty = none
il_ref, notes decoded IL of the consumer, and findings

effect_sites.csv: one row per place where a source changes a game number; 1694 rows.

Columns Content
source_kind, source_id what changes the number (below) and its id; for perks and skill effects the id is the effect_id
game_number_id the game number changed
consumer, module the game method that applies it, and its module
stage how the method applies the value (below)
step integer IL step for sequential numbers (empty otherwise); sites with the same step are combined once
scaling value applied, as an expression over bonus (the source's value), skill (relevant skill level) and named inputs
conditions key=value requirements, ;-separated (below)
environment battle environment the site passes to the game's perk-bonus lookup: agent, attacker, victim, party, any, or a fixed land / naval; empty when the site does not go through it (below)
verdict works, differs, unused, ui_only or dead for this site; dead: the method never runs in a sandbox campaign (every registered replacement replaces it, or no campaign caller; notes give the caller evidence)
il_ref, notes decoded IL of the method, and the finding (for differs: the difference from the tooltip)
reader_value, reader_limit skill_level sites: what the level does and the level needed, in plain words; the skill-level tables in the guides are generated from them

Site verdicts: 1391 works, 278 differs, 10 ui_only, 7 unused, 8 dead.

Effect environment

Each perk half carries an environment (perks.csv environment). A site that reads the bonus through the game's perk-bonus lookup passes a battle environment: the agent's, the blow's attacker's or victim's, the party's, a fixed land or naval environment, or any. The pair sets the factor on the half's bonus:

Half environment Land Naval Any
all × 1 × 1 × 1
land_only × 1 0 × 1
naval_reduced × 1 × 0.5 × 1
naval_only 0 × 1 × 1

A factor of 0 also means the half does not apply (the lookup reports no bonus). For party sites the lookup replaces any with the party's current battle environment (naval while the party is at sea, else land) before applying the table. MobileParty.HasPerk runs the same lookup with the party's environment: sites that test it and then read the raw bonus are party sites where the environment only switches the half on or off (a naval_reduced half is not halved there unless the code halves it). Governor halves read through AddPerkBonusForTown take no environment; since v1.5.7 the caller names the half.

The perk tooltip shows the environment under each half's description: "Land only", "Sea only" or "Reduced effect at sea" (nothing for all). Because the player is told, a reduction or switch-off that comes only from the half's environment does not make a site differs.

IL: PerkVM+<>c__DisplayClass15_0.il: the perk tooltip lambda of the PerkVM constructor, <.ctor>b__0, calls GetPerkEffectText (0x21); CampaignUIHelper.il: GetPerkEffectText calls GetPerkEnvironmentText (0x00-0x4f) for the primary (0x73-0x98, call 0x75) and secondary (0x100-0x128, call 0x102) halves. These are the only callers (scripts.reversing.callers on dll/v1.5.7).

IL: PerkHelper.il: TryGetPerkEffectBonus, AddPerkBonusForParty (0x05-0x10), AddPerkBonusForCharacter, AddPerkBonusFromCaptain, AddEpicPerkBonusForCharacter, AddPerkBonusForTown; MobileParty.il: HasPerk (0x00-0x21), get_CurrentBattleEnvironment; environments from PerkObject::Initialize arguments in DefaultPerks.il and NavalPerks.il.

learning_limits.csv: one row per attribute value and focus count; 66 rows.

Columns Content
attribute_value, focus, learning_limit attribute 0 to 10, focus points 0 to 5, and the resulting learning limit

The limit is max(0, (attribute - 1) · 10) + 30 · focus: attribute 5 with focus 5 gives 190.0, attribute 10 with focus 5 gives 240.0. NavalDLC changes no constant. A skill with two attributes (Mariner, Boatswain, Shipmaster) uses the average of both attribute values: attributes 4 and 6 give the same limits as a single 5.

sources.csv: one row per source that is not a perk or skill effect; 533 rows.

Columns Content
source_id, kind, name, module id, source kind, readable name, module

Source kinds

source_kind Source
perk one perk half
skill_effect one skill effect
skill_level a skill level read directly, without a skill effect
policy kingdom policy
building settlement building
feat cultural feat
term any other term of the formula (base terms, penalties, settings)
other anything else

Stages

stage How the value is applied
base sets or adds to the starting value
add flat addition
factor percentage, summed with the other factors
multiply direct multiplication
override replaces the value
clamp clamps the value
cap lowers the upper limit

Combine rules

explained_number:

result = clamp((base + Σ add) · (1 + Σ factor) · Π multiply, clamp_min, clamp_max)

sequential: steps run in ascending step order (the game's code order); each step updates the running value once, then the result is clamped. The sites of one step share one stage and combine before they apply: add + Σ, factor · (1 + Σ), multiply · Π, cap min; base, override and clamp set the value (the last one wins).

max: the largest of the site values, then clamped.

custom: the method's own formula, given on the game number's deep dive.

Only works and differs sites take part.

Conditions

Key Requirement
role party or battle role of the effect holder
troop troop classes, as a boolean expression (for example Mounted, OnFoot or Infantry|Ranged)
mission mission type: naval_battle, simulation, siege, hideout, tournament
map_state campaign map party state: besieging, in_settlement, in_siege_event, moving, stationary
terrain map terrain type under the party
settlement settlement type or state
party party kind or party property
faction faction or kingdom property
hero hero property (trait, clan role, age, gender)
item item or item category
time time of day or season (day, night)
attack blow or collision kind (for example horse_charge, fall, kick_or_bash, shield_block)
tier troop tier bound (>=3 for tier 3 or higher, <=3 for tier 3 or lower)
formation formation order or arrangement (for example shield_wall)
victim property of the blow's victim (for example mounted, mount, on_foot)
health hit-point threshold of the holder or victim (for example below_half)
culture culture of the holder, settlement or other party
siege siege side of the holder's party: attacker, defender
siege_engine siege engine type or bombardment target (for example ballista, ranged, target_wall)
ship ship property or ship class (for example own_ship, enemy_ship, shallow_draft)

Skill-effect value

The game evaluates a skill effect at skill level skill as:

value = clamp(base_value + bonus_per_point · skill, limit_min, limit_max)

45 of 49 skill effects have limit_min -3.4028234663852886e+38 and limit_max 3.4028234663852886e+38 (the float range: no effective limit). The four exceptions:

Effect Skill bonus_per_point base_value limit_min limit_max
MountedWeaponDamagePenalty Riding 0.002 -0.2 -3.4028234663852886e+38 0.0
MountedWeaponSpeedPenalty Riding 0.003 -0.3 -3.4028234663852886e+38 0.0
NavalBattleCombatPenaltyNegation Mariner -0.005 0.0 -1.0 3.4028234663852886e+38
NavalBattleUnderwaterBreathingDurationBonus Mariner 0.005 0.0 0.0 20.0

IL: TaleWorlds.CampaignSystem.SkillEffect.il: GetSkillEffectValue.

Tooltip rendering

Rule from Helpers.StringHelpers.GetEffectIncrementTypeBonusText, called by SetEffectIncrementTypeTextVariable:

Step Rule
value bonus · 100 (float32) if AddFactor, else bonus
format 0.#
sign + prefix iff bonus > 0

Worked example. Basher (One Handed, tier 1, skill 25), primary half: bonus 0.5, AddFactor. Source string {=fFNNeqxu}{VALUE}% damage and longer stun duration with shield bashes. renders as +50% damage and longer stun duration with shield bashes.

An Add half is printed unscaled. When its source string has {VALUE}% and the game applies the bonus as a 0–1 fraction, the tooltip shows a hundredth of the effect: Hard Knock (Polearm) adds 0.25 to the knockdown penetration subtracted from a 0–1 resistance, and its tooltip reads +0.3%. Such halves are differs.

IL: StringHelpers.il: SetEffectIncrementTypeTextVariable (0x04), GetEffectIncrementTypeBonusText (0x00-0x0d value, 0x0f format, 0x20-0x35 sign).

Tags

Four lists, each cell holds zero or more tags separated by ;.

List Meaning
role assignment that benefits from the effect (not the game role)
aspect what improves
context when it applies
target who receives it

Attribute and focus flavor is not a tag.

Captain tags

Derived from troop_mask; the mask wins over the tooltip. Unrestricted (65535) mask: all six class buckets. Combined masks are read as AND: every mask bit must be present in the formation's troop usage flags, the same test the game uses. A mask that matches the Ranged formation gives archers, crossbows and skirmishers together, because that formation holds all three. Where the effect sites test the troop or weapon (infantry only, bow only), the tags are narrowed to the troops those sites reach. Weapon-user masks add captain:1h, captain:2h or captain:polearm alongside the class buckets. Naval crew captain effects with an unrestricted mask also get context naval_battle.

troop_mask Flags Captain tags
65535 Undefined all six
1 OnFoot infantry, archers, crossbows, skirmishers
2 Mounted cavalry, horse_archers
4 Melee infantry, cavalry
5 Melee;OnFoot infantry
6 Melee;Mounted cavalry
8 Ranged archers, crossbows, skirmishers, horse_archers
10 Mounted;Ranged horse_archers
16, 32 OneHandedUser, ShieldUser infantry, cavalry, 1h
64 TwoHandedUser infantry, cavalry, 2h
65 OnFoot;TwoHandedUser infantry, 2h
128 PolearmUser infantry, cavalry, polearm
129 OnFoot;PolearmUser infantry, polearm
130 Mounted;PolearmUser cavalry, polearm
256 BowUser archers, crossbows, skirmishers, horse_archers
258 BowUser;Mounted horse_archers
512 ThrownUser archers, crossbows, skirmishers, horse_archers
514 Mounted;ThrownUser horse_archers
1024 CrossbowUser archers, crossbows, skirmishers, horse_archers
1025 CrossbowUser;OnFoot archers, crossbows, skirmishers
1280 BowUser;CrossbowUser archers, crossbows, skirmishers, horse_archers

How the game itself uses the mask:

IL: PerkHelper.il: GetCaptainPerksForTroopUsages (0x1e-0x99), AddPerkBonusFromCaptain; TaleWorlds.Core.FormationClassExtensions.il: GetTroopUsageFlags.

Role assignment

game_role role tag
Captain captain:* from the mask, narrowed by the sites' troop and weapon tests
Personal fighter:* by weapon class; non-combat: player, smith, any_hero, clan_leader, party_leader
PartyLeader, Governor, Quartermaster, Scout, Engineer, Surgeon, FirstMate, Navigator, ClanLeader, ArmyCommander, PartyMember same-named slot tag

Personal effects that act at party or clan level take party_leader or clan_leader rather than a fighter tag.

role

Tag Definition
captain:infantry leads a formation of melee foot troops
captain:cavalry leads a formation of mounted melee troops
captain:archers leads a formation of foot bow troops
captain:crossbows leads a formation of foot crossbow troops
captain:skirmishers leads a formation of thrown-weapon troops
captain:horse_archers leads a formation of mounted ranged troops (bow or thrown)
captain:1h sub-class: mask restricted to one-handed or shield users
captain:2h sub-class: mask restricted to two-handed users
captain:polearm sub-class: mask restricted to polearm users
fighter:1h hero fights with a one-handed weapon (with or without shield)
fighter:2h hero fights with a two-handed weapon
fighter:polearm hero fights with a polearm (incl. couched lance)
fighter:bow hero fights with a bow
fighter:crossbow hero fights with a crossbow
fighter:throwing hero fights with thrown weapons
fighter:mounted hero fights on horseback
fighter:sword sub-class: effect restricted to swords
fighter:axe_mace sub-class: effect restricted to axes and/or maces
party_leader leads a party
scout party scout slot
quartermaster party quartermaster slot
engineer party engineer slot
surgeon party surgeon slot
navigator party navigator slot (NavalDLC)
first_mate party first mate slot (NavalDLC)
party_member any hero in the party
army_commander leads an army
governor governs a town or castle
clan_leader clan leader: clan-wide effects (workshops, caravans, clan settlements, companion and clan limits)
player player-only actions: persuasion, barter, tournaments, stealth, votes, personal relations/renown/influence
smith hero who works the smithy
any_hero benefits whichever hero holds it, regardless of assignment (attributes, focus, aging, own healing, own ransom)

aspect

Tag Definition
damage damage dealt: weapon/charge/shield/mount damage, armor penetration, stun, knockdown, auto-resolve advantage
attack_speed swing, attack, reload, aim and draw speed; handling
accuracy accuracy, accuracy penalties, zoom, aim hold time
ammo ammunition count
mobility combat movement: run/mount speed, maneuver, weight and deck penalties, swimming
defense hit points, armor, damage taken, resistances, shield protection, stagger
weapon_skill flat skill points given to troops
battle_morale in-battle morale, own or enemy
party_morale campaign party morale
troop_xp troop experience
hero_xp companion/hero experience
recruitment recruit/upgrade cost, recruit rate, slots, prisoner and bandit conversion
wages wage reduction
size_limit party, prisoner, garrison, companion, clan party, ship-command and crew limits
party_speed campaign-map travel speed, incl. overburden, herding and sailing
sight campaign sight, spotting, tracking
food food consumption, food gain, food reserves
carry_capacity carrying capacity, cargo weight
healing hit-point recovery rate (heroes or troops)
survival chance not to die (troops wounded instead of killed, hero cheat death, old age)
trade buy/sell price penalties, price/profit markers, barter, trade rumors
income tax, tariffs, gold, ransom deals, workshop output value, betting
loot battle/raid loot, raid speed, capture chance (ships, prisoners), surrender
prisoners prisoner escape chance, own escape/ransom
relations relation gains with lords and notables
influence influence gain or cost
renown renown gain
persuasion persuasion chance and requirements
security settlement security
loyalty settlement loyalty
prosperity settlement prosperity, hearth growth, raid recovery
production village, workshop, shipyard and fishing production
construction settlement project build speed and project effects
militia militia count and veterancy
siege siege engines, bombardment, walls, fortification
army_cohesion army cohesion
retreat losses when escaping, breaking sieges, running blockades
disorganization disorganized-state duration
stealth sneaking, noise, disguise, crime rating
smithing refining, smelting, stamina, part unlocks, crafted weapon quality
attributes attribute or focus points
ship ship stats and ship economy: sail/oar force, hull, repair/upgrade cost, recall
livestock mounts and animals: breeding, finding, recovering, horse production
family offspring

context

Tag Definition
battle any land combat mission
siege siege battle, bombardment, siege camp, besieged settlement
naval_battle naval combat mission
simulation auto-resolve ("troops sent to confront")
post_battle resolved after a battle (xp, loot, renown, influence, recovery)
campaign_map on the campaign map: travel, daily party upkeep
at_sea campaign map at sea
settlement in a governed, owned or visited settlement
in_army while in an army
raid raiding villages, or raid recovery
vs_bandits against bandits, pirates, hideouts
terrain depends on terrain (plains, steppe, desert, forest, snow)
day_night depends on time of day
mounted personal effect active only while mounted
on_foot personal effect active only on foot
tournament tournaments
conversation persuasion and barter dialogs
kingdom_politics kingdom decisions, votes, defection
stealth stealth missions, sneaking into towns
smithy smithy screen
passive always on, no situation (attributes, limits, clan-wide)

target

Tag Definition
self the hero holding the perk
formation troops in the hero's formation or ship crew
party troops of the hero's party
party_heroes companions and heroes in the party
prisoners the party's or settlement's prisoners
army parties in the hero's army
clan clan-wide: workshops, caravans, clan parties, clan members
settlement governed settlement and its bound villages
garrison garrison and militia of the settlement
ships the party's ships
siege_engines own siege engines
npcs lords and notables (relations)
enemy debuff on enemy troops, ships, morale or fortifications
Native NavalDLC adds
Skills 18 Mariner, Boatswain, Shipmaster
Skill effects 43 6
Perks 374 62 (121 rows)
Game roles FirstMate, Navigator
Character development default model NavalCharacterDevelopmentModel replaces it: +6 focus points at start

How the naval skills act at sea: Naval campaign and Naval battles.

Changelog