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:
- Source: the term, building, policy, feat, skill effect or perk half. Perks are named
Perk (Skill, half).
- Value: the perk half's bonus (for a skill effect, its bonus per skill point).
bonus in a scaling expression is this value.
- Stage:
base sets the starting value, add adds to the sum, factor adds to the factor sum, multiply multiplies the running value, override replaces the value (for a yes/no number, 1 is yes and 0 is no).
- Scaling: the amount, as an expression of the variables named in the notes.
skill is the holder's skill level.
- Conditions: what must hold for the term to apply.
role=ClanLeader means the half is read from the clan leader, role=PartyLeader from the party leader, role=Governor from the settlement's governor, role=Personal from the hero the number belongs to.
- Verdict:
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. A skill level source reads the skill value itself, with no skill effect or perk in between; its Value column is empty.
Combine rules
explained_number numbers are built by the game's standard modifier sum:
result = clamp( (base + Σ add) · (1 + Σ factor), min, max )
Σ add: every add term. Σ factor: every factor term, summed and applied once.
min, max: the result is at least min and at most max; the limits apply when the result is read.
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.
relation_change: the positive amount passed by the caller.
- Relation increase with NPCs: +0.005 factor per Charm point of the effective hero.
- In Bloom applies when the two heroes' genders differ, Young and Respectful when they match.
- Honor trait, relation gain: the higher of the two heroes' values,
trait_effect = 0.1 at Honor +1 and 0.2 at +2.
- Honor trait, clan leaders: when the second hero is a clan leader, the first hero's value; when the first is, the second hero's; the lower of the two counts.
trait_effect = -0.05 at Honor -1 and -0.1 at -2.
- Good Natured, Tribute (
differs): the Mercy test reads the second hero of the call whichever hero holds the perk. When the player is the second hero (notable-first calls after a battle), the player's own Mercy is checked. Good Natured needs Mercy > 0, Tribute Mercy < 0. The +1 is added before the factors, so the factors scale it.
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.
relation_change: the amount passed by the caller.
- Warlord (
differs): only the winning side's leader party hero is checked, and only for field battles, sieges and battles outside a besieged settlement (not sally-outs, raids, hideouts or blockades) with a lord party on the losing side. A random alive lord of the winner's faction other than the leader gets +1.
- Good Lodging (
differs): any party leader, not only the player; a random lord aged 40 or more in the town. Skipped while the town is under siege, which the tooltip does not say.
- Steel Maker 3: successful lord crafting orders in towns; custom orders are skipped. The relation is the crafter's.
|
|
| 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.
daily_notable_relation_bonus, daily_notable_relation_penalty, daily_village_notable_relation_bonus: the settlement security and loyalty models' daily notable relation constants. Each eligible notable gets a daily random roll below 0.05; the relation is between the settlement's owner clan leader and the notable.
- Town at or above the security threshold for the bonus: artisans and merchants gain the bonus.
- Town below the security threshold for the penalty: artisans and merchants lose relation and power.
- Village whose bound town is at or above the loyalty threshold: headmen and rural notables gain the bonus.
- Moral Leader (secondary): any building level increase in a town or castle; every notable of the settlement gains relation with the owner clan leader. Governor presence is not checked.
- Oratory, secondary (
differs): only the winning side's leader party hero, only field battles, sieges and battles outside a besieged settlement (not sally-outs, raids, hideouts or blockades) with a lord party on the losing side. A random active notable whose settlement belongs to the winner's faction gets +1.
- Experienced Smith: successful notable crafting orders in towns (not lord orders, not custom orders); the relation is the crafter's.
- Best Medicine (
differs): any party leader in a town, a random notable aged 40 or more; skipped while the town is under siege.
- Pathfinder, Water Diviner (
differs): the bonus is never read. On each main party entry into a town (Pathfinder) or village (Water Diviner) a hard-coded 50% roll runs, with a 1-day cooldown per perk, instead of a daily chance. +1 between the party's clan leader and a random notable.
- Trickle Down (
differs): only trade goods count toward the 10000 threshold in one inventory session; equipment, mounts and other purchases are ignored. Every merchant notable of the town gains relation with the inventory owner.
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.
- While the player is in a settlement and holds the perk, a daily random roll below
bonus picks a random non-player hero of the settlement with relation below 0 and adds +1 player relation. Any hero type qualifies, broader than lords and notables.
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.
- Per party in an army whose leader holds the perk, a daily random roll below
bonus; on success a random lord of another army party gets +1 relation with the leader.
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.
issue_relation_change: the issue's relationship change with its owner, or the quest's change with its giver when solved through the quest.
- Positive values only: Distributed Goods (owner is an artisan) then Local Connection (owner is a merchant) multiply by
bonus, truncated to an integer, in that order. The result goes through the positive relation change above. Negative values are applied unmodified.
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.
overpay_steps: limit = clamp(relation + 3, -100, 100). From the current relation up to the limit, each step costs 1000 + 100 · i² gold (i the relation at that step); a fully paid step adds 1, a partly paid step adds 1 with probability overpay / cost and stops.
- Tribute multiplies the steps by
1 + bonus, then the result is rounded up. The relation then goes through the positive relation change above.
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.
- Result rounded.
- Charm (
differs): read from the male of the two heroes, so a female player's own Charm is never used here.
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.
skill: the emissary's raw Charm. 5% at 0, 10% at 300.
- No module replaces
EmissarySystemCampaignBehavior.
- The target is a random notable, or a lord without a party in the settlement: a lord on a 50% roll when one qualifies, and also when the settlement has no notables.
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.
Charm: the main hero's raw skill. No clamp: the relation gain is certain from 90 Charm, from 80 with opposite genders.
- The difficulty reads the opponent lord's Steward, not the player's.
BoardGameCampaignBehavior is part of SandBox; no other module replaces it.
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.
goal_value: the goal passed by the conversation.
- Moral Leader: the conversation hero has the main hero's culture. Natural Leader: a different culture. At least 1.
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.
- Skill used:
skill / 250 is an integer division, so the factor is 0 below 250 and 0.2 at 250 and above.
difficulty_persuasion_bonus: the difficulty model's persuasion bonus; added only when > 0.
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.
success = clamp(default_success_chance · strength_factor · bonus_success_chance, 0, 1). default_success_chance comes from the option's arguments and difficulty; bonus_success_chance is the success multiplier above.
strength_factor by argument strength -3..3: 0.05, 0.15, 0.35, 0.55, 0.7, 0.8, 0.9; default 0.55.
- Critical success is 0 unless the option gives critical success; then the success chance moves into the critical chance and success becomes 0.
- Meaningful Favors (
differs): critical = clamp(critical + critical · bonus, 0, 1), a relative +10% rather than +10 points, and only when the critical chance is already above 0. The failure remainder shrinks accordingly.
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.
- On a critical failure, if the main hero holds the perk, a random roll at or below
bonus turns it into a plain failure.
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:
- Receiver side (the side getting the item): base 0.4. Perks are read on the item's original owner (the giver) and subtracted as factors.
- Giver side (the item's owner): base -8.4 for animals and mounts, -12.6 for food, -2.1 for anything else. Perks are read on the other hero (the receiver) and added as factors.
- Any other side: 0, no terms.
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.
- Self-made Man (
differs): when the holder gives an item, the receiving side's factor is +50% on 0.4 (0.4 → 0.6, a -33% penalty), not -50%. When the holder receives an item, the giver side's factor gets a true -50%.
- Effort For The People (
differs): same culture. Receiver side +25% on base 0.4; giver side -25%.
- Slick Negotiator (
differs): different cultures. Receiver side +10% on base 0.4; giver side -10%.
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:
s = clamp(strength ratio of the player in the encounter, 0, 1).
wealth = clamp(main hero gold + main party item values, 0, 2³¹), truncated; non-bandit encounters add 3000 + renown · 50 (the product truncated), renown = player clan renown.
offer_factor = 0.1 when s ≥ 1, else 0.05 + (1 - s) · 0.2; ×1.5 for non-bandit encounters; ×1.2 while the main party is in a battle or siege.
v = wealth · offer_factor + 1000, truncated.
- Bandits:
v = v / 8 (integer), then Sweet Talker. Others: v = v / 2 + 0.3 · offer_factor · military_value + 0.3 · offer_factor · hero_value, each part truncated, with the other party's military value and the other hero's value from the valuation model.
- Market Dealer:
v += round(v · bonus).
- Return value: for the owner's side
-(v / relation_factor²), truncated, with relation_factor = clamp((50 + relation of the faction leader with the other hero) / 50, 0.05, 1.1) (1 without a leader); for the other hero's side 0.9 · v, truncated; else v.
|
|
| 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.
- Sweet Talker, primary (
differs): raises the gold value bandits put on safe passage (v += round(v · bonus)), so the player pays 20% more; no chance changes. Skipped at sea.
- Market Dealer (
differs): only the main hero is checked, not the clan leader of the bartering party, so AI clan leaders never benefit.
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.
- For the joining clan:
v = GetScoreOfClanToJoinKingdom; if the clan already has a kingdom, the settlement value is subtracted (unless that kingdom is at war with the target) and the value of leaving its kingdom is added. leader_factor is 0.5 when the target kingdom's leader is the main hero, else 1.
- For the target kingdom:
v = GetScoreOfKingdomToGetClan. Any other faction: -1000000.
- Silver Tongue: target kingdom is the player's kingdom and the main hero holds the perk;
v += v · bonus for whichever faction evaluates. Result truncated.
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.
- The offering hero holds the perk and both heroes exist: every fief whose owner clan is led by the offering hero becomes a barterable. Blocked when either clan is under mercenary service or the other hero is in a minor clan that is not the player's.
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.
- Without Partners in Crime or a raft, the bandits accept when a seeded random roll is at most
bribe_chance (the encounter model's bribe chance).
dead: no method in any v1.5.7 assembly calls or references this condition. AddDialogs gates the "serve under my command" line after a surrender with conversation_bandit_player_can_make_them_join_condition (AddDialogs 0x375), which reads only the encounter model's force-join check (Party and map). No acceptance roll follows that line.
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.
mercenary_influence: the clan's influence; revenue_smoothen_fraction: the clan finance model's revenue smoothing fraction.
army_award: sum over the clan's war parties in an army led by another clan's hero (not the army leader party) of (army_strength + 20) / 200, army_strength the party's estimated strength. The Empire army influence feat adds award · feat bonus per party; it scales only this term. Added even when 0.
- Kingdom ruler bonus: the clan leader leads the kingdom.
building_influence: the summed Influence building effect of every clan fortification. Governor factors on building effects (Public Speaker, Contractors, Master of Planning) reach this term through the building effect.
crime_rating: the player's crime rating with the map faction, when above 0; the game truncates toward zero.
notable_influence: sum of the influence bonus of supporter notables with a current settlement; added when > 0.
issue_effect: active issue effects on clan influence.
- Bailiffs:
secure_towns = clan towns with security above 60. Council of the Commons: notables = notables in clan settlements. Feudal Inheritance: settlements = clan settlements. Serfdom: villages = clan villages.
- Lawspeakers: +1 when the clan leader's Charm is above 100, -1 otherwise. Lord's Privy Council, Noble Retinues: clan tier 5 or more. Senate: tier 3 or more.
- Sacred Majesty: +3 for the ruling clan, -0.5 for others. Marshals: -1 for the ruling clan. Royal Guard: -0.2 for others.
- Naval Conjoining Statute: +1 when any ship of the clan's alive lords in a party has hull type 2; otherwise -1 when every ship has hull type 0. The "every ship" test is true for an empty list, so a clan whose lords have no ships also gets -1.
- Immortal Charm: holder is the clan leader.
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.
- Military Coronae: every event except default, joining a faction, giving food and detail 10; applied before the factors, so the factors scale it.
- Pre Battle Maneuvers: battle influence above 0; any hero in the party's roster holding it counts.
- Besieged (
differs): only influence for capturing an enemy settlement; successfully defending a siege is not covered.
- Oratory, primary (
differs): only issues solved through their quest; issues solved by sending troops or an alternative solution never trigger it. The solver's clan must be in a kingdom.
- Merchant Fleet: per ship built in a fortification whose governor holds it (no presence check); the influence goes to the settlement owner, not the governor.
- Salvage: ships discarded by a mobile party whose leader holds it;
ship_hit_points is the ship's hit points. The perk bonus is not read.
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.
troop_power: the donated troop's power.
- Relocation (
differs): the donating party's leader must hold the perk and the quartermaster must hold it. A quartermaster with the perk under a leader without it gives nothing.
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.
- Feudal Inheritance: annexation cost, clan in a kingdom. Precarial Land Tenure: annexation cost, proposer is the ruling clan. War Tax: war proposal cost, proposer is the ruling clan.
- Firebrand: every proposal type.
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.
support_cost: 0 for weights 0-1, 20 for slightly favor, 60 for strongly favor, 150 for fully push.
- Result
support_cost · (1 + bonus), truncated, when the clan leader holds Flexible Ethics. There is no proposer test: the discount also applies to the clan's own proposals and to the cost of overriding a decision, broader than the tooltip. No decision type or module overrides it.
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.
- Per supporter of each outcome: the support cost above. 0 when the election has one supporter. Half (integer division) for an outcome that was not chosen. Overriding the winner costs the chooser the override cost separately.
- Good Natured, primary (
differs): the bonus is never read. A supporter clan whose leader holds it pays nothing for an outcome that was not chosen, instead of half. Applies to any losing outcome, including elections that are not proposals, and to AI clans.
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.
award_base: computed from power ratios to enemies and tribute payers, clan tier, leader gold, kingdom budget, clan and fief counts; no perk, skill or policy is read there.
- Man of Means, primary (
differs): award = round(award · (1 + bonus)) for a minor clan joining a kingdom led by the main hero. It reduces the mercenary award for minor clans joining the player's kingdom as mercenaries (the player must rule the kingdom), not a cost of recruiting them into the player's clan.
- Vlandian renown mercenary feat: adds 15% of the running award, after Man of Means; the added part is truncated to an integer.
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.
- Oratory, primary (
differs): only issues solved through their quest. The renown is then handled by the renown action.
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.
- Split lists (
;): Extortion by deserters returns Engineering at 120 only when Engineering is the highest; Rival gang moving in returns Roguery at 120 only when Roguery is the highest.
- The issue dialog lists the four numbers below and the companion's skill (
IssuesCampaignBehavior::issue_offer_player_accept_alternative_3_condition). On success the companion gets XP in the skill read when the solution started.
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.
- Only issues with the failure-risk flag use it; others store 0. The risk is fixed when the companion leaves. On return the solution succeeds when a random float is above the risk.
- No risk at
skill >= issue_required_skill. The dialog shows the risk truncated to whole percent.
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.
issue_total_men: the troops required (next sections). Issues with the casualties flag lose a random count from min to max (RandomInt(min, max + 1)), drawn when the companion leaves.
- The integer division makes
k fall in steps: the minimum 0.2 is reached once trunc(issue_required_skill / skill) is 2 or less.
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.
issue_base_days: the issue's base alternative-solution duration. Only issues with the scaled-duration flag use the formula; the result is truncated to whole days and sets when the troops return.
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.
issue_base_men: the issue's base troop count. Only issues with the scaled-troops flag use the formula; the issue checks the player's troops against it, and casualties scale from it.
- Unlike casualties and duration, the division here is not truncated.
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.
- Override 0 (refused) when:
- Betting fraud: One Handed, Two Handed, Polearm, Bow, Crossbow and Throwing are all below 50. The refusal always names One Handed.
- Scout enemy garrisons: Scouting below 30.
- Gang leader needs special weapons: Crafting below 30.
- Other refusal reasons of the same check (relation, renown, clan tier, war) are not skill reads.
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.
- Override 1 when the counsellor's raw Scouting is at least
150 · issue_difficulty. issue_difficulty = clamp(player progress, 0.1, 1) from the issue model, so the requirement is 15 to 150.
- Counsellor: the non-wounded hero in the main party with the highest Scouting (the later one on a tie), else the party leader.
- 1: a map arrow points to the target village and it is tracked. 0: every village bound to the quest giver's town is tracked to search instead.
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.
- Crafting is read when the order is created. The order can then be crafted by a hero whose Crafting + 50 is at least the order difficulty (Crafting and trade).
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.
- Override 0 (cannot trigger) below the threshold. Each condition is the lambda passed when the incident is registered; most also need a settlement, a looted village or a troop to name. Coin clipping also needs at least 5 regular troops; the Engineering incidents need the main party to be besieging.
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.
incident_skill, incident_xp: the option's skill and XP. learning_rate: the main hero's learning rate in that skill (attributes, focus and raw skill). A learning rate below 1 does not reduce the XP; 1 or more multiplies it.
- Options: Coin clipping Roguery 100; Market manipulation Trade 50 and Trade 100; Tipping the scales Roguery 50; Water supplies Engineering 100; Mining Engineering 50 (two options).
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.
- Captor party size: a mobile captor outside a settlement;
healthy_members = its healthy men. The multiplier is 2 at 81 men and more.
- Player-held prisoner: the captor is the main party, a player-clan settlement, or a mobile party inside a player-clan settlement.
- Governor perks (Sweet Talker, Dungeon Architect, Mounted Patrols secondary): prisoners of a town or castle settlement party; since v1.5.7 the governor must be in the settlement.
- Captor perks (Mounted Patrols primary, Ransom Broker, Keen Sight): a mobile captor, read from its leader. Prisoner perk (Fleet Footed): a mobile captor.
- Dungeon Architect, Mounted Patrols (
differs): hero prisoners only, not regular troop prisoners.
- Keen Sight: land only, as the tooltip shows. Ransom Broker is halved at sea, as the tooltip shows.
- Fleet Footed (
differs): applies at sea although the tooltip says land only.
- Valor trait: the captor's army leader's hero, else its leader;
trait_effect is -0.5 at Valor -2 and -0.25 at -1.
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.
- Stamina, secondary (
differs): adds a literal -0.1 factor, not the bonus value; it only reaches prisoners above the limit, while the tooltip says all prisoners. Land only, as the tooltip shows.
- Valor trait: the party leader's;
trait_effect is -0.5 at Valor -2 and -0.25 at -1.
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.
offers: the count of offers made during captivity. p: the running chance.
- Captor fighting a battle:
own = men on the captor's side, enemy = men on the other side; when own < 3 · enemy + 1, battle_term = (1 - own / (3 · enemy + 1)) / 2, and p = p^(1 - battle_term) if battle_term > 0.
- Captor kind:
captor_exponent = 1.5 for a mobile party with a leader or a hideout, 2 for other settlements, 1 for a mobile party without a leader.
- Fleet Footed:
p · (1 + bonus) for a mobile captor on land; skipped when the captor party is at sea, as the tooltip's "Land only" says.
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.
- Party leader Leadership:
0.05 · skill, hard-coded, not a skill effect.
- Fervent Attacker: prisoner tier ≤ 3. Stout Defender: tier ≥ 4. Loyalty and Honor: prisoner is not a bandit. Promises: prisoner is a bandit. Lead by Example: infantry. Trusted Commander: ranged.
- Fervent Attacker, Stout Defender, Loyalty and Honor and Promises are land only, Lead by Example and Trusted Commander halved at sea; the tooltips show both.
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.
morale_per_recruit: -2 for bandit prisoners, -1 otherwise. recruits: prisoners recruited. trait_effect: the party leader's Honor, -0.25 at Honor -2 and -0.15 at -1.
- Presence (
differs): the test is prisoner culture = party leader culture, not the prisoner's faction. The bonus is not read.
- Two Faced: bandit prisoners. The bonus is not read.
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.
- No recruitment when the party is not mobile, is at or above its size limit, exceeds its wage limit or is a patrol party. Above 30 morale it recruits; at 30 or below only with Presence.
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.
Steward: the main hero's raw skill. 20% at 0, certain from 120.
- The dialog lines are untranslated placeholders, and no path that opens a one-to-one conversation with a regular prisoner was found; the offer may be unreachable in normal play.
- No module replaces
PrisonerRecruitCampaignBehavior.
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.
recruit_cost: the troop's recruitment cost.
hero_value: for a hero with a clan (tier + 2) · 200 · (1 non-leader, 2.5 clan leader, 6 kingdom leader) + 6 · sqrt(max(0, gold)), else 0.
hero_factor: 1 for heroes, 0.25 for troops.
kingdom_factor: heroes only. 0.5 when the clan has no kingdom; with a kingdom, 1 when the map faction is not a kingdom, 1 + 0.1 · sqrt(fiefs - 8) for 8 fiefs or more, else (fiefs + 1) / 9. 1 for non-heroes.
- Since v1.5.7 a standard modifier sum: the perks and Mercy terms are factors, applied when a seller hero is given; the result is at least 1 and rounded.
- Manhunter (
differs): troop prisoners; skipped when the seller's party is at sea, which the tooltip does not say.
- Ransom Broker, primary: hero prisoners, the seller leads a party; full bonus at sea.
- Mercy terms: troop ransom -0.2 at the seller's Mercy +1 (nothing at +2); lord ransom -0.2 at Mercy +2 of the seller's clan leader.
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.
roll: a random number 0-1. gold: the main hero's gold.
captor_settlement_factor: 1 when held by a party, 2 in a non-kingdom settlement, 4 in a kingdom settlement. lord_party_factor: 2 when the captor is a mobile lord party, else 1.
- Result truncated to an integer.
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.
tier_limit: non-minor clan 1 for tier < 3, 2 for tier < 5, 3 otherwise; minor faction clamp(tier, 1, 4). Result rounded. No module override.
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.
tier: clan tier. We Pledge our Swords is added first, then Camaraderie. No module override.
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.
equipment_value: sum of the prices of the companion's 12 battle and 12 first civilian equipment slots in the hero's current town, else the town nearest the main party. level: the companion's level.
- Paid in Promise: the main hero leads a party. Great Investor: the main party's quartermaster.
- Result truncated to an integer.
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.
recruits: troops recruited.
OnTroopRecruited: any recruiter hero in a party, including AI lords recruiting prisoners, broader than the tooltip. OnUnitRecruited: the main hero; raised for volunteers, tavern mercenaries and prisoner recruitment (one event per troop). No flow raises both events, so one recruitment grants the XP once.
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.
- Insurance Plans (
differs): the holder is the caravan's owner hero, not the clan leader. Not for the main party. Without the perk nothing is paid.
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.
- All scores read the candidate wanderer's raw skills, not the player's.
TavernEmployeesCampaignBehavior is part of SandBox. NavalDLC does not replace it; NavalCompanionRolesCampaignBehavior calls it for first mates and navigators, and NavalDLCClanMemberPartyRoleModel supplies Boatswain and Shipmaster as their skills.
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.
alley_towns: the faction's towns with an alley owned by the main hero. alley_daily_crime: the alley model's daily crime rating of an alley. When the crime rating is about 0 this term is returned alone.
- Daily decay, one term by the faction's relation to the main hero: -5 for the main hero's clan, -5 for a kingdom led by the main hero, -1.5 for the main hero's map faction, -1.25 for a clan of the main hero's kingdom, -0.25 at war with the main hero's clan, -1 for any other faction.
- Honor trait: the main hero's,
trait_effect = -0.4 at Honor +1 and -0.8 at +2; on the negative decay it slows the decay. Only when the crime rating is not about 0.
- White Lies and the Honor trait: their factors also scale the alley term.
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.
avg_garrison_level: Σ (number · level) / max(1, troop count) of the garrison, 0 without one. renown: player clan renown.
- Two Faced:
p += p · bonus when p > 0, then clamped to 0-1.
- Despite the method name,
p is the success chance: the menu succeeds when a random roll is below p.
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.
hideout_base: 40, or 15 when the call's flag is set. NavalDLC and StoryMode delegate.
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.
Tactics, Roguery: the main hero's raw skills, summed. No module overrides the hideout model.
- The hideout is cleared when a random roll seeded by the settlement and the current hour is below the chance; the menu shows the chance rounded to a percent.
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.
ransom: the prisoner's ransom value. security: the prison town's security. Roguery: the main hero's raw skill. The cost is at least 1000. No module overrides the prison break model.
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.
- Override 0 (refused) when the candidate's raw Roguery is below 30; the tooltip names the 30 requirement. Earlier check: the player's alley under attack.
- No module overrides
DefaultAlleyModel.
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.
- Fortitude Tonic, primary: heroes in a party whose leader holds it, other than the leader.
- Mighty Blow:
bonus HP per Athletics point above 250, only above 250 (v1.4.8 used a literal 1 and did not read the bonus; same value). The perk needs 275 Athletics.
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.
hitpoints: the hero's current value.
- One-time on unlocking the perk: current hit points rise by
bonus (truncated), so current HP follows the new maximum.
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.
- Fencer Smith: since v1.5.7 a skill already at the maximum focus per skill (5) gets no point. A perk reset still removes one point from each skill.
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.
- Cheat Death: on unlock, the holder gets 1 extra life. The bonus is not read.
- Health Advice (
differs): a guaranteed one-time skip of an old-age death, not a chance. On unlock, if the holder leads the clan, every clan hero alive at that moment gets 1 extra life; members who join or are born later get none, and nothing is given if the holder is not clan leader then.
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.
- 0 without a spouse or when the hero's age is unsuitable for pregnancy.
age: the hero's age. children: the hero's children.
clan_factor: 1 when the hero or the spouse is the main hero, else min(1, (2 · (4 + 4 · tier) - alive_lords) / (4 + 4 · tier)) with tier the clan tier and alive_lords the clan's alive lords.
- Virile: the hero or the spouse holding it counts, broader than the tooltip. No module overrides the pregnancy model.
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.
reset_skill: the selected hero's raw value in the selected skill.
- No module replaces
PerkResetCampaignBehavior.
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.
- The highest-scoring available hero of an AI clan leads its next lord party. The player clan is skipped.
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.
- Commanding strength, summed over the clan with 1.2 · influence and 4 per settlement, is the clan strength used for king elections, clans leaving a kingdom and the heir clan of a kingdom; ×10 it is a hero's value for a faction, and marriage barters read it.
- Governing strength picks governors of AI clans' fiefs; the player clan is skipped.
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.
Clan::GetHeirApparents ranks heirs for every clan, the player clan included.
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.
- Noncombatants score −5000 for lord party leadership and −250 clan strength, and NPC heroes who are noncombatants (player clan companions included) do not enter tournaments. Dialog tags, poses and some issue conditions also read it.
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.
- Player clan children skip this (
AgingCampaignBehavior::OnHeroComesOfAge).
| 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
- v1.5.7 (2026-11-12): Re-verified against v1.5.7 IL: relation change model renamed; it rounds to the nearest whole number; Honor trait terms on relation gain and crime decay; Mighty Blow reads its bonus; Fencer Smith skips a skill at maximum focus; Fleet Footed player escape is land only as the tooltip shows. Prisoner escape, conformity, recruit morale and ransom re-read; governor escape perks need the governor present; Valor, Honor and Mercy trait terms added; ransom value is a standard modifier sum; tavern recommendation needs a score above 50.
- v1.4.8 (2026-11-12): Issue alternative solutions, quest skill gates and incident skill reads added.
- v1.4.8 (2026-11-11): Raw skill-level reads added (emissaries, board games, prisoner recruit talk, tavern recommendations, hideout, prison break, alleys, perk reset, AI clan decisions).
- v1.4.8 (2026-11-11): Bandits joining marked dead (no caller); Preventive Medicine hit-point scaling written as `bonus`.
- v1.4.8 (2026-11-11): First version from IL.