Bannerlord mechanics

Characters and politics

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

Every game number of heroes, clans and kingdoms that a skill, perk, policy or cultural feat changes, at full precision for game v1.5.7: relations with lords and notables, persuasion, barter, influence and kingdom decisions, prisoners (escape, recruitment, ransom), issue alternative solutions, quest and incident skill gates, clan limits and companions, crime and sneaking, hit points, attribute and focus grants, old age and pregnancy, perk resets, and the AI clan decisions that read skills directly.

NavalDLC extends (calls the base model first, then adds its own terms) two of these numbers: the daily influence change (Naval Conjoining Statute) and prisoner conformity (Rolling Thunder). StoryMode also extends prisoner conformity in the story campaign. NavalDLC and StoryMode delegate (base model only) the hideout troop limit, the prisoner recruitment morale effect and the AI prisoner recruitment decision. No module overrides the diplomacy model (relation gain, proposal costs, clan strength, governor choice), the character stats model (maximum hit points), the clan tier model, the pregnancy model, the hideout, prison break, alley, hero creation or heir selection models. No module replaces the emissary, prisoner recruit, perk reset or hero spawn behaviors; the board game and tavern keeper behaviors are SandBox's own, and NavalDLC only calls the tavern keeper search for first mates and navigators.

Reading the tables

Each game number has a header table (consumer method, base, combine rule, clamp) and a source table:

Combine rules

explained_number numbers are built by the game's standard modifier sum:

result = clamp( (base + Σ add) · (1 + Σ factor), min, max )

sequential numbers are stored values or integer code paths where each step applies to the running value in code order. custom numbers have their own formula, given in the notes.

A multiply term on an explained_number (hero escape chance) scales the base before the sum is built, so the perk factors scale the multiplied base. Kingdom influence gain (sequential) does the same with Military Coronae: ×1.2 is applied before its sum is built.

Relations

Positive relation change

Every relation change between two heroes passes through this model before it is applied: ChangeRelationAction calls it and applies the returned whole number. Only a positive change is scaled; the model rounds the result to the nearest whole number (v1.4.8 rounded at random). The effective hero whose perks and Charm are read is the human player when either hero is the player, else a 50/50 random pick of the two. A change of 0 or less is returned unchanged. No module overrides it.

Consumer DefaultDiplomacyModel::GetEffectiveRelationChange (Native)
Base relation_change
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Honor trait: relation gain term factor trait_effect hero=either_hero_honor_trait works
Honor trait: relation gain with clan leaders term factor trait_effect hero=other_hero_clan_leader; hero=dishonorable works
Relation increase with NPCs (Charm skill effect) skill effect 0.005 per point factor bonus * skill role=Personal works
Good Natured (Charm, secondary) perk 1 add bonus hero=merciful; role=Personal differs
In Bloom (Charm, primary) perk 0.2 factor bonus hero=opposite_gender; role=Personal works
Tribute (Charm, secondary) perk 1 add bonus hero=cruel; role=Personal differs
Young And Respectful (Charm, primary) perk 0.2 factor bonus hero=same_gender; role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultDiplomacyModel: GetEffectiveRelationChange.

Worked example. The player at Charm 100 with In Bloom and Good Natured gains 10 relation with a merciful lord of the opposite gender:

The player at Charm 100 with In Bloom and Good Natured gains 10 relation with a merciful lord of the opposite gender. Inputs: relation change 10.

Step Source Stage Change Running value
Base Positive relation change after scaling base 10.0000
1 Good Natured add +1.0000 11.0000
2 In Bloom factor +20% +2.2000 13.2000
3 Relation increase with NPCs factor +50% +5.5000 18.7000
Result Positive relation change after scaling 18.7000

With these inputs, positive relation change after scaling is 18.7000.

The model then rounds 18.7000 to the nearest whole number.

Relation with a lord or a notable

ChangeRelationAction::ApplyInternal. Every change is replaced by relation_gain (above), which scales positive changes and rounds; a result of 0 is not applied. Then the effective pair of heroes gets relation = clamp(current + relation_change, -100, 100). The clamp bounds the resulting relation, not the change. Negative changes are applied unscaled. relation_change is whatever the calling event passes; the tables list the skill and settlement callers.

Consumer ChangeRelationAction::ApplyInternal (Native)
Base relation_change
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Positive relation change scaling (relation_gain) term override relation_gain works
Warlord (Charm, secondary) perk 1 add bonus faction=same_as_winner; role=PartyLeader differs
Good Lodging (Medicine, secondary) perk 1 add floor(bonus) map_state=in_settlement; role=PartyLeader; settlement=not_under_siege; settlement=town differs
Steel Maker 3 (Smithing, secondary) perk 4 add bonus role=Personal works

IL: TaleWorlds.CampaignSystem.Actions.ChangeRelationAction: ApplyInternal; TaleWorlds.CampaignSystem.CampaignBehaviors.CharacterRelationCampaignBehavior: OnMapEventEnded, DailyTickParty; TaleWorlds.CampaignSystem.CampaignBehaviors.CraftingCampaignBehavior: CompleteOrder.

Consumer ChangeRelationAction::ApplyInternal (Native)
Base relation_change
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
High-loyalty daily village notable relation term add daily_village_notable_relation_bonus hero=notable_headman_or_rural; settlement=village works
High-security daily notable relation term add daily_notable_relation_bonus hero=notable_artisan_or_merchant; settlement=town works
Low-security daily notable relation term add daily_notable_relation_penalty hero=notable_artisan_or_merchant; settlement=town works
Positive relation change scaling (relation_gain) term override relation_gain works
Moral Leader (Charm, secondary) perk 1 add round(bonus) role=Governor; settlement=town_or_castle works
Oratory (Charm, secondary) perk 1 add bonus faction=same_as_winner; role=PartyLeader differs
Experienced Smith (Smithing, secondary) perk 2 add bonus role=Personal works
Best Medicine (Medicine, secondary) perk 1 add floor(bonus) map_state=in_settlement; role=PartyLeader; settlement=not_under_siege; settlement=town differs
Pathfinder (Scouting, secondary) perk 0.5 add 1 party=main_party; role=PartyLeader; settlement=town differs
Water Diviner (Scouting, secondary) perk 0.5 add 1 party=main_party; role=PartyLeader; settlement=village differs
Trickle Down (Trade, primary) perk 1 add floor(bonus) role=PartyLeader; settlement=town differs

IL: TaleWorlds.CampaignSystem.Actions.ChangeRelationAction: ApplyInternal; TaleWorlds.CampaignSystem.CampaignBehaviors.CharacterRelationCampaignBehavior: DailyTick, OnMapEventEnded, DailyTickParty; TaleWorlds.CampaignSystem.CampaignBehaviors.BuildingsCampaignBehavior: OnBuildingLevelChanged; TaleWorlds.CampaignSystem.CampaignBehaviors.CraftingCampaignBehavior: CompleteOrder; TaleWorlds.CampaignSystem.CampaignBehaviors.PlayerTownVisitCampaignBehavior: CheckPerkAndGiveRelation; TaleWorlds.CampaignSystem.Inventory.InventoryLogic: DoneLogic.

Negative relation recovery

Consumer CharacterRelationCampaignBehavior::DailyTick (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Forgivable Grievances (Charm, secondary) perk 0.05 add bonus role=Personal; settlement=any_current works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.CharacterRelationCampaignBehavior: DailyTick.

Army lord relation

Consumer CharacterRelationCampaignBehavior::DailyTickParty (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Parade (Charm, secondary) perk 0.05 add bonus party=in_army; role=PartyLeader works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.CharacterRelationCampaignBehavior: DailyTickParty.

Issue relation gain

Consumer IssuesCampaignBehavior::OnIssueUpdated (Native)
Base issue_relation_change
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Distributed Goods (Trade, primary) perk 2 multiply bonus hero=issue_owner_artisan; role=Personal works
Local Connection (Trade, primary) perk 2 multiply bonus hero=issue_owner_merchant; role=Personal works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.IssuesCampaignBehavior: OnIssueUpdated.

Barter overpay relation

Consumer DefaultBarterModel::CalculateOverpayRelationIncreaseCosts (Native)
Base overpay_steps
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Tribute (Charm, primary) perk 0.2 multiply 1 + bonus role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultBarterModel: CalculateOverpayRelationIncreaseCosts.

Marriage relation gain

Consumer DefaultMarriageModel::GetEffectiveRelationIncrease (Native)
Base 20
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Relation increase with NPCs (Charm skill effect) skill effect 0.005 per point factor bonus * skill role=Personal differs

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultMarriageModel: GetEffectiveRelationIncrease.

Emissary relation chance

Daily, for each player clan hero sent as an emissary, the chance to gain relation with a notable or a lord in the emissary's settlement. On success the emissary model's relation bonus is applied.

Consumer EmissarySystemCampaignBehavior::DailyTick (Native)
Base 0.05
Combine rule custom
Clamp min 0 / max 1
Source Kind Value Stage Scaling Conditions Verdict
Charm skill level skill level add 0.05 * skill / 300 hero=player_clan works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.EmissarySystemCampaignBehavior: DailyTick.

Board game rewards

After the player beats a lord at a board game, one reward roll in order:

p = 0.1 + 0.1 (opposite genders) + Charm / 100 + 0.2 (opponent's Calculating trait is 1)
random ≤ p                                   → +1 relation with the opponent
same faction, Hard difficulty, random ≤ 0.4   → +1 influence
Hard difficulty                               → +1 renown
otherwise                                     → nothing
Consumer BoardGameCampaignBehavior::OnPlayerBoardGameOver (SandBox)
Base 0.1
Combine rule custom
Clamp none

The difficulty comes from the opponent's raw Steward: Easy below 50, Normal 50 to 99, Hard from 100 (conversation_lord_detect_difficulty_consequence).

Game number Source Kind Stage Scaling Conditions Verdict
board_game_relation_chance Charm skill level skill level add skill / 100 hero=main_hero works
board_game_difficulty Steward skill level (opponent) skill level add min(1, floor(skill / 50)) + min(1, floor(skill / 100)) — works

IL: SandBox.CampaignBehaviors.BoardGameCampaignBehavior: OnPlayerBoardGameOver, conversation_lord_detect_difficulty_consequence.

Persuasion

Persuasion goal

Consumer DefaultPersuasionModel::CalculatePersuasionGoalValue (Native)
Base goal_value
Combine rule explained_number
Clamp min 1
Source Kind Value Stage Scaling Conditions Verdict
Moral Leader (Charm, primary) perk -1 add bonus culture=same; role=Personal works
Natural Leader (Charm, primary) perk -1 add bonus culture=different; role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPersuasionModel: CalculatePersuasionGoalValue.

Success multiplier

GetChances multiplies the success chance by this number and the failure chance by 2 - x.

Consumer DefaultPersuasionModel::GetBonusSuccessChance (Native)
Base 1
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Difficulty persuasion bonus term factor difficulty_persuasion_bonus works
Main hero skill used by the persuasion option skill level factor min(0.2, floor(skill / 250) * 0.2) hero=main_hero works
Imposing Stature (Athletics, primary) perk 0.3 factor bonus hero=main_hero; role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPersuasionModel: GetBonusSuccessChance.

Success and critical success chance

Consumer DefaultPersuasionModel::GetChances (Native)
Base default_success_chance * strength_factor * bonus_success_chance
Combine rule custom
Clamp min 0 / max 1
Source Kind Value Stage Scaling Conditions Verdict
Persuasion argument strength term multiply strength_factor works
Meaningful Favors (Charm, primary) perk 0.1 factor bonus role=Personal differs

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPersuasionModel: GetChances.

Avoiding critical failure

Consumer Persuasion::CheckPerkEffectOnResult (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Forgivable Grievances (Charm, primary) perk 0.2 add bonus role=Personal works

IL: TaleWorlds.CampaignSystem.Conversation.Persuasion.Persuasion: CheckPerkEffectOnResult.

Barter

Item barter value factor

GetBarterPenalty. An item's barter value is round(result · item value). The base depends on which side evaluates the item:

Perk factors need the other hero to exist, differ from the item's owner, have a map faction and lead a party. No clamp.

Consumer DefaultBarterModel::GetBarterPenalty (Native)
Base side_base
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Giver-side animal or mount base term base -8.4 item=animal_or_mount works
Giver-side food base term base -12.6 item=food works
Giver-side other item base term base -2.1 item=not_animal_mount_or_food works
Receiver-side barter base term base 0.4 faction=evaluator_is_receiver works
Effort For The People (Charm, secondary) perk -0.25 factor -bonus culture=same; hero=other_hero_party_leader; role=Personal differs
Slick Negotiator (Charm, secondary) perk -0.1 factor -bonus culture=different; hero=other_hero_party_leader; role=Personal differs
Self-made Man (Trade, primary) perk -0.5 factor -bonus hero=other_hero_party_leader; role=Personal differs

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultBarterModel: GetBarterPenalty.

Worked example. The player, holding Self-made Man, offers a non-food item to a party-leading lord; the lord's side values it:

The player, holding Self-made Man, offers a non-food item to a party-leading lord; the lord's side values it.

Step Source Stage Change Running value
Base Receiver-side barter base base 0.4000
1 Self-made Man factor +50% +0.2000 0.6000
Result Item barter value factor (barter penalty) 0.6000

With these inputs, item barter value factor (barter penalty) is 0.6000.

Safe passage

SafePassageBarterable::GetUnitValueForFaction, the gold value of letting the main party go:

Consumer SafePassageBarterable::GetUnitValueForFaction (Native)
Base wealth * offer_factor + 1000
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Bandit safe-passage divisor term multiply 1 / 8 party=encountered_bandit works
Other hero value term add floor(0.3 * offer_factor * hero_value) party=encountered_not_bandit works
Main party in battle or siege term multiply 1.2 party=main_party_in_map_or_siege_event works
Non-bandit safe-passage divisor term multiply 1 / 2 party=encountered_not_bandit works
Non-bandit encounter offer factor term multiply 1.5 party=encountered_not_bandit works
Other party military value term add floor(0.3 * offer_factor * military_value) party=encountered_not_bandit works
Receiving side discount term multiply 0.9 faction=evaluator_is_other_hero_side works
Offering side relation scaling term multiply -1 / relation_factor ^ 2 faction=evaluator_is_owner_side works
Player clan renown in safe-passage wealth term add 3000 + floor(renown * 50) party=encountered_not_bandit works
Sweet Talker (Roguery, primary) perk 0.2 factor bonus hero=main_hero; party=not_at_sea; role=PartyLeader; victim=bandit_party differs
Market Dealer (Trade, primary) perk -0.5 factor bonus hero=main_hero; role=ClanLeader differs

IL: TaleWorlds.CampaignSystem.BarterSystem.Barterables.SafePassageBarterable: GetUnitValueForFaction.

A clan joining a kingdom

Consumer JoinKingdomAsClanBarterable::GetUnitValueForFaction (Native)
Base base_score
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Value of leaving the current kingdom term add leave_kingdom_value faction=evaluator_is_joining_clan works
Clan settlement value kept by its current kingdom term add -settlement_value * leader_factor faction=clan_kingdom_not_at_war_with_target; faction=evaluator_is_joining_clan works
Silver Tongue (Trade, primary) perk -0.15 factor bonus faction=player_kingdom_target; role=Personal works

IL: TaleWorlds.CampaignSystem.BarterSystem.Barterables.JoinKingdomAsClanBarterable: GetUnitValueForFaction.

Fiefs in barter

Consumer FiefBarterBehavior::CheckForBarters (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Mercenary clan on either side term override 0 hero=clan_under_mercenary_service works
Other hero in a non-player minor clan term override 0 hero=other_hero_minor_faction_not_player_clan works
Everything Has a Price (Trade, primary) perk 0 override 1 role=Personal works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.BarterBehaviors.FiefBarterBehavior: CheckForBarters.

Bandits joining the player

Consumer BanditInteractionsCampaignBehavior::conversation_bandits_will_join_player_on_condition (Native)
Base bribe_chance
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Bandit party adrift on a raft term override 1 party=bandit_in_raft_state dead
Partners in Crime (Roguery, primary) perk 0 override 1 hero=main_hero; role=PartyLeader dead

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.BanditInteractionsCampaignBehavior: conversation_bandits_will_join_player_on_condition.

Influence and kingdom politics

Daily influence change

NavalDLC extends the default model: the default result first, then Naval Conjoining Statute. Default order: Immortal Charm, mercenary conversion, army award, kingdom ruler bonus, buildings, crime rating, supporter notables, policies, issues. Policies apply only to a kingdom clan not under mercenary service. No clamp.

Consumer NavalDLCClanPoliticsModel::CalculateInfluenceChange (NavalDLC)
Base 0
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Being in another clan's army term add army_award party=in_other_clan_army works
Player crime rating term add trunc(-0.5 * crime_rating) faction=player_clan works
Kingdom ruler bonus term add 3 faction=clan_leader_is_kingdom_leader works
Issue effects on clan influence term add issue_effect works
Mercenary influence conversion term add -ceil(mercenary_influence / revenue_smoothen_fraction) faction=clan_under_mercenary_service works
Supporter notables term add notable_influence works
Building influence effects building add building_influence settlement=fortification works
Bailiffs policy add secure_towns faction=kingdom_clan_not_mercenary works
Council of the Commons policy add 0.1 * notables faction=kingdom_clan_not_mercenary works
Feudal Inheritance policy add 0.1 * settlements faction=kingdom_clan_not_mercenary works
Lawspeakers policy add -1 faction=kingdom_clan_not_mercenary; hero=clan_leader_charm_100_or_less works
Lawspeakers policy add 1 faction=kingdom_clan_not_mercenary; hero=clan_leader_charm_above_100 works
Lord's Privy Council policy add 0.5 faction=clan_tier_5_or_more; faction=kingdom_clan_not_mercenary works
Marshals policy add -1 faction=kingdom_clan_not_mercenary; faction=ruling_clan works
Naval Conjoining Statute policy add -1 faction=kingdom_clan_not_mercenary; ship=all_lord_ship_hull_type_0 works
Naval Conjoining Statute policy add 1 faction=kingdom_clan_not_mercenary; ship=any_lord_ship_hull_type_2 works
Noble Retinues policy add -1 faction=clan_tier_5_or_more; faction=kingdom_clan_not_mercenary works
Royal Guard policy add -0.2 faction=kingdom_clan_not_mercenary; faction=not_ruling_clan works
Sacred Majesty policy add -0.5 faction=kingdom_clan_not_mercenary; faction=not_ruling_clan works
Sacred Majesty policy add 3 faction=kingdom_clan_not_mercenary; faction=ruling_clan works
Senate policy add 0.5 faction=clan_tier_3_or_more; faction=kingdom_clan_not_mercenary works
Serfdom policy add 0.2 * villages faction=kingdom_clan_not_mercenary works
Trial by Jury policy add -1 faction=kingdom_clan_not_mercenary works
Empire army influence feat feat factor EffectBonus party=has_empire_army_influence_feat works
Immortal Charm (Charm, primary) perk 5 add bonus role=ClanLeader works

IL: NavalDLC.GameComponents.NavalDLCClanPoliticsModel: CalculateInfluenceChange; TaleWorlds.CampaignSystem.GameComponents.DefaultClanPoliticsModel: CalculateInfluenceChangeInternal, CalculateInfluenceChangeDueToIssues, CalculateInfluenceChangeDueToPolicies; TaleWorlds.CampaignSystem.GameComponents.DefaultArmyManagementCalculationModel: DailyBeingAtArmyInfluenceAward.

Worked example. The ruling clan of a kingdom, not under mercenary service, with 4 settlements of which 3 are villages, 12 notables in its settlements and 1 town above 60 security; supporter notables give 1.5 influence; the clan leader holds Immortal Charm; the kingdom has Feudal Inheritance, Serfdom, Council of the Commons, Bailiffs and Marshals:

The ruling clan of a kingdom, not under mercenary service, with 4 settlements of which 3 are villages, 12 notables in its settlements and 1 town above 60 security; supporter notables give 1.5 influence; the clan leader holds Immortal Charm; the kingdom has Feudal Inheritance, Serfdom, Council of the Commons, Bailiffs and Marshals.

Step Source Stage Change Running value
Base Daily clan influence change base 0.0000
1 Immortal Charm add +5.0000 5.0000
2 Bailiffs add +1.0000 6.0000
3 Council of the Commons add +1.2000 7.2000
4 Feudal Inheritance add +0.4000 7.6000
5 Marshals add -1.0000 6.6000
6 Serfdom add +0.6000 7.2000
7 Kingdom ruler bonus add +3.0000 10.2000
8 Supporter notables add +1.5000 11.7000
Result Daily clan influence change 11.7000

With these inputs, daily clan influence change is 11.7000.

Influence gained from events

GainKingdomInfluenceAction::ApplyInternal. amount is the value passed by the caller (battle, raiding, besieging, capturing a settlement, joining a faction, giving food, leaving troops in a garrison, board games, donating prisoners, siege safe-passage barter, default). Nothing happens when the resolved clan has no kingdom. Order: a detail-10 call sets the amount to 0.5 (no wrapper passes it) → Military Coronae ×1.2 → ExplainedNumber with base = amount and the Tactics factors → the clan's influence changes by the result. No clamp.

Consumer GainKingdomInfluenceAction::ApplyInternal (Native)
Base amount
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Influence detail 10 fixed amount term override 0.5 works
Military Coronae policy multiply 1.2 faction=kingdom_has_military_coronae works
Oratory (Charm, primary) perk 1 add round(bonus) role=Personal differs
Merchant Fleet (Boatswain, secondary) perk 5 add bonus role=Governor; settlement=fortification works
Salvage (Boatswain, primary) perk 0 add ship_hit_points * 0.01 role=PartyLeader works
Besieged (Tactics, secondary) perk 0.5 factor bonus role=Personal differs
Pre Battle Maneuvers (Tactics, primary) perk 0.25 factor bonus role=PartyMember works

IL: TaleWorlds.CampaignSystem.Actions.GainKingdomInfluenceAction: ApplyInternal; TaleWorlds.CampaignSystem.CampaignBehaviors.IssuesCampaignBehavior: OnIssueUpdated; NavalDLC.CampaignBehaviors.ShipProductionCampaignBehavior: OnShipCreated, OnShipDestroyed.

Influence from donating troops

Consumer DefaultPrisonerDonationModel::CalculateInfluenceGainAfterTroopDonation (Native)
Base troop_power / 3
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Relocation (Steward, primary) perk 0.25 factor bonus role=Quartermaster differs

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPrisonerDonationModel: CalculateInfluenceGainAfterTroopDonation.

Influence cost of proposing a decision

Each proposal cost method builds a standard modifier sum with its base, adds its policy factors, calls this shared perk step and rounds the result. decision_base_cost: 200 for war, annexation and expelling a clan; 100 for peace and policy proposals or disavowals. No module overrides the diplomacy model.

Consumer DefaultDiplomacyModel::GetPerkEffectsOnKingdomDecisionInfluenceCost (Native)
Base decision_base_cost
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Feudal Inheritance policy factor 1 faction=has_kingdom works
Precarial Land Tenure policy factor -0.5 faction=ruling_clan works
War Tax policy factor 1 faction=ruling_clan works
Firebrand (Charm, primary) perk -0.25 factor bonus role=ClanLeader works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultDiplomacyModel: GetPerkEffectsOnKingdomDecisionInfluenceCost, GetInfluenceCostOfAnnexation, GetInfluenceCostOfProposingWar.

Worked example. The ruling clan proposes war in a kingdom with War Tax; its leader holds Firebrand:

The ruling clan proposes war in a kingdom with War Tax; its leader holds Firebrand. Inputs: decision base cost 200.

Step Source Stage Change Running value
Base Influence cost of proposing a kingdom decision base 200.0000
1 Firebrand factor -25% -50.0000 150.0000
2 War Tax factor +100% +200.0000 350.0000
Result Influence cost of proposing a kingdom decision 350.0000

With these inputs, influence cost of proposing a kingdom decision is 350.0000.

Influence cost of supporting an outcome

Consumer KingdomDecision::GetInfluenceCostOfSupport (Native)
Base support_cost
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Flexible Ethics (Charm, primary) perk -0.3 factor bonus role=Personal works

IL: TaleWorlds.CampaignSystem.Election.KingdomDecision: GetInfluenceCostOfSupport.

Influence paid when an election resolves

Consumer KingdomElection::HandleInfluenceCosts (Native)
Base support_cost
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Supporting a losing outcome term multiply 1 / 2 faction=supported_outcome_not_chosen works
Single-supporter election term override 0 works
Good Natured (Charm, primary) perk 1 override 0 role=Personal differs

IL: TaleWorlds.CampaignSystem.Election.KingdomElection: HandleInfluenceCosts.

Mercenary award

Consumer DefaultMinorFactionsModel::GetMercenaryAwardFactorToJoinKingdom (Native)
Base award_base
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Vlandian renown mercenary feat feat factor 0.15 culture=clan_has_vlandian_renown_mercenary_feat works
Man of Means (Trade, primary) perk -0.2 multiply 1 + bonus faction=player_kingdom_leader; role=ClanLeader differs

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultMinorFactionsModel: GetMercenaryAwardFactorToJoinKingdom.

Issues and renown

Consumer IssuesCampaignBehavior::OnIssueUpdated (Native)
Base 0
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Oratory (Charm, primary) perk 1 add round(bonus) role=Personal differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.IssuesCampaignBehavior: OnIssueUpdated.

Issues, quests and incidents

No module overrides the issue model (DefaultIssueModel), the issues below or CampaignIncidentEffects; IncidentsCampaignBehaviour is added by SandBoxManager and no module replaces it. The SandBox issues are SandBox's own.

Alternative solution skill

Sending a companion with troops to solve an issue (the alternative solution) reads the companion's raw skill in the issue's alternative skill: issue_skill, compared with the issue's required level issue_required_skill. The issue picks the companion's highest skill among its list (comparisons keep the first listed on a tie; Smugglers and the stolen goods issue take the highest through MaxBy). issue_required_skill is a constant per issue and does not scale with issue difficulty.

Issue Skills issue_required_skill
Artisan can't sell products at a fair price Charm, Trade 120
Artisan overpriced goods Roguery, Trade 120
Captured by bounty hunters Scouting, Riding 120
Caravan ambush Tactics, Roguery 120
Escort merchant caravan Scouting, Riding 120
Extortion by deserters Bow, Crossbow, Throwing; Engineering 150; 120
Gang leader needs recruits Leadership, Roguery 120
Gang leader needs to offload stolen goods One Handed, Two Handed, Polearm, Roguery, Tactics 120
Gang leader needs weapons Trade, Crafting 120
Headman needs grain Trade, Medicine 120
Headman needs to deliver a herd Riding, Scouting 120
Headman village needs draught animals Riding, Trade 120
Landlord needs access to village commons One Handed, Two Handed, Polearm 150
Landlord needs manual laborers Athletics, Leadership 120
Landlord: the art of the trade Trade, Riding 120
Landlord training for retainers Steward, Leadership 120
Lesser noble revolt Leadership, Scouting 120
Lord needs garrison troops Leadership, Steward 120
Lord needs horses Trade, Riding 120
Merchant army of poachers Bow, Crossbow, Throwing 150
Merchant needs help with outlaws Tactics, Scouting 120
Nearby bandit base One Handed, Two Handed, Polearm 120
Smugglers One Handed, Two Handed, Polearm, Scouting 150
Village needs crafting materials Crafting 120
Village needs tools Engineering, Crafting 120
Family feud (SandBox) Athletics, Charm 120
Notable wants daughter found (SandBox) Charm, Scouting 120
Prodigal son (SandBox) Charm, Roguery 120
Rival gang moving in (SandBox) One Handed, Two Handed, Polearm; Roguery 150; 120
Rural notable inn and out (SandBox) Charm, Tactics 120
Snare the wealthy (SandBox) Roguery, Tactics 120
The spy party (SandBox) Charm, Roguery 150

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultIssueModel: GetIssueAlternativeSolutionSkill; each issue's GetAlternativeSolutionSkill in research/skills/consumers/il/ (for example CaravanAmbushIssue); melee list: Helpers.QuestHelper: GetAlternativeSolutionMeleeSkills.

Alternative solution failure risk

Consumer DefaultIssueModel::GetFailureRiskForHero (Native)
Base 0.005 * issue_required_skill
Combine rule custom
Clamp 0 to 0.9
risk = clamp((issue_required_skill − skill) · 0.5 / 100, 0, 0.9)
Source Kind Value Stage Scaling Conditions Verdict
Issue skill level (issue_skill) skill level add -0.005 * skill hero=player_clan works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultIssueModel: GetFailureRiskForHero; TaleWorlds.CampaignSystem.Issues.IssueBase: StartIssueWithAlternativeSolution, CompleteIssueWithAlternativeSolution.

Alternative solution casualties

Consumer DefaultIssueModel::GetCausalityForHero (Native)
Base issue_total_men
Combine rule custom
Clamp none
k   = 0.8                                                  if skill = 0
k   = clamp(trunc(issue_required_skill / skill) · 0.1, 0.2, 0.8)   otherwise (integer division)
max = ceil(issue_total_men · k)
min = clamp(2 · trunc(max / 3), 1, max)
Source Kind Value Stage Scaling Conditions Verdict
Issue skill level (issue_skill) skill level multiply max(0.2, min(0.8, trunc(issue_required_skill / skill) * 0.1)) hero=player_clan works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultIssueModel: GetCausalityForHero; TaleWorlds.CampaignSystem.Issues.IssueBase: StartIssueWithAlternativeSolution.

Alternative solution duration

Consumer DefaultIssueModel::GetDurationOfResolutionForHero (Native)
Base issue_base_days
Combine rule custom
Clamp none
k    = 10                                              if skill = 0
k    = clamp(trunc(issue_required_skill / skill), 0, 10)   otherwise (integer division)
days = issue_base_days + 2 · k
Source Kind Value Stage Scaling Conditions Verdict
Issue skill level (issue_skill) skill level add 2 * min(10, trunc(issue_required_skill / skill)) hero=player_clan works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultIssueModel: GetDurationOfResolutionForHero; TaleWorlds.CampaignSystem.Issues.IssueBase: GetTotalAlternativeSolutionDurationInDays.

Alternative solution troops

Consumer DefaultIssueModel::GetTroopsRequiredForHero (Native)
Base issue_base_men
Combine rule custom
Clamp none
k      = 1.2                                          if skill = 0
k      = clamp(issue_required_skill / skill, 0.2, 1.2)   otherwise
troops = trunc(issue_base_men · k)
Source Kind Value Stage Scaling Conditions Verdict
Issue skill level (issue_skill) skill level multiply max(0.2, min(1.2, issue_required_skill / skill)) hero=player_clan works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultIssueModel: GetTroopsRequiredForHero; TaleWorlds.CampaignSystem.Issues.IssueBase: GetTotalAlternativeSolutionNeededMenCount.

Quest skill gates

Three issues refuse their quest when the main hero's raw skill is too low.

Consumer IssueBase::CheckPreconditions (Native)
Base 1
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Weapon skill levels (betting fraud) skill level override 0 hero=main_hero works
Scouting skill level (scout enemy garrisons) skill level override 0 hero=main_hero works
Crafting skill level (gang leader needs special weapons) skill level override 0 hero=main_hero works

IL: TaleWorlds.CampaignSystem.Issues.IssueBase: CheckPreconditions; CanPlayerTakeQuestConditions of BettingFraudIssue, ScoutEnemyGarrisonsIssue, GangLeaderNeedsSpecialWeaponsIssue.

Daughter quest tracks

In the SandBox quest to find a notable's daughter, a party with enough Scouting sees the direction to the target village on leaving the quest giver's settlement.

Consumer NotableWantsDaughterFoundIssueQuest::get_DoesMainPartyHasEnoughScoutingSkill (SandBox)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Scouting skill level (party counsellor) skill level override 1 party=main_party works

IL: SandBox.Issues.NotableWantsDaughterFoundIssueBehavior+NotableWantsDaughterFoundIssueQuest: get_DoesMainPartyHasEnoughScoutingSkill, OnSettlementLeft; Helpers.MobilePartyHelper: GetMainPartySkillCounsellor.

Gang leader dagger order

The gang leader special weapons quest creates a dagger crafting order whose difficulty follows the main hero's Crafting.

Consumer GangLeaderNeedsSpecialWeaponsIssueQuest::GetCraftingDifficulty (Native)
Base 0
Combine rule custom
Clamp none
difficulty = clamp(min(Crafting, 100), 10, 100) + RandomInt(−10, 10)
Source Kind Value Stage Scaling Conditions Verdict
Crafting skill level skill level add max(10, min(skill, 100)) hero=main_hero works

IL: TaleWorlds.CampaignSystem.Issues.GangLeaderNeedsSpecialWeaponsIssueBehavior+GangLeaderNeedsSpecialWeaponsIssueQuest: GetCraftingDifficulty, GetDaggerCraftingOrder.

Incident skill gates

Some incidents can trigger only when the main hero's raw skill reaches a threshold.

Consumer IncidentsCampaignBehaviour::InitializeIncidents (Native)
Base 1
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Trade skill level skill level override 0 hero=main_hero works
Roguery skill level skill level override 0 hero=main_hero works
Engineering skill level skill level override 0 hero=main_hero; map_state=besieging works
Incident Skill Needs at least
Dodgy spice Trade 10
Market manipulation Trade 20
Speculative investment Trade 20
Tipping the scales Trade 30
Third-party arbitration Trade 35
Back taxes Trade 40
Coin clipping Roguery 40
At the breach Engineering 20
Mining Engineering 30

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.IncidentsCampaignBehaviour: InitializeIncidents; IncidentsCampaignBehaviour+<>c: <InitializeIncidents>b__18_4, b__18_5, b__18_176, b__18_349, b__18_366, b__18_402, b__18_425, b__18_447, b__18_454.

Incident skill XP

Incident options that grant skill XP read the main hero's skill through its learning rate.

Consumer CampaignIncidentEffects/<>c__DisplayClass6_0::<SkillChange>b__1 (Native)
Base incident_xp
Combine rule custom
Clamp none
xp = incident_xp · max(learning_rate, 1) · generic XP multiplier
Source Kind Value Stage Scaling Conditions Verdict
Incident skill level (incident_skill) skill level multiply max(learning_rate, 1) hero=main_hero works

IL: TaleWorlds.CampaignSystem.Incidents.CampaignIncidentEffects+<>c__DisplayClass6_0: <SkillChange>b__1; TaleWorlds.CampaignSystem.CharacterDevelopment.HeroDeveloper: AddSkillXp, GetFocusFactor.

Prisoners

Hero prisoner daily escape

NPC hero prisoners only; the main hero has a separate roll (below). Since v1.5.7 a campaign event can veto the roll (CanHeroBeReleased). Base 0.04, scaled by the captor-size and player-captor terms, then the perk factors and the captor leader's Valor trait. Escape when a random roll is below the result. No clamp: at a factor sum of -1 the chance is 0 and the prisoner never escapes. No other escape roll exists for regular troop prisoners except the excess-prisoner roll below.

Consumer PrisonerReleaseCampaignBehavior::DailyHeroTick (Native)
Base 0.04
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Captor party size term multiply 5 - min(81, healthy_members) ^ 0.25 party=captor_mobile_not_in_settlement works
Player-held prisoner term multiply 0.5 party=player_captor works
Dungeon Architect (Engineering, secondary) perk -0.25 factor bonus hero=prisoner; role=Governor; settlement=town_or_castle differs
Mounted Patrols (Riding, primary) perk -0.5 factor bonus hero=prisoner; role=PartyLeader differs
Mounted Patrols (Riding, secondary) perk -0.5 factor bonus hero=prisoner; role=Governor; settlement=town_or_castle differs
Fleet Footed (Roguery, secondary) perk 0.3 factor bonus hero=prisoner; party=mobile; role=Personal differs
Ransom Broker (Roguery, secondary) perk -0.3 factor bonus hero=prisoner; party=mobile; role=PartyLeader works
Sweet Talker (Roguery, secondary) perk -0.2 factor bonus hero=prisoner; role=Governor; settlement=town_or_castle works
Keen Sight (Scouting, secondary) perk -0.5 factor bonus role=PartyLeader works
Valor trait: prisoner escape chance term factor trait_effect hero=army_or_party_leader_valor_trait; party=mobile works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PrisonerReleaseCampaignBehavior: DailyHeroTick.

Worked example. An AI lord with Fleet Footed held by the player's party of 16 healthy men on the map; the player holds Mounted Patrols:

An AI lord with Fleet Footed held by the player's party of 16 healthy men on the map; the player holds Mounted Patrols.

Step Source Stage Change Running value
Base Daily escape chance of a hero prisoner base 0.0400
1 Mounted Patrols factor -50% -0.0200 0.0200
2 Fleet Footed factor +30% +0.0120 0.0320
3 Captor party size multiply ×3 +0.0640 0.0960
4 Player-held prisoner multiply ×0.5 -0.0480 0.0480
Result Daily escape chance of a hero prisoner 0.0480

With these inputs, daily escape chance of a hero prisoner is 0.0480.

Worked example. The same prisoner without Fleet Footed; the player holds Mounted Patrols and Keen Sight. The factors sum to -1 and the prisoner can never escape:

The same prisoner without Fleet Footed; the player holds Mounted Patrols and Keen Sight.

Step Source Stage Change Running value
Base Daily escape chance of a hero prisoner base 0.0400
1 Mounted Patrols factor -50% -0.0200 0.0200
2 Keen Sight factor -50% -0.0200 0.0000
3 Captor party size multiply ×3 +0.0000 0.0000
4 Player-held prisoner multiply ×0.5 +0.0000 0.0000
Result Daily escape chance of a hero prisoner 0.0000

With these inputs, daily escape chance of a hero prisoner is 0.0000.

Excess prisoner escape

Hourly, while a party holds more prisoners than its prisoner limit and is not in a battle or siege, each excess prisoner escapes when a random roll is below the result: a hero escapes, a troop is removed from the prison roster. Garrisons, militia and the player character skip the roll.

Consumer PrisonerReleaseCampaignBehavior::ApplyEscapeChanceToExceededPrisoners (Native)
Base 0.1
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Stamina (Athletics, secondary) perk 5 factor -0.1 party=not_garrison_or_militia; role=PartyLeader differs
Valor trait: prisoner escape chance term factor trait_effect hero=party_leader_valor_trait; party=not_garrison_or_militia works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PrisonerReleaseCampaignBehavior: ApplyEscapeChanceToExceededPrisoners.

Player escape

Rolled once per check interval; the interval is scaled by the captor kind: × 1 (mobile captor without a leader), 1.5 (mobile captor with a leader) or 2 (settlement captor). Escape when a random roll is below p.

Consumer PlayerCaptivityCampaignBehavior::CheckCaptivityChange (Native)
Base (offers + 1) / 8
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Captor fighting a battle term override p ^ (1 - battle_term) party=captor_in_map_event works
Captor kind exponent term override p ^ captor_exponent works
Fleet Footed (Roguery, secondary) perk 0.3 multiply 1 + bonus hero=main_hero; party=mobile; party=not_at_sea; role=Personal works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PlayerCaptivityCampaignBehavior: CheckCaptivityChange.

Prisoner conformity

Hourly conformity gained by a prisoner toward being recruitable. NavalDLC extends the default model: base result first, then Rolling Thunder for a pirate prisoner of a mobile party (its naval-only environment keeps it to parties at sea). StoryMode also extends it in the story campaign. No clamp.

Consumer NavalDLCPrisonerRecruitmentCalculationModel::GetConformityChangePerHour (NavalDLC)
Base 10
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Party leader Leadership (conformity) skill level add 0.05 * skill role=PartyLeader works
Fervent Attacker (Leadership, secondary) perk 0.5 factor bonus role=PartyLeader; tier=<=3 works
Lead by Example (Leadership, primary) perk 0.5 factor bonus role=PartyLeader; troop=Infantry works
Loyalty and Honor (Leadership, secondary) perk 0.3 factor bonus role=PartyLeader works
Stout Defender (Leadership, secondary) perk 0.5 factor bonus role=PartyLeader; tier=>=4 works
Trusted Commander (Leadership, primary) perk 0.5 factor bonus role=PartyLeader; troop=Ranged works
Promises (Roguery, secondary) perk 0.3 factor bonus role=PartyLeader; troop=bandit_occupation works
Rolling Thunder (Mariner, secondary) perk 0.5 factor bonus role=PartyLeader; victim=pirate works

IL: NavalDLC.GameComponents.NavalDLCPrisonerRecruitmentCalculationModel: GetConformityChangePerHour; TaleWorlds.CampaignSystem.GameComponents.DefaultPrisonerRecruitmentCalculationModel: GetConformityChangePerHour.

Recruiting prisoners: morale

Consumer DefaultPrisonerRecruitmentCalculationModel::GetPrisonerRecruitmentMoraleEffect (Native)
Base morale_per_recruit * recruits * (1 + trait_effect)
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Presence (Leadership, secondary) perk 0 override 0 culture=prisoner_matches_leader; role=PartyLeader differs
Two Faced (Roguery, secondary) perk 0 override 0 role=PartyLeader; troop=bandit_occupation works
Honor trait: morale penalty for recruiting prisoners term multiply 1 + trait_effect hero=party_leader_honor_trait works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPrisonerRecruitmentCalculationModel: GetPrisonerRecruitmentMoraleEffect.

AI parties recruiting prisoners

Consumer DefaultPrisonerRecruitmentCalculationModel::ShouldPartyRecruitPrisoners (Native)
Base 1
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Low party morale term override 0 party=morale_at_most_30 works
Presence (Leadership, secondary) perk 0 override 1 role=PartyLeader works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPrisonerRecruitmentCalculationModel: ShouldPartyRecruitPrisoners.

Prisoner recruit conversation

A one-to-one offer to a regular (non-hero) troop in the main party's prisoners. If it accepts, the whole stack of that troop joins the party. A refusal blocks the offer to that troop for 5 days.

Consumer PrisonerRecruitCampaignBehavior::conversation_prisoner_recruit_on_condition (Native)
Base 30 / 150
Combine rule custom
Clamp max 1
accept = random integer in [0, clamp(150 − Steward, 1, 150)) < 30
chance = min(1, 30 / clamp(150 − Steward, 1, 150))
Source Kind Value Stage Scaling Conditions Verdict
Steward skill level skill level override 30 / max(1, min(150, 150 - skill)) hero=main_hero works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PrisonerRecruitCampaignBehavior: conversation_prisoner_recruit_on_condition, conversation_prisoner_recruit_start_on_condition.

Prisoner ransom value

Consumer DefaultRansomValueCalculationModel::PrisonerRansomValue (Native)
Base (recruit_cost + hero_value) * hero_factor * kingdom_factor
Combine rule explained_number
Clamp min 1
Source Kind Value Stage Scaling Conditions Verdict
Manhunter (Roguery, primary) perk 0.2 factor bonus hero=not_hero; party=not_at_sea; role=Personal differs
Ransom Broker (Roguery, primary) perk 0.25 factor bonus hero=prisoner_is_hero; role=PartyLeader works
Mercy trait: troop ransom term factor trait_effect hero=not_hero; hero=seller_mercy_trait works
Mercy trait: lord ransom term factor trait_effect hero=prisoner_is_hero; hero=seller_clan_leader_mercy_trait works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultRansomValueCalculationModel: PrisonerRansomValue.

Player ransom value

Consumer PlayerCaptivity::GetPlayerRansomValue (Native)
Base (0.5 + 0.5 * roll) * (0.05 * gold + 300) * captor_settlement_factor * lord_party_factor
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Man of Means (Trade, secondary) perk -0.3 multiply 1 + bonus role=Personal works

IL: TaleWorlds.CampaignSystem.PlayerCaptivity: GetPlayerRansomValue.

Clan and companions

Clan party limit

Consumer DefaultClanTierModel::GetPartyLimitForTier (Native)
Base tier_limit
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Talent Magnet (Leadership, secondary) perk 1 add bonus role=ClanLeader works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultClanTierModel: GetPartyLimitForTier, AddPartyLimitPerkEffects.

Companion limit

Consumer DefaultClanTierModel::GetCompanionLimit (Native)
Base tier + 3
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Camaraderie (Charm, secondary) perk 1 add bonus role=ClanLeader works
We Pledge our Swords (Leadership, primary) perk 1 add floor(bonus) role=ClanLeader works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultClanTierModel: GetCompanionLimit.

Companion hiring price

Consumer DefaultCompanionHiringPriceCalculationModel::GetCompanionHiringPrice (Native)
Base 0
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Companion equipment value term add equipment_value / 2 works
Companion level term add level * 10 works
Paid in Promise (Steward, primary) perk -0.25 factor bonus role=PartyLeader works
Great Investor (Trade, secondary) perk -0.3 factor bonus role=Quartermaster works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultCompanionHiringPriceCalculationModel: GetCompanionHiringPrice.

Recruit XP

Consumer RecruitmentCampaignBehavior::OnTroopRecruited (Native)
Base 0
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Famous Commander (Leadership, secondary) perk 200 add floor(bonus) * recruits role=Personal works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.RecruitmentCampaignBehavior: OnTroopRecruited, OnUnitRecruited.

Destroyed caravan refund

Consumer DestroyPartyAction::ApplyInternal (Native)
Base 0
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Insurance Plans (Trade, primary) perk 5000 add bonus party=caravan; role=Personal differs

IL: TaleWorlds.CampaignSystem.Actions.DestroyPartyAction: ApplyInternal.

Tavern keeper companion recommendation

Asking a tavern keeper for a companion of a given type (the player pays 2 gold) recommends the wanderer with the highest score among those without a party in towns within three times the average distance between the two closest towns, skipping ones already recommended for that type. Nobody scores above 50: no recommendation.

Consumer TavernEmployeesCampaignBehavior::FindCompanionWithType (SandBox)
Base 0
Combine rule custom
Clamp none
Type asked Score
Scout, engineer, surgeon, quartermaster the role's skill: Scouting, Engineering, Medicine, Steward
First mate, navigator (NavalDLC) Boatswain, Shipmaster
Caravan leader Trade
Lieutenant Leadership + Tactics
Someone for villains and thieves Roguery
Source Kind Value Stage Scaling Conditions Verdict
Role skill level (role_skill) skill level base skill — works
Trade skill level skill level base skill — works
Leadership + Tactics skill level skill level base skill — works
Roguery skill level skill level base skill — works

IL: SandBox.CampaignBehaviors.TavernEmployeesCampaignBehavior: FindCompanionWithType.

Crime and stealth

Daily crime rating change

Consumer DefaultCrimeModel::GetDailyCrimeRatingChange (Native)
Base 0
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Player alleys in the faction's towns term add alley_towns * alley_daily_crime works
Daily crime decay by faction relation term add -0.25 faction=at_war_with_main_hero_clan works
Daily crime decay by faction relation term add -1 faction=other works
Daily crime decay by faction relation term add -1.25 faction=clan_in_main_hero_kingdom works
Daily crime decay by faction relation term add -1.5 faction=main_hero_map_faction works
Daily crime decay by faction relation term add -5 faction=kingdom_led_by_main_hero works
Daily crime decay by faction relation term add -5 faction=main_hero_clan works
Honor trait: crime rating decay term factor trait_effect hero=main_hero_honor_trait works
White Lies (Roguery, primary) perk 0.2 factor bonus hero=main_hero; role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultCrimeModel: GetDailyCrimeRatingChange.

Sneaking into a town

Consumer DefaultDisguiseDetectionModel::CalculateDisguiseDetectionProbability (Native)
Base 0.3 - 0.005 * avg_garrison_level - max(0.15, 0.00015 * renown)
Combine rule custom
Clamp min 0 / max 1
Source Kind Value Stage Scaling Conditions Verdict
Player Roguery skill (sneak-in) skill level add 0.003 * skill hero=main_hero works
Two Faced (Roguery, primary) perk 0.5 multiply 1 + bonus hero=main_hero; role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultDisguiseDetectionModel: CalculateDisguiseDetectionProbability.

Hideout crew size

Consumer DefaultBanditDensityModel::GetMaximumTroopCountForHideoutMission (Native)
Base hideout_base
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Small Unit Tactics (Tactics, primary) perk 1 add floor(bonus) mission=hideout; role=PartyLeader works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultBanditDensityModel: GetMaximumTroopCountForHideoutMission.

Sending troops into a hideout

Consumer DefaultHideoutModel::GetSendTroopsSuccessChance (Native)
Base 0.3
Combine rule custom
Clamp none
chance = 0.3 + (Tactics + Roguery) / (325 + Tactics + Roguery)
Source Kind Value Stage Scaling Conditions Verdict
Tactics + Roguery skill level skill level add skill / (325 + skill) hero=main_hero works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultHideoutModel: GetSendTroopsSuccessChance.

Prison break cost

Consumer DefaultPrisonBreakModel::GetPrisonBreakStartCost (Native)
Base ransom / 2000 * security * 40
Combine rule custom
Clamp none
c    = ceil(ransom / 2000 · security · 40 − 10 · Roguery)
cost = floor(c / 100) · 100 + 1000      (c below 100 counts as 0)
Source Kind Value Stage Scaling Conditions Verdict
Roguery skill level skill level add -10 * skill hero=main_hero works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPrisonBreakModel: GetPrisonBreakStartCost.

Alley leader

A player clan lord or companion can lead an alley only with at least 30 Roguery; the next check refuses Mercy above 0.

Consumer DefaultAlleyModel::GetAvailability (Native)
Base 1
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Roguery skill level skill level override 0 hero=player_clan works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultAlleyModel: GetAvailability, GetDisabledReasonTextForHero.

Character

Maximum hit points

Base 100, perk terms only. Hero agents take this as their health in battle. No clamp; no module overrides it.

Consumer DefaultCharacterStatsModel::MaxHitpoints (Native)
Base 100
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Mighty Blow (Athletics, secondary) perk 1 add bonus * (skill - 250) role=Personal works
Well Built (Athletics, primary) perk 5 add bonus role=Personal works
Doctor's Oath (Medicine, secondary) perk 5 add bonus role=Personal works
Fortitude Tonic (Medicine, primary) perk 10 add bonus role=PartyLeader works
Fortitude Tonic (Medicine, secondary) perk 5 add bonus role=Personal works
Preventive Medicine (Medicine, primary) perk 5 add bonus role=Personal works
Trainer (One Handed, primary) perk 2 add bonus role=Personal works
Unwavering Defense (One Handed, primary) perk 5 add bonus role=Personal works
Thick Hides (Two Handed, primary) perk 5 add bonus role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultCharacterStatsModel: MaxHitpoints.

Worked example. A hero at Athletics 300 with Mighty Blow, Well Built, Fortitude Tonic (secondary) and Doctor's Oath:

A hero at Athletics 300 with Mighty Blow, Well Built, Fortitude Tonic (secondary) and Doctor's Oath.

Step Source Stage Change Running value
Base Maximum hit points base 100.0000
1 Mighty Blow add +50.0000 150.0000
2 Well Built add +5.0000 155.0000
3 Doctor's Oath add +5.0000 160.0000
4 Fortitude Tonic add +5.0000 165.0000
Result Maximum hit points 165.0000

With these inputs, maximum hit points is 165.0000.

Current hit points on unlock

Consumer PerkActivationHandlerCampaignBehavior::OnPerkOpened (Native)
Base hitpoints
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Well Built (Athletics, primary) perk 5 add bonus role=Personal works
Preventive Medicine (Medicine, primary) perk 5 add bonus role=Personal works
Trainer (One Handed, primary) perk 2 add bonus role=Personal works
Unwavering Defense (One Handed, primary) perk 5 add bonus role=Personal works
Thick Hides (Two Handed, primary) perk 5 add bonus role=Personal works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkActivationHandlerCampaignBehavior: OnPerkOpened.

Attributes and focus points on unlock

One-time on unlocking the perk, through the hero developer. Each grant uses a literal 1; the perk bonus (also 1) is never read, hence differs with the same value as the tooltip. A perk reset removes the attribute or focus point again. level: the hero's current value.

Vigor

Consumer PerkActivationHandlerCampaignBehavior::OnPerkOpened (Native)
Base level
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Strong (Athletics, primary) perk 1 add 1 role=Personal differs
Vigorous Smith (Smithing, primary) perk 1 add 1 role=Personal differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkActivationHandlerCampaignBehavior: OnPerkOpened.

Control

Consumer PerkActivationHandlerCampaignBehavior::OnPerkOpened (Native)
Base level
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Steady (Athletics, primary) perk 1 add 1 role=Personal differs
Controlled Smith (Smithing, primary) perk 1 add 1 role=Personal differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkActivationHandlerCampaignBehavior: OnPerkOpened.

Endurance

Consumer PerkActivationHandlerCampaignBehavior::OnPerkOpened (Native)
Base level
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Durable (Athletics, primary) perk 1 add 1 role=Personal differs
Enduring Smith (Smithing, primary) perk 1 add 1 role=Personal differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkActivationHandlerCampaignBehavior: OnPerkOpened.

One Handed and Two Handed focus

Fencer Smith grants one focus point to each skill. Both game numbers (One Handed focus, Two Handed focus) have the same consumer, base, combine rule and source row:

Consumer PerkActivationHandlerCampaignBehavior::OnPerkOpened (Native)
Base level
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Fencer Smith (Smithing, primary) perk 1 add 1 hero=focus_below_max; role=Personal differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkActivationHandlerCampaignBehavior: OnPerkOpened.

Old age extra lives

Extra lives against old-age death, counted per hero. When an old-age death roll succeeds (age at or above old age and a random roll below the death probability), one extra life is spent instead of dying.

Consumer AgingCampaignBehavior::AddExtraLife (Native)
Base 0
Combine rule sequential
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Cheat Death (Medicine, primary) perk 0 add 1 role=Personal works
Health Advice (Medicine, primary) perk 0 add 1 role=ClanLeader differs

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.AgingCampaignBehavior: AddExtraLife, OnPerkOpened.

Pregnancy chance

Consumer DefaultPregnancyModel::GetDailyChanceOfPregnancyForHero (Native)
Base (1.2 - (age - 18) * 0.04) / (children + 1) ^ 2 * 0.12 * clan_factor
Combine rule explained_number
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Virile (Charm, primary) perk 0.3 factor bonus role=Personal works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultPregnancyModel: GetDailyChanceOfPregnancyForHero.

Perk reset

The arena master resets the perks of one skill of the main hero or a clan member in the party.

Consumer PerkResetCampaignBehavior::get_PerkResetCost (Native)
Base 0
Combine rule custom
Clamp none
cost = 40 · reset_skill
allowed when reset_skill ≥ 25
Game number Source Kind Stage Scaling Conditions Verdict
perk_reset_cost Selected skill level (reset_skill) skill level add 40 * skill hero=player_clan works
perk_reset_allowed Selected skill level (reset_skill) skill level override 1 hero=player_clan works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.PerkResetCampaignBehavior: get_PerkResetCost, get_HasEnoughSkillValueForReset.

AI clan decisions

These numbers read raw skills to drive AI choices. Three also reach the player clan: the heir ranking runs for the player clan's succession, the combatant check keeps player clan companions out of tournaments, and commanding strength sets a hero's value in marriage barters. No module overrides DefaultDiplomacyModel, DefaultHeirSelectionCalculationModel or DefaultHeroCreationModel, and no module replaces HeroSpawnCampaignBehavior.

Lord party leader choice

Consumer HeroSpawnCampaignBehavior::GetHeroPartyCommandScore (Native)
Base 0
Combine rule custom
Clamp none
score = 3 · Tactics + 2 · Leadership + Scouting + Steward + One Handed + Two Handed + Polearm + Riding
        + 1000 (clan leader) + 500 (not a governor) − 5000 (noncombatant)
Source Kind Value Stage Scaling Conditions Verdict
Commander skills skill level skill level add 3 * tactics_skill + 2 * leadership_skill + scouting_skill + steward_skill + onehanded_skill + twohanded_skill + polearm_skill + riding_skill — works

IL: TaleWorlds.CampaignSystem.CampaignBehaviors.HeroSpawnCampaignBehavior: GetHeroPartyCommandScore, GetBestAvailableCommander, TrySpawnHeroesAndParties.

Clan strength and governor choice

Game number Consumer Formula
hero_commanding_strength DefaultDiplomacyModel::GetHeroCommandingStrengthForClan max(0, 300 (Commander trait) + Tactics + Steward + Trade + Leadership + 0.1 · gold + 5 · party strength + 500 (clan leader) + 100 (parent or child of the clan leader) − 250 (noncombatant) − 250 (governor))
hero_governing_strength DefaultDiplomacyModel::GetHeroGoverningStrengthForClan 100 (Honor trait) + 0.3 · Tactics + 0.9 · Charm + 0.8 · Engineering + 2 · Steward + 1.2 · Trade + Leadership + 0.005 · min(100000, gold) + 1000 (spouse) / 750 (parent or child) / 500 (sibling) of the clan leader
Game number Source Kind Stage Scaling Verdict
hero_commanding_strength Clan strength skills skill level skill level add tactics_skill + steward_skill + trade_skill + leadership_skill works
hero_governing_strength Governor choice skills skill level skill level add 0.3 * tactics_skill + 0.9 * charm_skill + 0.8 * engineering_skill + 2 * steward_skill + 1.2 * trade_skill + leadership_skill works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultDiplomacyModel: GetHeroCommandingStrengthForClan, GetHeroGoverningStrengthForClan, GetClanStrength.

Heir selection

Each candidate gets points when a clan leader dies: +10 male, +5 oldest, −5 youngest, +10 parent, child or sibling of the dead leader, +10 same bloodline. The candidate with the highest sum of all raw skills gets +5 more, unless that is the clan leader.

Consumer DefaultHeirSelectionCalculationModel::CalculateHeirSelectionPointInternal (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Total skill skill level (any skill) skill level add 5 — works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultHeirSelectionCalculationModel: CalculateHeirSelectionPointInternal.

Combatant heroes

A hero is a combatant when any of One Handed, Two Handed, Polearm, Throwing, Crossbow or Bow is at least 100 (raw); otherwise the game treats the hero as a noncombatant.

Consumer DefaultHeroCreationModel::IsHeroCombatant (Native)
Base 0
Combine rule custom
Clamp none
Source Kind Value Stage Scaling Conditions Verdict
Weapon skill level skill level override 1 — works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultHeroCreationModel: IsHeroCombatant.

Inherited skills

When a hero outside the player clan comes of age, each skill starts from a parent's value plus noise:

parent_skill = father's skill with chance f / (f + m), else mother's      (f, m = the parents' raw skills)
value        = max(1, parent_skill + random 5 to 9)

The highest round(0.2777778 · number of skills) values are kept and rescaled so they average 112; one combat skill among them is raised to at least 100 (for a daughter of a noncombatant mother only 60% of the time).

Consumer DefaultHeroCreationModel::GetInheritedSkillValue (Native)
Base 0
Combine rule custom
Clamp min 1
Source Kind Value Stage Scaling Conditions Verdict
Parent skill level (any skill) skill level base skill — works

IL: TaleWorlds.CampaignSystem.GameComponents.DefaultHeroCreationModel: GetInheritedSkillValue, GetInheritedSkillsForHero.

Tooltip differences at a glance

Source Game number What the game does
Good Natured, Tribute (secondary) Relation gain Mercy of the second hero of the call, which can be the player
Warlord, Oratory (secondary) Lord / notable relation winning side's leader only; battles with a lord party on the losing side
Good Lodging, Best Medicine Lord / notable relation any party leader; skipped while the town is under siege
Pathfinder, Water Diviner Notable relation hard-coded 50% per entry, 1-day cooldown; bonus never read
Trickle Down Notable relation trade goods only count toward 10000
Charm (marriage) Marriage relation gain read from the male hero
Meaningful Favors Critical success relative +10%, only when critical chance > 0
Self-made Man Item barter value receiver side 0.4 → 0.6 (-33% penalty); giver side true -50%
Effort For The People, Slick Negotiator Item barter value receiver side raises the factor
Sweet Talker (primary) Safe passage value bandits ask 20% more gold; skipped at sea
Market Dealer Safe passage value main hero only
Besieged Kingdom influence gain capturing settlements only
Oratory (primary) Influence / renown quest-solved issues only
Relocation Troop donation influence leader and quartermaster both need it
Good Natured (primary) Election cost losing supporters pay nothing; bonus never read
Man of Means (primary) Mercenary award lowers the mercenary award for minor clans joining the player's kingdom
Dungeon Architect, Mounted Patrols Hero escape chance hero prisoners only
Fleet Footed Hero escape chance applies at sea although the tooltip says land only
Stamina (secondary) Excess prisoner escape literal -0.1; prisoners above the limit only
Presence (secondary) Recruitment morale prisoner culture, not faction
Manhunter Ransom value skipped at sea
Insurance Plans Caravan refund caravan owner hero, not the clan leader
Strong, Steady, Durable, Vigorous Smith, Controlled Smith, Enduring Smith, Fencer Smith Attributes / focus literal 1; bonus never read
Health Advice Old age extra lives guaranteed skip, clan members alive at unlock only

Athletics, Boatswain, Charm, Engineering, Leadership, Mariner, Medicine, One Handed, Riding, Roguery, Scouting, Smithing, Steward, Tactics, Trade, Two Handed.

Changelog