Skip to content

Gives the ability to yell on the battlefield. Affects morale of allies and enemies.

Notifications You must be signed in to change notification settings

BUTR/Bannerlord.YellToInspire

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bannerlord.YellToInspire

CodeFactor Code Climate maintainability

Steam Yell To Inspire Steam Downloads Steam Views Steam Subscriptions Steam Favorites

Rewritten several times and server as an example of a gameplay mod.

Several points:

  • The game follows a pattern where an AgentComponent holds a state and the necessary functions to alter the state. CommonAIComponent is an example of that. Other components reference it and alter. We are doing the same, having a state and two AgentComponent that handle AI and Player interactions.
  • From my understanding, the game devs didn't intend to handle Player input in the AgentComponent Tick method, as OnTickAsAI will be triggered on non Player controlled Agents. My workaround is to create a MissionBehavior that checks if the AgentComponent implements IAgentComponentOnTick and calls OnTick. From what I understand, the Player input should be handled in MissionBehavior, but it's inconsistent then with the AI handling.
  • A more interesting way to get MCM settings is to inject a MissionBehavior with a method to get the settings, thus avoiding the static access, which is in general a good thing.
  • HotKey handling via the game intended way is interesting. ButterLib only provides static endpoints, because of that we need Class.Current properties to alter state from the HotKey. The game intended way gives the ability to alter the state directly from the instances of MissionBehavior and AgentComponent.
  • module_strings.xml was really hard to implement. There's a lot of undocumented behavior you need to find to provide localization support fot game provided HotKeys.
  • ModuleInfoHelper.GetModuleByType gives a great opportunity to get the assemblies Module Id without hardcoding it.
  • You need to add _RGL_KEEP_ASSERTS DefineConstants to keep using the MBDebug class.
  • You can't really make your mod 'modder friendly'. I assume that the best would be to make public all classes that expose logic that could be modifiable, mark all properties and methods virtual, replace all private members as protected. I don't think that you should expose implementation detail classes as long as they won't interfere with the abiility to override code.

It has an interesting history. First based on Xorberax's Press V to Yell, then reimagined with Yell To Inspire - New Leadership Perks and Abilities, then ported Yell To Inspire (Updated) and now having an 'enterprise grade rewrite ©' with the addition of usage of MCM.