I think I can understand this. Proficiency is calculated with a formula like.. [Skill Level] / [AIMaxLevelCalc] * [0.01]. With that, I can see where you get 50% and 37.1% with 130 Skill Level with 260 / 350.
With your value of 260, their proficiency with a bow at 130 bow skill is 50% and at 350 it becomes ~134% (up from 37.1% and 100% respectively). So you're basically giving them a boost across the board. If you changed it to 250, small boost. If you changed it to 150 like another comment was curious about.. oof.. that 'archer' would be operating at ~86.6% prof with that 130 bow skill. Pain.
Exactly. It's subtle but I think it does a good job at making fights more intense. Thanks
Edit: The (0.01) value is the lowest it can go. Not multiplied into the formula. It is the "min" value within the "clamp" function. What is multiplied is the difficulty modifier ("diffmod"), which is around 1. The lower "diffmod" is, the lower the proficiencies.
I have difficulty set to challenging along with this mod. They don't really seem that much harder to fight but maybe its cuz my character is really strong. Was hoping to find a mod that made combat more difficult against ai. How were you able to test it was working and active?
It just alters a number for a ratio calculation. `SkillLvl / 350` becomes `SkillLvl / 260`. I could debug and breakpoint it but that seems excessive. They should be smarter with how they use their weapons and should deal more damage. It's most apparent in tournaments, I think, where you have to 1v1 them in close combat.
For everyone that is using RBM you don't need this, it has already adjust the ai level (this mod use 260 while rbm use 250). It should generally comparable to this mod but I'd advise using this mod since it can be problematic applying 2 mod that patches the same thing.
sorry for bad grammar english edit: nevermind rbm using difficulty level *1 instead of 0.01, so i don't know the calculation anymore...
edit2: gosh Im bad at reading code anyway rbm use this: MBMath.ClampFloat((float)relevantSkillLevel / 250f * difficultyModifier, 0f, 1f);
with its own campaign difficulty modifier instead of vanilla very easy: 0.7 easy: 0.85 realistic : 1
this mod using this: MBMath.ClampFloat((float)relevantSkillLevel / 260f * difficultyModifier, 0.01f, difficultyModifier);
I use chat gpt to compare the 2 mod so bear with me hehe, here's how the 2 mod compare at different skill level
the first function is this mod, it also uses vanilla base difficulty modifier. the 2nd function is RBM, it has its own difficulty modifier (comparable though) but its capped at 1
Spoiler:
Show
Example Calculations for Different relevantSkillLevel ValuesLet's calculate the output for both functions with different relevantSkillLevel values: 250, 100, 50, 330, and 260. Difficulty Modifier for Different Levels:
First Function: The output varies significantly with relevantSkillLevel and is further adjusted based on the difficultyModifier. The clamp ensures that the result stays within a specific range relative to the difficulty.
Second Function: This function normalizes the skill level effect to a 1.0 basis and then adjusts based on the difficultyModifier. It's more straightforward in scaling the effect of skill levels, capping at 1 for higher skill levels regardless of the difficulty setting.
These calculations demonstrate how each function scales with skill level and difficulty modifier, impacting gameplay mechanics such as task difficulty, success rates, or experience gain rates differently.
Anyway it means for this mod the different of skill by the AI would be much visible, ensuring each tier of troops are always guarantee better than their lower tier while for RBM the different in skill is much more uniform, ensuring a comparable skill for each unit, but it also means that for each faction the different is more on their armor and weapon rather than their skill level which is why RBM put emphasize more on their weapon and armor adjustment.
You also feels the difficulty spike much more pronounce in this mod, but it's generally easier unless you plays at realistic settings and in RBM they raise the bar for lower difficulty which means you gonna feel the grind more at lower level as you should, but the difficulty gonna be much more consistent through out each difficulty settings.
what happen if you use both? well you can be sure that higher tier unit is guaranteed to be better than their lower tier exponentially since you also use RBM weapon and armor adjustment. for me this means that it puts more emphasize on reaching the highest tier troops as much as possible, and it can snowball really fast based on the quality of troops.
To each their own, but if you use RBM troop overhaul and DRM which relies only on RBM adjustment you may want to remove this mod since it breaks the troop balance that they're based on.
But if you use other mod that have compatibility for both and they're only adjust their armor and weapon based on RBM you can use this mod, and I even go as far as this would be generally more advisable since the author usually creates their troops on vanilla, then adapting to RBM values, thus it preserves the author intended balance. But then again, that is ONLY if the author did a good job spending hours balancing each troops properly based on their skill level, weapon, and armor.
Thanks for reading my quick analysis of this mod, feel free to correct me if I'm wrong, since english is not my first language, there might be some ambiguous word, sorry for that
That's a pretty intense breakdown. I didn't realize RBM touched this but I'm not surprised.
Anway, my goal was to make AI more effective in a very simple way just based on the vanilla implementation. I used it in my playthroughs and it felt better for me.
I don't use RBM but I imagine if you are going to use both mods then this one should be prioritized otherwise mine won't do anything. If they changed the difficulty modifiers then that would have an effect on my function as well. Not really sure what happens when two Harmony patches Postfix the same method, but since mine returns false I assume that means that no other Postfixes would get triggered afterwards.
That mod increases stats related to AI skills? RBM increases damage based on skill level, is that the case? Or just increases AI behaviour and moving speed?
Basically all NPC hit chances, block chances, damage, and probably some other things like target acquisition are determined by (lvl / max level). By decreasing max level in the calculation they just get a very general buff across the board. I'm not exhaustively sure of everything it determines though.
Is it possible to tune to a lower maximum level. If 260 is 50% is is possible to tune to around 66% almost double starting prof, so the value would be around 150 to 160?
It's possible but not something I'm interested in doing. The source code is on Github linked in the description if you're interested in learning how to do that yourself
To be honest you're better off just plopping the mod in your list and trying to play the game. It's not going to break your save or anything. If it works it works, you'll know pretty quick.
I have not tested or played Bannerlord recently but I kinda doubt this mod will ever break.
It should, since running speed = some form of (Athletics Lvl) / (Max Athletics Lvl), and this mod decreases the value for (Max Athletics Lvl) as well as for every other stat.
As for how much their speed increases it depends on the specific troop and the difficulty you're playing on.
Whatever you did troops seem more aware, and its the little things like turning around to the player even when occupied, and pursuing with the shield held up, and being better fighters. Working on 1.1.5. I'm curious what exactly did you do to tune the ai
Yes it works with RBM. At the very least most of it. I didn't see anything in their code that affects the same function. To be safe just load this after theirs and/or turn on their vanilla block/parry/attack option.
28 comments
With your value of 260, their proficiency with a bow at 130 bow skill is 50% and at 350 it becomes ~134% (up from 37.1% and 100% respectively). So you're basically giving them a boost across the board. If you changed it to 250, small boost. If you changed it to 150 like another comment was curious about.. oof.. that 'archer' would be operating at ~86.6% prof with that 130 bow skill. Pain.
Anyway, very nice mod. Yoink.
Edit: The (0.01) value is the lowest it can go. Not multiplied into the formula. It is the "min" value within the "clamp" function.
What is multiplied is the difficulty modifier ("diffmod"), which is around 1. The lower "diffmod" is, the lower the proficiencies.
Idk if maybe DLL unblocking is needed -- but I more suspect it's another mod causing whatever issue ur seeing.
They should be smarter with how they use their weapons and should deal more damage. It's most apparent in tournaments, I think, where you have to 1v1 them in close combat.
sorry for bad grammar english
edit: nevermind rbm using difficulty level *1 instead of 0.01, so i don't know the calculation anymore...
edit2: gosh Im bad at reading code
anyway rbm use this:
MBMath.ClampFloat((float)relevantSkillLevel / 250f * difficultyModifier, 0f, 1f);
with its own campaign difficulty modifier instead of vanilla
very easy: 0.7
easy: 0.85
realistic : 1
this mod using this:
MBMath.ClampFloat((float)relevantSkillLevel / 260f * difficultyModifier, 0.01f, difficultyModifier);
can someone explain how does the 2 compare?
the first function is this mod, it also uses vanilla base difficulty modifier.
the 2nd function is RBM, it has its own difficulty modifier (comparable though) but its capped at 1
Example Calculations for Different
relevantSkillLevel
ValuesLet's calculate the output for both functions with differentrelevantSkillLevel
values: 250, 100, 50, 330, and 260.Difficulty Modifier for Different Levels:
- First Function:
- VeryEasy: 0.1
- Easy: 0.32
- Realistic: 0.96
- Default: 0.5
- Second Function:
- VeryEasy: 0.7
- Easy: 0.85
- Realistic: 1
- Default: 1
ForrelevantSkillLevel = 250
:
- First Function:
- VeryEasy: Clamp(0.9615 * 0.1, 0.01, 0.1) = 0.09615
- Easy: Clamp(0.9615 * 0.32, 0.01, 0.32) = 0.30768
- Realistic: Clamp(0.9615 * 0.96, 0.01, 0.96) = 0.92304
- Default: Clamp(0.9615 * 0.5, 0.01, 0.5) = 0.48075
- Second Function:
- VeryEasy: Clamp(1 * 0.7, 0, 1) = 0.7
- Easy: Clamp(1 * 0.85, 0, 1) = 0.85
- Realistic: Clamp(1 * 1, 0, 1) = 1
- Default: Clamp(1 * 1, 0, 1) = 1
Forcsharp
MBMath.ClampFloat((float)250 / 260 * difficultyModifier, 0.01f, difficultyModifier);
csharp
MBMath.ClampFloat((float)250 / 250 * difficultyModifier, 0f, 1f);
relevantSkillLevel = 100
:
- First Function:
- VeryEasy: Clamp(0.3846 * 0.1, 0.01, 0.1) = 0.03846
- Easy: Clamp(0.3846 * 0.32, 0.01, 0.32) = 0.12307
- Realistic: Clamp(0.3846 * 0.96, 0.01, 0.96) = 0.36923
- Default: Clamp(0.3846 * 0.5, 0.01, 0.5) = 0.1923
- Second Function:
- VeryEasy: Clamp(0.4 * 0.7, 0, 1) = 0.28
- Easy: Clamp(0.4 * 0.85, 0, 1) = 0.34
- Realistic: Clamp(0.4 * 1, 0, 1) = 0.4
- Default: Clamp(0.4 * 1, 0, 1) = 0.4
Forcsharp
MBMath.ClampFloat((float)100 / 260 * difficultyModifier, 0.01f, difficultyModifier);
csharp
MBMath.ClampFloat((float)100 / 250 * difficultyModifier, 0f, 1f);
relevantSkillLevel = 50
:
- First Function:
- VeryEasy: Clamp(0.1923 * 0.1, 0.01, 0.1) = 0.01923
- Easy: Clamp(0.1923 * 0.32, 0.01, 0.32) = 0.06153
- Realistic: Clamp(0.1923 * 0.96, 0.01, 0.96) = 0.18461
- Default: Clamp(0.1923 * 0.5, 0.01, 0.5) = 0.09615
- Second Function:
- VeryEasy: Clamp(0.2 * 0.7, 0, 1) = 0.14
- Easy: Clamp(0.2 * 0.85, 0, 1) = 0.17
- Realistic: Clamp(0.2 * 1, 0, 1) = 0.2
- Default: Clamp(0.2 * 1, 0, 1) = 0.2
Forcsharp
MBMath.ClampFloat((float)50 / 260 * difficultyModifier, 0.01f, difficultyModifier);
csharp
MBMath.ClampFloat((float)50 / 250 * difficultyModifier, 0f, 1f);
relevantSkillLevel = 330
:
- First Function:
- VeryEasy: Clamp(1.2692 * 0.1, 0.01, 0.1) = 0.1
- Easy: Clamp(1.2692 * 0.32, 0.01, 0.32) = 0.32
- Realistic: Clamp(1.2692 * 0.96, 0.01, 0.96) = 0.96
- Default: Clamp(1.2692 * 0.5, 0.01, 0.5) = 0.5
- Second Function:
- VeryEasy: Clamp(1.32 * 0.7, 0, 1) = 1
- Easy: Clamp(1.32 * 0.85, 0, 1) = 1
- Realistic: Clamp(1.32 * 1, 0, 1) = 1
- Default: Clamp(1.32 * 1, 0, 1) = 1
Forcsharp
MBMath.ClampFloat((float)330 / 260 * difficultyModifier, 0.01f, difficultyModifier);
csharp
MBMath.ClampFloat((float)330 / 250 * difficultyModifier, 0f, 1f);
relevantSkillLevel = 260
:
- First Function:
- VeryEasy: Clamp(1 * 0.1, 0.01, 0.1) = 0.1
- Easy: Clamp(1 * 0.32, 0.01, 0.32) = 0.32
- Realistic: Clamp(1 * 0.96, 0.01, 0.96) = 0.96
- Default: Clamp(1 * 0.5, 0.01, 0.5) = 0.5
- Second Function:
- VeryEasy: Clamp(1.04 * 0.7, 0, 1) = 0.7 (capped at 1)
- Easy: Clamp(1.04 * 0.85, 0, 1) = 0.85 (capped at 1)
- Realistic: Clamp(1.04 * 1, 0, 1) = 1 (capped at 1)
- Default: Clamp(1.04 * 1, 0, 1) = 1 (capped at 1)
Summary:csharp
MBMath.ClampFloat((float)260 / 260 * difficultyModifier, 0.01f, difficultyModifier);
csharp
MBMath.ClampFloat((float)260 / 250 * difficultyModifier, 0f, 1f);
- First Function: The output varies significantly with
- Second Function: This function normalizes the skill level effect to a 1.0 basis and then adjusts based on the
These calculations demonstrate how each function scales with skill level and difficulty modifier, impacting gameplay mechanics such as task difficulty, success rates, or experience gain rates differently.relevantSkillLevel
and is further adjusted based on thedifficultyModifier
. The clamp ensures that the result stays within a specific range relative to the difficulty.difficultyModifier
. It's more straightforward in scaling the effect of skill levels, capping at 1 for higher skill levels regardless of the difficulty setting.You also feels the difficulty spike much more pronounce in this mod, but it's generally easier unless you plays at realistic settings and in RBM they raise the bar for lower difficulty which means you gonna feel the grind more at lower level as you should, but the difficulty gonna be much more consistent through out each difficulty settings.
what happen if you use both? well you can be sure that higher tier unit is guaranteed to be better than their lower tier exponentially since you also use RBM weapon and armor adjustment. for me this means that it puts more emphasize on reaching the highest tier troops as much as possible, and it can snowball really fast based on the quality of troops.
To each their own, but if you use RBM troop overhaul and DRM which relies only on RBM adjustment you may want to remove this mod since it breaks the troop balance that they're based on.
But if you use other mod that have compatibility for both and they're only adjust their armor and weapon based on RBM you can use this mod, and I even go as far as this would be generally more advisable since the author usually creates their troops on vanilla, then adapting to RBM values, thus it preserves the author intended balance. But then again, that is ONLY if the author did a good job spending hours balancing each troops properly based on their skill level, weapon, and armor.
Thanks for reading my quick analysis of this mod, feel free to correct me if I'm wrong, since english is not my first language, there might be some ambiguous word, sorry for that
Anway, my goal was to make AI more effective in a very simple way just based on the vanilla implementation. I used it in my playthroughs and it felt better for me.
I don't use RBM but I imagine if you are going to use both mods then this one should be prioritized otherwise mine won't do anything. If they changed the difficulty modifiers then that would have an effect on my function as well.
Not really sure what happens when two Harmony patches Postfix the same method, but since mine returns false I assume that means that no other Postfixes would get triggered afterwards.
It's not going to break your save or anything.
If it works it works, you'll know pretty quick.
I have not tested or played Bannerlord recently but I kinda doubt this mod will ever break.
It works. I'm running it with Warbandlord, BEST combat mod, and RBM.
As for how much their speed increases it depends on the specific troop and the difficulty you're playing on.
Only case it wouldn't work is if TaleWorlds updates the specific function I override by changing its parameters or intended result.
works with rbm?
is there a option to turn off ai boost only our troops boost?
And no, this affects all troops.