Bannerlord mechanics

Crafting and trade

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

Every skill, perk and feat that changes trade prices, trade rumors, smithing stamina, crafting orders, refining, part research and crafted weapon quality, at full precision for game v1.5.7.

Module overrides: no official module (SandBox, StoryMode, NavalDLC, BirthAndDeath) overrides DefaultTradeItemPriceFactorModel, DefaultPartyTradeModel or DefaultSmithingModel, or replaces CraftingCampaignBehavior or CraftingOrder. The disguised trader greeting is part of SandBox itself (SandBox.CampaignBehaviors.TradersCampaignBehavior).

Skill guides with these perks: Trade, Crafting, Roguery, Scouting, Riding, Steward, Athletics.

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.

Roles: "party leader" perks are read on the client party's leader hero; "quartermaster" perks on the party's quartermaster; "clan leader" perks on the party leader's clan leader; "personal" perks on the hero doing the action (the trading party's leader, the crafting hero, the shown character).

Trade

Trade penalty and prices

The buy price is max(1, ceil(value · base · (1 + penalty))) and the sell price max(1, floor(value · base / (1 + penalty))); the trade penalty starts at 0.06, adds war, equipment, animal, village and caravan terms, is multiplied for caravan or missing clients and divided by 1 + trade penalty reduction, then takes the perk factors. The market base factor, every term, its order and examples are on Prices and profit markers. This section adds the perk sites, the equipment term, Silver Tongue, Trickle Down and the rumor perks.

IL: DefaultTradeItemPriceFactorModel, DefaultPartyTradeModel.

Perk and feat factors on the trade penalty

trade_penalty: consumer DefaultTradeItemPriceFactorModel::GetTradePenalty, base 0.06, combine rule custom, no clamp. The factors apply to the running penalty p:

penalty = p · (1 + Σ factors)

The Trade skill effect "Trade penalty Reduction" (party leader, 0.002 per Trade point, works) is applied before the factors, in DefaultPartyTradeModel::GetTradePenaltyFactor: p is multiplied by 1 / (1 + 0.002 · Trade), using the party leader's Trade skill (or the effective party leader for the skill). With no client party the multiplier is 1.

Source Half Bonus Role Conditions Verdict
Appraiser (Trade) primary −0.15 party leader selling an item that is not a trade good works
Whole Seller (Trade) primary −0.15 party leader selling a trade good works
Granary Accountant (Trade) primary −0.2 party leader selling food that is a trade good works
Tradeyard Foreman (Trade) primary −0.2 party leader selling pottery, tools, jewelry or cotton (the Raw Silk item) works
Distributed Goods (Trade) secondary −0.15 quartermaster buying from a village works
Local Connection (Trade) secondary −0.15 quartermaster selling an item with a horse component works
Insurance Plans (Trade) secondary −0.25 quartermaster buying food works
Rapid Development (Trade) secondary −0.25 quartermaster buying clay, iron, silver or cotton (the Raw Silk item) works
Village Network (Scouting) primary −0.1 party leader merchant is a village of the client's map faction differs
Rumor Network (Scouting) primary −0.05 party leader merchant is a town of the client's map faction works
Deeper Sacks (Riding) secondary −0.1 party leader item is mountable works
Arenicos' Horses (Steward) secondary −0.2 party leader item is mountable works
Arenicos' Mules (Steward) secondary −0.2 quartermaster item is a pack animal works
Arms Dealer (Roguery) primary −0.2 party leader selling an item with a weapon component works
Smuggler Connections (Roguery) secondary −0.5 party leader client is the main party; the main hero has the perk; the merchant's faction has a crime rating above 0 against the main hero works
Aserai trader feat — −0.1 client party the client party has the feat works

Reading the table:

Edge cases:

Equipment selling term and Artisan Smith

equipment_sell_penalty: an inner sum inside GetTradePenalty, added to the trade penalty as one term. Combine rule explained number, no clamp.

equipment_sell_penalty = (1.5 + 0.25 · max(0, item_tier − 1)) · (1 + Artisan Smith)
Source Half Bonus Stage Conditions Verdict
Artisan Smith (Crafting) primary −0.5 factor on the equipment term selling a player-crafted weapon; client not a caravan; party leader has the perk differs

Artisan Smith differs: the tooltip says −50% trade penalty, but the factor scales only the equipment term 1.5 + 0.25 · max(0, item_tier − 1). The start value 0.06, the war, village and caravan terms and the perk factors are not halved.

Worked example.

The party leader has Artisan Smith and sells a player-crafted tier-3 weapon in a town; the client party is not a caravan. Inputs: item tier 3.

Step Source Stage Change Running value
Base Equipment selling trade-penalty term base 2.0000
1 Artisan Smith factor -50% -1.0000 1.0000
Result Equipment selling trade-penalty term 1.0000

With these inputs, equipment selling trade-penalty term is 1.0000.

Without the perk the term is the base of 2.0000; with it the trade penalty gains 1.0000 instead.

Silver Tongue

Silver Tongue (Trade, secondary, quartermaster, bonus 0.15; tooltip "+15% better trade deals from caravans and villagers") has two sites. Verdict differs on both.

Caravans (item_buy_price, DefaultTradeItemPriceFactorModel::GetPrice, min 1):

price = ceil(item_value · base_price_factor · (1 + trade_penalty))
price = ceil(price · (1 − Silver Tongue))      buying from a caravan only
price = max(price, 1)

Villagers (villager_buy_price, VillagerCampaignBehavior::village_farmer_buy_products_on_condition):

IL: GetPrice, VillagerCampaignBehavior.

Trickle Down

Trickle Down (Trade, primary, party leader, bonus 1.0; tooltip "+1 relationship with merchants if 10.000 or more denars are spent on a single deal"). Site: notable_relation, InventoryLogic::DoneLogic, stage add, value floor(bonus). Verdict differs.

IL: InventoryLogic.

Trade rumors: Traveling Rumors and Toll Gates

How rumors are stored and shown is on Trade rumors. The two rumor perks are feature flags: their bonus value is not read.

trade_rumors (TradeRumorsCampaignBehavior::OnSettlementEntered, base 0, sequential): a qualifying party entering a town with market data records one rumor per trade good (buy and sell price, 10 days) for that town, replacing the town's older rumors, at most once per day per town.

Source Half Stage Conditions Verdict
Main party enters a town — override 1 entering party is the main party; no perk needed works
Traveling Rumors (Trade) primary override 1 entering party is a caravan owned by a hero of the player clan; the main hero has the perk works

workshop_trade_rumors (TradeRumorsCampaignBehavior::AddDailyTradeRumors, base 0, sequential): once a day.

Source Half Stage Conditions Verdict
Toll Gates (Trade) primary override the main hero has the perk works

IL: TradeRumorsCampaignBehavior.

Trade screen markers

The marker rules are on Prices and profit markers. The perk halves that enable them are ui_only; their bonus is never read.

Source Half Game number Conditions Verdict
Appraiser (Trade) secondary inventory_profit_marker trade mode; player-side item; the main hero has Appraiser or Whole Seller ui_only
Whole Seller (Trade) secondary inventory_profit_marker same ui_only
Caravan Master (Trade) secondary inventory_price_marker merchant-side item; current settlement a town, castle or village; the main hero has Caravan Master or Market Dealer ui_only
Market Dealer (Trade) secondary inventory_price_marker same ui_only

IL: SPItemVM.

Trading while disguised (SandBox)

disguised_trader_conversation_available (SandBox.CampaignBehaviors.TradersCampaignBehavior::conversation_weaponsmith_talk_start_normal_on_condition, base 1, sequential): whether a trader offers the normal greeting.

Source Half Stage Conditions Verdict
Main hero disguised — override 0 the main hero is disguised works
Smuggler Connections (Roguery) primary override 1 the main hero is disguised; the disguise contact has already been made; the main hero has the perk works

IL: TradersCampaignBehavior.

Smithing

All smithing perks are personal: they are read on the hero at the forge (the selected crafting hero), not on the party leader.

Stamina

Each action costs crafting stamina. All three costs are standard modifier sums, truncated toward zero after the factor.

Game number Consumer Base Source Half Bonus Stage Verdict
smithing_stamina_cost DefaultSmithingModel::GetEnergyCostForSmithing 10 + 5 · item tier Practical Smith (Crafting) primary −0.5 factor works
smelting_stamina_cost DefaultSmithingModel::GetEnergyCostForSmelting 10 Practical Smelter (Crafting) primary −0.5 factor works
refining_stamina_cost DefaultSmithingModel::GetEnergyCostForRefining 6 Practical Refiner (Crafting) primary −0.5 factor works
cost = trunc(base · (1 + factor))

Worked example.

A hero with Practical Smith smiths a tier-5 weapon. Inputs: item tier 5.

Step Source Stage Change Running value
Base Smithing stamina cost base 35.0000
1 Practical Smith factor -50% -17.5000 17.5000
Result Smithing stamina cost 17.5000

With these inputs, smithing stamina cost is 17.5000.

The game then truncates 17.5000 toward zero before subtracting it from stamina.

crafting_stamina_hourly_recovery (CraftingCampaignBehavior::GetStaminaHourlyRecoveryRate, base 5, custom, integer):

rate = 5 + round(0.025 · Crafting)
rate = rate + round(rate · Stamina)            with the Athletics perk
stamina = min(max_stamina, stamina + rate)     each hour, only while the hero is in a settlement
max_stamina = 100 + round(0.5 · Crafting)
Source Half Bonus Stage Conditions Verdict
Crafting skill stamina recovery term — 0.025 · Crafting add, rounded — works
Stamina (Athletics) primary 0.5 multiply 1 + bonus, rounded personal works

crafting_max_stamina (CraftingCampaignBehavior::GetMaxHeroCraftingStamina, base 100, custom, integer) is the max_stamina above.

Source Half Bonus Stage Conditions Verdict
Crafting skill level — 0.5 · Crafting add, rounded personal works

IL: DefaultSmithingModel, CraftingCampaignBehavior.

Refining and smelting yields

The refining recipes the hero at the forge can use. Each perk recipe is a sequential game number with an override site. Material tiers: Iron1 is crude iron, Iron3 iron, Iron4 steel, Iron5 fine steel, Iron6 Thamaskene steel; the game code gives Iron2 no name.

Game number Recipe Without the perk Perk Half Verdict
charcoal_refining_output Wood ×2 → Charcoal Charcoal ×1 Efficient Charcoal Maker (Crafting) primary works
crude_iron_refining_output Iron ore ×1 + Charcoal ×1 → Iron1 (crude iron) Iron1 ×2 Efficient Iron Maker (Crafting) primary works
steel_refining_recipe Iron3 ×2 + Charcoal ×1 → Iron4 (steel) ×1 + Iron1 (crude iron) ×1 not available Steel Maker (Crafting) primary works
fine_steel_refining_recipe Iron4 ×2 + Charcoal ×1 → Iron5 (fine steel) ×1 + Iron1 ×1 not available Steel Maker 2 (Crafting) primary works
thamaskene_steel_refining_recipe Iron5 ×2 + Charcoal ×1 → Iron6 (Thamaskene steel) ×1 + Iron1 ×1 not available Steel Maker 3 (Crafting) primary works

IL: GetRefiningFormulas.

Part research

Smithing and smelting give research points toward unlocking new parts of the item's template.

smithing_part_research_gain (DefaultSmithingModel::GetPartResearchGainForSmithingItem, base 1, custom):

gain = 1 + floor(0.1 · item_value · (1 + Curious Smith + free_build))
Source Half Bonus Stage Conditions Verdict
Curious Smith (Crafting) primary 1.0 factor on the value term personal differs
Free-build smithing research bonus — 0.1 factor on the value term weapon made in free build works

Curious Smith differs: the tooltip says +100% learning rate, but the factor scales only 0.1 · item_value; the constant +1 is not doubled.

smelting_part_research_gain (DefaultSmithingModel::GetPartResearchGainForSmeltingItem, base 1 + round(0.02 · item_value), explained number):

gain = trunc((1 + round(0.02 · item_value)) · (1 + Curious Smelter))
Source Half Bonus Stage Conditions Verdict
Curious Smelter (Crafting) primary 1.0 factor on the whole gain personal works

Unlike smithing, the smelting factor scales the constant 1 as well. The gain goes to the smelted item's template.

Worked example.

A hero with Curious Smelter smelts a weapon worth 600, so round(0.02 x 600) = 12 value points. Inputs: smelt value points 12.

Step Source Stage Change Running value
Base Part research gain from smelting base 13.0000
1 Curious Smelter factor +100% +13.0000 26.0000
Result Part research gain from smelting 26.0000

With these inputs, part research gain from smelting is 26.0000.

Crafted weapon quality

When a weapon is finished (free build and order mode alike), the game rolls a quality from six weighted entries, then applies the design-tier cap.

Skill margin

crafted_quality_skill_margin (DefaultSmithingModel::GetModifierQualityProbabilities, base −design_difficulty, explained number, clamp [−300, 300]):

x = clamp(Crafting − design_difficulty, −300, 300)
Source Half Bonus Stage Verdict
Smithing level (Crafting skill effect) — 1.0 per point add differs

Smithing level differs: the tooltip calls it the max difficulty that can be smithed without penalty, but no threshold exists. x drives continuous sigmoid weights, so Poor and Inferior results stay possible at a skill equal to or above the difficulty.

Worked example.

A Crafting 200 hero smiths a design of difficulty 150. Inputs: design difficulty 150.

Step Source Stage Change Running value
Base Crafted weapon quality skill margin base -150.0000
1 Max difficulty of weapon that can be smithed without penalty add +200.0000 50.0000
Result Crafted weapon quality skill margin 50.0000

With these inputs, crafted weapon quality skill margin is 50.0000.

Quality weights

S(x, m) = exp(0.018 · (x − m)) / (1 + exp(0.018 · (x − m)))

Poor        0.36 · (1 − S(x, −70))
Inferior    0.45 · (1 − S(x, −55))
Common      S(x, 25)
Fine        0.36 · S(x, 40)
Masterwork  0.27 · S(x, 70)
Legendary   0.18 · S(x, 115)

Perk steps

The three quality perks run in this order. Each step adds its bonus to its target quality's weight. Every other entry that is not on the step's excluded list loses bonus / (6 − (n + 1)), going through the list from Poor to Legendary, where n is the number of entries on the excluded list. An entry cannot drop below 0: the missing amount is taken from the next entry instead. All weights are then renormalized.

Step Perk (Crafting, primary) Bonus Target Excluded
1 Experienced Smith 0.1 Fine Masterwork, Legendary
2 Master Smith 0.075 Masterwork Legendary; Fine if Experienced Smith is held
3 Legendary Smith 0.05 + max(Crafting − 275, 0) / 5 · 0.01 Legendary Fine if Experienced Smith is held; Masterwork if Master Smith is held

So Experienced Smith takes bonus / 3 from each of Poor, Inferior and Common. The excluded list of the later steps depends on which earlier perks the hero holds.

Source Half Game number Stage Scaling Conditions Verdict
Experienced Smith primary fine add bonus — works
Master Smith primary masterwork add bonus — differs
Master Smith primary fine add −bonus / (6 − (n + 1)) hero lacks Experienced Smith differs
Legendary Smith primary legendary add bonus + max(skill − 275, 0) / 5 · 0.01 — differs
Legendary Smith primary fine add −bonus / (6 − (n + 1)) hero lacks Experienced Smith differs
Legendary Smith primary masterwork add −bonus / (6 − (n + 1)) hero lacks Master Smith differs

Design-tier cap

The cap runs after the roll. The probability list itself is unchanged.

Average piece tier of the design's used pieces Rolled Legendary becomes Rolled Masterwork becomes
below 3.5 Fine Fine
at least 3.5, below 4.5 Masterwork Masterwork (unchanged)
at least 4.5 Legendary (unchanged) Masterwork (unchanged)

IL: GetModifierQualityProbabilities, CraftingVM.

Crafting orders

Each town keeps 6 order slots. A new town order takes its difficulty from its slot (crafting_order_difficulty, CraftingCampaignBehavior::GetTownOrderDifficulty, custom):

difficulty = band + prosperity / 500
Slot band
0 random 40 to 79
1 random 80 to 119
2 random 120 to 159
3 random 160 to 199
4 random 200 to 240
5 the main hero's Crafting

A hero can take an order when (crafting_order_available, CraftingOrder::IsOrderAvailableForHero):

Crafting + 50 ≥ difficulty
Game number Source Stage Value Conditions Verdict
crafting_order_difficulty Crafting skill level base skill + prosperity / 500 (slot 5) main hero works
crafting_order_available Crafting skill level override 1 when Crafting + 50 ≥ difficulty personal works

All three Crafting reads are the raw skill. No module replaces CraftingCampaignBehavior or CraftingOrder.

IL: GetTownOrderDifficulty, GetRandomOrderDifficulty, CraftingOrderSlots, IsOrderAvailableForHero.

Crafting order relations

CraftingCampaignBehavior::CompleteOrder, after a successful order. Custom orders give neither bonus.

Source Half Bonus Game number Conditions Verdict
Experienced Smith (Crafting) secondary 2.0 notable_relation town order that is not a lord order works
Steel Maker 3 (Crafting) secondary 4.0 lord_relation lord order works

IL: CompleteOrder.

Attribute and focus perks

PerkActivationHandlerCampaignBehavior::OnPerkOpened adds these once, when the perk is unlocked. Each adds a hard-coded 1; the perk's bonus is never read (it has the same value). A perk reset removes the point again.

Perk (Crafting, primary) Bonus Game number Change Verdict
Controlled Smith 1.0 hero_control +1 Control differs
Vigorous Smith 1.0 hero_vigor +1 Vigor differs
Enduring Smith 1.0 hero_endurance +1 Endurance differs
Fencer Smith 1.0 hero_focus_one_handed, hero_focus_two_handed +1 focus point to One Handed and to Two Handed differs

differs here means only that the value is a literal 1, not the bonus; the result matches the tooltip.

IL: PerkActivationHandlerCampaignBehavior.

Sharpened Edge and Sharpened Tip

The two tier-10 Crafting perks change swing and thrust strike magnitude of player-crafted weapons and are read on the wielder. They are covered in Combat damage.

Inventory weight display

Form Fitting Armor (Athletics, primary, personal, bonus −0.15) has two ui_only sites on the inventory screen.

Game number Consumer Formula Conditions Verdict
inventory_character_total_weight SPInventoryVM::RefreshCharacterTotalWeight round(weapons_weight + armor_weight · (1 + bonus), 1) the shown character has the perk ui_only
item_tooltip_equipment_weight ItemMenuVM::SetGeneralComponentTooltip item_weight · (1 + bonus) the character has the perk; the compared equipment slot holds an item; the item is armor ui_only

IL: SPInventoryVM, ItemMenuVM, tooltip weight closure.

Changelog