• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

Amechwarrior

General
9 Badges
Feb 23, 2018
1.863
146
  • BATTLETECH - Backer
  • BATTLETECH - Beta Backer
  • BATTLETECH - Initiate of the Order
  • BATTLETECH
  • BATTLETECH: Flashpoint
  • BATTLETECH: Season pass
  • BATTLETECH: Heavy Metal
I'm working on understanding and improving the AI. My intention is to make the AI act like a good human opponent and provide a base of knowledge so others can tweak the AI as they see fit. This means my own modded AI files (Better AI) will make the campaign much harder, and even possibly unbalanced without further modification to enemy force size and composition. As with any mod, use at your own risk and backup your files. HBS, feel free to crib any of my values or settings. I'd be glad if this mod was made obsolete by a professional deadly AI setting.

Better AI

Better AI 2.0.0 - For BATTLETECH 1.9.1
D/L at /BattletechModders/BetterAI/releases on GitHub

[Mod edit: No unapproved links]


Better AI is a ModTek based mod. Simple ModTek Install Guide. ModTek is found in the BT Modders Collective here: /BattletechModders/ModTek/releases on GitHub
[Mod edit: No unapproved links]
UPDATE INSTRUCTIONS
  • Delete Better AI folder from your BATTLETECH\Mods folder
  • Unzip Better AI in to BATTLETECH\Mods
2.0.0 Changelog:

For BATTLETECH 1.9.1

Uses ModTek 0.7.7.4
Better AI can be used with the HBS mod loader, however DLC content will not be corrected. It's recommended to use this mod with ModTek.

Release Notes:

Better AI 2.0 is a clean slate rewrite using the AI diagnostic tools developed by mpstark and input from Koztaz of "Relentless AI" to further improve the tactical challenge in a stock environment. It's more aggressive, keeps Lances cohesive and is more capable in reserve play with numbers. This mod has been built for and tested with the stock game mechanics. The Better AI Permanent Evasion Add On will still be needed for mods and modpacks that use it. If you are using the BT: Extended, BT: Advanced, please wait for the modpack curators to update to this version. BT: Revised users now have "Relentless AI" from Koztaz already tuned to their modpack.

Feedback is greatly appreciated either in this thread or the various BT discords.

Modpack users: AT YOUR OWN RISK - Copying only the "\data\behaviorVariables" folder from Better AI 2.0 in to your modpacks existing Better AI folder should work with minimal interference. However, this is not recommended.

Better AI Permanent Evasion Add On - No update of Add-On required, will work with 2.0.0 automatically
1.7.0.0 Changelog:

global.json, role_activeprobe.json and role_ecmcarrier added new variables and stock adjustments to ECM field weights.

Better AI Permanent Evasion Add On - No update of Add-On required, will work with 1.7.0.0 automatically


1.6.2.2 Changelog:

global.json
Float_ExistingTargetDamageForOverheatAttack 0.90 from 90.0 - Bug, thanks Dra9o!
Float_MeleeDamageMultiplier 2.75 from 3.0 - Slightly less punchy base AI
Float_EvasiveToHitFloor 30.0 from 40.0 - AI much better at heat control, players more evasive
Float_CenterTorsoRearArmorMultiplier 5 from 10 - slightly higher chance to attack rear
Float_PreferAttackFromBehindHostileFactorWeight 0.5 from 0.4 - slightly higher chance to attack rear

role_meleeonly.json
Float_DFADamageMultiplier 8 from 6 - slightly higher chance to DFA in meleeonly

Better AI Permanent Evasion Add On - No update of Add-On required, will work with 1.6.2.2 automatically.


Changelog for 1.6.2.1:

global.json
  • Float_ConfidenceInSignificantDamageWhileGhostedLevel - Added for 1.6.2
  • Float_WeaponDamageSpreadLerpValue- Added for 1.6.2
  • Float_StructuralDamagePercentageMultiplier- Added for 1.6.2
  • Float_ExpectedAndMaxDamageShootingInGhostStateLerp- Added for 1.6.2
  • Float_GhostStateHysteresisMultiplierTurnIncrease- Added for 1.6.2
  • Bool_ExpectedDamageAccuracyIncrease - Added, set to true
  • Bool_EnableLongRangePathfindingBeActorAware- Added, set to true
  • Float_LongRangeToShortRangeDistanceThreshold- Added for 1.6.2
mechdef_victor_VTR-9S

  • Changed role to unit_role_sniper from brawler to "AC/20 Snipe" like the CP-10-Z

Changelog for 1.6.1.2:

global.json
  • Float_SprintPreferInsideMeleeRangeFactorWeight -1.0 from -1.5 eagerness to close increased
  • Float_SprintExclusionRadius 120.0 from 200.0 eagerness to close increased
  • Float_PreferHostileECMFields 5.0 from 1.5 eagerness to pop ECM bubble greatly increased
  • Float_SprintPreferHostileECMFields 5.0 from 0.5 eagerness to pop ECM bubble greatly increased when sprinting
  • Int_MinimumECMGhostedPipsToFire 1 from 2 allows firing from inside ECM bubble
  • Bool_EnableUrbanBiomeNavigationEverywhere true from false to allow better pathfinding
global_def.json
  • Float_PreferFriendlyECMFields 1.75 added
  • Float_SprintPreferFriendlyECMFields 1.0 added
  • Float_PreferHostileECMFields 0.0 added to null out wanting to stay in hostile bubble while defensive
  • Float_SprintPreferHostileECMFields 0.0 added to null out wanting to stay in hostile bubble while defensive
  • Int_MinimumECMGhostedPipsToFire 2 added and set to stock value to keep stealth when defensive

role_activeprobe.json
  • Reordered listing to flow in global.json order
role_ecmcarrier.json
  • Int_MinimumECMGhostedPipsToFire 2 added and set to stock value to keep stealth when defensive
  • Reordered listing to flow in global.json order
role_ewe.json
  • Int_MinimumECMGhostedPipsToFire 2 added and set to stock value to keep stealth when defensive
  • Reordered listing to flow in global.json order
role_noncombatant.json - FILE ADDED
  • Int_MinimumECMGhostedPipsToFire 2 added and set to stock value to keep stealth when defensive
role_scout.json
  • Float_SprintExclusionRadius 196.0 from 244.0 eagerness to close increased
role_vehicle_def.json
  • Int_MinimumECMGhostedPipsToFire 2 added and set to stock value to keep stealth when defensive
Better AI Permanent Evasion Add On - No update of Add-On required, will work with 1.6.1.2 automatically.

Changelog for 1.6.0.1:

global.json
  • Float_PreferInsideMeleeRangeFactorWeight -0.5 from -1 to allow easier entry to close combat
  • Float_PreferSurroundingHostileUnitsFactorWeight 0.7 from 0.5 to allow better flanking now that "buddy" variables control lance cohesion
  • Float_PreferHostileECMFields 1.5 from 0.3 to increase chance of entering ECM bubble to provide LoS
  • Float_SprintPreferHostileECMFields 0.5 from 0.2 to increase chance of entering ECM bubble to provide LoS
role_activeprobe.json
  • Float_PreferInsideMeleeRangeFactorWeight -0.1 from 0.1 slightly less melee range for AP vehicle
  • Float_PreferLocationsThatGrantGuardFactorWeight 1.5 from 0.5 to match other modded global.json
  • Float_PreferNotSurroundedByHostileUnitsFactorWeight 0.1 added to allow AP unit to enter hostile area to use ping
  • Float_SprintPreferNotSurroundedByHostileUnitsFactorWeight 0.1 added to allow AP unit to enter hostile area to use ping
  • Float_AlonePreferenceWeight -0.8 added and returned to stock value to allow AP carrier to reach enemy to ping
  • Float_PreferActiveProbePositions 1 from 0.5 increase weight to positions they can use ping
  • Float_PreferNoCloserThanMinDistToHostileFactorWeight 0.0 added to allow closer regardless of weapons
  • Float_SprintPreferNoCloserThanMinDistToHostileFactorWeight 0.0 added to allow closer regardless of weapons
role_ecmcarrier.json
  • Float_SprintPreferLowerMovementFactorWeight -1.0 from 0.0 to match other modded global.json
  • Float_PreferLocationsThatGrantGuardFactorWeight 1.5 from 0.5 to match other modded global.json
  • Float_PreferFriendlyECMFields 1.5 from 0.75 to stack tokens
  • Float_SprintPreferFriendlyECMFields 0.5 added to stack tokens
  • Float_SprintPreferHostileECMFields -0.1 added to prevent entering hostile LoS
  • Float_SprintPreferLOSToFewestHostileFactorWeight 0.2 added to prevent entering hostile LoS
role_ewe.json
  • Float_PreferLowerMovementFactorWeight -0.9 added to match other modded global.json
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 2.0 from 0.8 to match other modded scale
  • Float_PreferInsideMeleeRangeFactorWeight -1.0 from 0.0 to prevent enemy entering bubble
  • Float_PreferLocationsThatGrantGuardFactorWeight 1.5 from 0.5 to match other modded global.json
  • Float_AppetitivePreferApproachingRearArcOfHostileFactorWeight 0.1 added to increase weights of staying with Lance
  • Float_SprintAppetitivePreferApproachingRearArcOfHostileFactorWeight 0.0 added to increase weights of staying with Lance
  • Float_AppetitivePreferIdealWeaponRangeToHostileFactorWeight 0.1 added to increase weights of staying with Lance
  • Float_PreferSurroundingHostileUnitsFactorWeight 0.1 added to increase weights of staying with Lance
  • Float_PreferLOSToFewestHostileFactorWeight 1.75 added to keep EWE out of direct fire
  • Float_SprintPreferLOSToFewestHostileFactorWeight 0.2 added to keep EWE out of direct fire
role_vehicle.json
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 4.5 from 3.8 for more aggressive vehicles
mergeDef_mechdef_urbanmech_UM-R90.json
  • unit_role_sniper from unit_role_brawler

1.5.1.1 Change Log -
  • No Behavior Variables Adjusted
  • LanceDefs Optimized
Major New Feature:

LanceDef's have been partially optimized to fit the appropriate types of pilots in to the best suited 'Mechs. I'm limiting this to two units per Lance to preserve variety. You should see more of the heaviest unit pulling Bulwark in mixed tonnage Lances, more Gunners and Defenders in Battle Lances and at least one Tactician in a Scout Lance. All vehicles have had their potential pilots culled of skill sets they cannot use, primarily the Guts track.

Massive credit goes to scJazz who came upon the initial idea.

Minor New Feature:

This mod now loads after cFixes and Z_Sab_JK_RarityTables to allow them to apply their basic JSON overwrites first and then Better AI's Lance and 'Mech Tags on top of the modified files. If you encounter any merging issues with these or other mods, let me know.

Better AI Permanent Evasion Add On - No update of Add-On required, will work with 1.5.1.1 automatically.

1.5.0.1 Change Log -

  • Removed Sniper Dynamic max of 75% (This is now the stock value, thanks HBS!)
  • Aligned merge files to "mergeDef" format and folder structure
Removed settings that are now stock in 1.5.0, adjusted files to standard "mergeDef" format. Moved to JK format versioning to keep pace with game version.

Better AI Permanent Evasion Add On - No update of Add-On required, will work with 1.5.0.1 automatically.

1.4.1 Change Log:


New ModTek Features:
  • Optional Dependency - Thanks to the ModTek crew for implementing my request for Optional Dependencies. Better AI can now detect if cFixes is in your Mods folder and will automatically load after cFixes has been applied.
  • Advanced JSON Merges - Allows Better AI to replace the single unit_role entries inside the mechdef's unit tags. Previously, the entire array had to be overwritten, causing issues with cFixes and other mods.
global.json
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 3.8 from 3.25 - Less afraid base AI
  • Float_PreferInsideMeleeRangeFactorWeight -1.0 from -1.25 Less afraid of melee ranges
  • Float_MeleeBonusMultiplierWhenAttackingEvasiveTargets - Greater multiplier to attacking evasive units with Melee
global_def.json
  • Float_PreferHigherDistanceFromClosestHostileFactorWeight 1.25 from 1.5 - Less retreating when in defensive mode
role_lastmanstanding.json
  • Float_DFADamageMultiplier 3.0 from 2.75 - Slightly more chance to DFA when all is lost
  • Float_PreferInsideMeleeRangeFactorWeight 0.0 From global -1.0 - Last Man isn't afraid to enter melee
role_sniper.json
  • Float_MeleeDamageMultiplier 0.75 from 0.5 - Slightly more weight to punch, I still want snipers to try and run from close combat
  • Float_DFADamageMultiplier 2.0 from 1.75 - Higher weight to just DFA when rushed in to melee range by player units
role_vehicle.json
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 3.8 from 3.5 - Matches new global
  • Float_OptimalAllyDistance 120.0 from 96.0 - Vee's sticking too closely
  • Float_PreferNotLethalPositionFactorWeight 0.7 from 0.8 - Less afraid Vee's
  • Float_BuddyAloneFiringSolutionPreferenceWeight -1.0 From global -0.8 - Gave them the role_sniper weight for seeking lines of fire

1.4.0 Full Change Log -

HBS Dev Comments added to all files

Removed blank files to minimize mod footprint
  • role_brawler_def
  • role_lastmanstanding_def.json
  • role_meleeonly_def
  • role_noncombatant
  • role_noncombatant_def
  • role_scout_def
  • role_sniper_def
  • role_turret
  • role_turret_def
  • skill_reckless
  • skill_reckless_def
Variables Adjusted from Better AI 1.3.3:

CombatGameConstants.json - ADDED
  • "AICritChanceBaseMultiplier": 1.0 from Stock = 0.2 - AI has same Crit Chance as Player
  • "sniperMaxFrac": 0.75 from Stock = 0.5 - Lance can have 3/4th Snipers or 2/3rd Snipers instead of only 2/4 and 1/3

global.json
  • Float_ExistingTargetDamageForOverheatAttack 90.0 from 0.0 - HBS fixed overheating and I didn't have to change this one much from stock
  • Float_PreferLowerMovementFactorWeight -0.9 from -0.7 - Greater Pip building for 1.3 Evasion
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 3.25 from 4.0 - Lowered aggression to increase defensive positioning
  • Float_VentCoolantHeatThreshold 1.99 from 2.1 - Trigger Coolant Vent slightly sooner
  • Int_VentCoolantHealthThreshold 1 from 2 - Old value from when it caused injury, set it to 1 just in case
  • Float_PreferInsideMeleeRangeFactorWeight -1.25 from -0.5 - AI needs to fear a player operated HTC
  • Float_SprintPreferInsideMeleeRangeFactorWeight -1.5 from -0.7 - AI needs to fear a player operated HTC
  • Float_PreferLocationsThatGrantGuardFactorWeight 1.5 from 1.4 - Greater tree hugging for 1.3 damage reduction
  • Float_SprintPreferLocationsThatGrantGuardFactorWeight 1.5 from 1.25 - Greater tree hugging for 1.3 damage reduction
  • Float_BulwarkThresholdPercentage 0.0 from 80 - Nullified old Bulwark logic
  • Float_OverkillThresholdLowForRearArcPositionFactor 40 from 50 - Lowered acceptable levels to promote rear protection
  • Float_OverkillThresholdHighForRearArcPositionFactor 60 from 75 - Lowered acceptable levels to promote rear protection
  • Float_PreferLethalDamageToRearArcFromHostileFactorWeight -2.0 from -1.75 - Increased fear of units behind AI
  • Float_MinimumSensorLockQuality 55.0 from 60.0 - Slightly larger chance for non-scouts to Lock
  • Float_OpportunityFireExceedsDesignatedTargetByPercentage 20.0 from 25.0 - Returned to Stock value
  • Float_PreferStationaryWhenHostilesInMeleeRangeFactorWeight -0.75 from -0.5- AI needs to fear a player operated HTC
  • Float_PreferAttackFromBehindHostileFactorWeight 0.4 from 0.3 - Small bump to attacking the rear arc
  • Float_SprintPreferLOSToMostHostilesFactorWeight 0.2 from 0.3 - Small dip to lower being an easy sprint target
global_def.json
  • Float_PreferLowerMovementFactorWeight -1.0 from -0.5 - Greater Pip building for 1.3 Evasion
  • Float_CoolDownRange 200.0 from 100m - Get further away before trying to cool down
  • Float_PreferInsideMeleeRangeFactorWeight -1.3 from -1.0 - AI needs to fear a player operated HTC
  • Float_SprintPreferInsideMeleeRangeFactorWeight -1.75 from -1.0 - AI needs to fear a player operated HTC
  • Float_PreferLocationsThatGrantGuardFactorWeight 1.8 from 1.5 - Greater tree hugging for 1.3 damage reduction
  • Float_SprintPreferLocationsThatGrantGuardFactorWeight 1.5 from 1.25 - Greater tree hugging for 1.3 damage reduction
  • Float_BulwarkThresholdPercentage 0.0 from 85 - Nullified old Bulwark logic
  • Float_PreferLethalDamageToRearArcFromHostileFactorWeight -2.5 from -2.0 - Increased fear of units behind AI
  • Float_SprintPreferLethalDamageToRearArcFromHostileFactorWeight -2.5 from -2.0 - Increased fear of units behind AI
  • Float_PreferLOSToFewestHostileFactorWeight 0.6 from 0.5 - Increase LoS break while defensive
  • Float_SprintPreferLOSToFewestHostileFactorWeight 0.8 from 0.6 - Increase LoS break while defensive
global_sensorlock.json
  • Float_PriorityMovePercentage 0.0 from global = 100.0 - ADDED - Trying to let Lock pilots move where it is safe, not rush at the target
  • Float_PreferInsideMeleeRangeFactorWeight -1.3 from -1.0- AI needs to fear a player operated HTC
  • Float_SprintPreferInsideMeleeRangeFactorWeight -1.75 from -1.0 - AI needs to fear a player operated HTC
  • Float_SprintPreferLocationsThatGrantGuardFactorWeight 1.5 from 1.0 - Greater tree hugging for 1.3 damage reduction
  • Float_PreferHigherDamageReductionLocationsFactorWeight 1.0 from global = 0.5 - ADDED - Greater tree hugging for 1.3 damage reduction
  • Float_SprintPreferHigherDamageReductionLocationsFactorWeight 1.0 from global = 0.5 - ADDED - Greater tree hugging for 1.3 damage reduction
role_lastmanstanding.json
  • Float_OwnMaxLegDamageForDFAAttack 0.99 from 0.9 - Slightly larger DFA window
  • Float_DFADamageMultiplier 2.75 from 2.0 - Slightly higher chance of DFA
  • Float_PreferNotSurroundedByHostileUnitsFactorWeight 0.4 from 0.5 - Slightly less afraid of being surrounded and fleeing
  • Float_SprintPreferNotSurroundedByHostileUnitsFactorWeight 0.4 from 0.5 - Slightly less afraid of being surrounded and fleeing
  • Float_PreferLOSToMostHostilesFactorWeight 0.2 from 0.0 - Slightly less afraid of being surrounded and fleeing
  • Float_SprintPreferLOSToMostHostilesFactorWeight 0.1 from 0.0 - Slightly less afraid of being surrounded and fleeing
role_meleeonly.json
  • Float_SprintExclusionRadius 96.0 from global = 200 - ADDED - Lets AI sprint to melee
  • Float_PreferInsideSprintExclusionRadiusHostileFactorWeight 1.0 from global = 0.0 - ADDED - Lets AI sprint to melee
role_scout.json
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 3.0 from 2.0 - Less afraid behavior
  • Float_PreferOptimalDistanceToAllyFactorWeight 0.2 from 0.1 - Stay slightly closer to Lancemates
  • Float_MeleeBonusMultiplierWhenAttackingEvasiveTargets 0.5 from 0.0 - Slightly more likely to punch opposing scout units
  • Float_BulwarkThresholdPercentage 0.0 from 30 - Nullified old Bulwark logic
  • Float_OverkillThresholdHighForLethalPositionFactor 95.0 from 90.0 - Less afraid behavior
  • Float_OverkillFactorForReserve 60.0 from 50.0 - Greater chance to reserve
  • Float_PreferSurroundingHostileUnitsFactorWeight 1.25 from 1.5 - Stay slightly closer to Lancemates
  • Float_SprintPreferSurroundingHostileUnitsFactorWeight 1.5 from 1.75 - Stay slightly closer to Lancemates
  • Float_PreferNotSurroundedByHostileUnitsFactorWeight 0.3 from 0.5 - Less afraid behavior
  • Float_SprintHysteresisRecoveryTurns 2.0 from 1.0 - Less afraid behavior and chained sprinting away from combat, returned to Stock value
  • Float_PreferStayInsideFenceNegativeLogicFactorWeight -5.0 from -3.0 - Stay slightly closer to Lancemates
  • Float_SprintPreferStayInsideFenceNegativeLogicFactorWeight -1.0 from -0.5 - Stay slightly closer to Lancemates, returned to Stock value
  • Float_FenceRadius 120.0 from 168.0 - Tighter Fence to enforce staying close to Lancemates
  • Float_MinimumSensorLockQuality 25.0 from 30.0 - More frequent Sensor Locks
  • Float_BuddyAloneFiringSolutionPreferenceWeight -0.8 from -0.4 - Stay slightly closer to Lancemates, returned to Stock value
  • Float_BuddyAloneMoveNearbyPreferenceWeight -1.2 from -0.6 - Stay slightly closer to Lancemates, returned to Stock value
  • Float_SprintBuddyAloneMoveNearbyPreferenceWeight -0.8 from -0.4 - Stay slightly closer to Lancemates, returned to Stock value
  • Float_SprintPreferHigherDistanceFromClosestHostileFactorWeight 0.3 from 0.5 - Less afraid behavior
  • Float_PreferLOSToFewestHostileFactorWeight 0.2 from 0.4 - Less afraid behavior
  • Float_SprintPreferLOSToFewestHostileFactorWeight 0.4 from 0..5 - Less afraid behavior
role_sniper.json
  • Float_PreferLowerMovementFactorWeight 0.8 from 0.0 - Greater Pip building for 1.3 Evasion
  • Float_DFADamageMultiplier 1.75 from global = 1.4 - Greater chance of sniper "freaking out" and DFA when rushed, still pretty rare
  • Float_PreferInsideMeleeRangeFactorWeight -1.5 from -1.0 - AI needs to fear a player operated HTC
  • Float_BulwarkThresholdPercentage 0.0 from 80 - Nullified old Bulwark logic
  • Float_PreferStayInsideFenceNegativeLogicFactorWeight -4.0 from -3.0 - Stay slightly closer to Lancemates
  • Float_FenceRadius 168.0 from 192.0 - Tighter Fence to enforce staying close to Lancemates
  • Float_PreferHigherRangedDefenseBonusLocationsFactorWeight 0.0 from global = 1.0 - ADDED - Stay out of shot killing Crystal Fields and other tiles
  • Float_BuddyAloneFiringSolutionPreferenceWeight -1.0 from 0.0 - Increase odds of return fire from beyond LoS to support Lancemates
  • Float_BuddyAloneMoveNearbyPreferenceWeight -0.6 from -0.8 - Lower odds to enter LoS in support of Lancemates
  • Float_PreferAttackFromBehindHostileFactorWeight 0.2 from 0.1 - Slightly higher odds for rear attack
  • Float_PreferLowerRangedToHitPenaltyLocationsFactorWeight 1.0 from global = 0.0 - ADDED - Try to avoid shot ruining tiles like Crystal Fields
role_vehicle.json
  • Float_PreferLowerMovementFactorWeight 0.9 from 0.7 - Greater Pip building for 1.3 Evasion
  • Float_PreferHigherExpectedDamageToHostileFactorWeight 3.5 from 2.5 - Less afraid behavior
  • Float_OptimalAllyDistance 96.0 from global = 168.0 - ADDED - Vehicles stick to Lancemates tighter
  • Float_PreferOptimalDistanceToAllyFactorWeight 0.3 from 0.2 - Vehicles stick to Lancemates tighter
  • Float_PreferLethalDamageToRearArcFromHostileFactorWeight -2.0 from -0.5 - Increased fear of units behind AI
  • Float_SprintPreferLethalDamageToRearArcFromHostileFactorWeight -2.0 from -0.5 - Increased fear of units behind AI
  • Float_SprintPreferHigherDistanceFromClosestHostileFactorWeight 0.4 from 0.3 - Stay out of melee Range
  • Float_PreferLOSToFewestHostileFactorWeight 0.1 from global = 0.0 - ADDED - Small bump to stay out of LoS
  • Float_SprintPreferLOSToFewestHostileFactorWeight 0.3 from global = 0.0 - ADDED - Small bump to stay out of LoS
role_vehicledef.json
  • Float_PreferLowerMovementFactorWeight -1.0 from -0.8 - Greater Pip building for 1.3 Evasion

1.3.3 Release Notes:
  • For BATTLETECH 1.3.2
  • Global -
  • Added new 1.3 variables, kept levels stock for now
  • Adjusted overheat threshold to stock (Stock is now 1.99 from 2.6, Better AI was 1.9)
  • Made some Reserve weight adjustments to let near dead units reserve less

1.3.0 Release Notes:
  • For BATTLETECH 1.3.0
  • Global - Added "k" : "Bool_AllowAttack", to allow 1.2.0 compliance

1.2.0 Release Notes:
  • For BATTLETECH 1.1.2
  • Float_FenceRadius adjusted to increments of 24 to match dot pitch across all files
  • Global -
    • Increased protecting rear arc from -1.5 to -1.75 and -1.5 to -2.0 sprint, slightly less chance of moving where rear is exposed
    • Lowered point multiplier for rear armor counting from 15 to 10, more rear seeking attack weight
    • Increased melee multipliers from 2.5 to 3 for normal and braced targets
    • Bulwark % increased from 75% to 80%
    • Lowered opportunity fire chance from 30% to 25% (20% stock) to let AI take more opportunity shots on vulnerable, but not primary targets
    • Increased need to not be alone from -0.8 to -1.2 for slightly better chance lone unit will fall back and regroup with Lance
  • Defensive Mood -
    • Lowered overkill threshold for reserve from 90 to 80, defensive units less likely to reserve if expecting heavy fire
    • Increased Melee Damage Multi from 2.5 to 3.0
  • Last Man Standing -
    • Increased Melee Damage Multi from 3.0 to 3.5
  • Scout -
    • Bulwark allowed, if rarely, set to 30%
    • Increased fear of melee range from -0.8 to -1.0
    • Enabled Melee Bonus Multiplier when attacking Braced targets, from 0.0 to 1.0, overall Scouts should still not want to melee, but can break Brace a little more frequently
    • Lowered overkill threshold for reserve from 100 to 80, Scouts less likely to reserve if expecting heavy fire
    • Set sprint hysteresis recovery from 0.0 to 1.0 (2.0 stock) to allow on/off sprint and deny endless sprinting
  • Vehicles -
    • Bool_RewriteNonAttackMoves reverted to stock "True" as precaution against stuck convoys, not like they can Brace anyway
1.1.0 Release Notes:
  • For BATTLETECH 1.1.1
  • Overheat levels rebalanced - Lets more units fire up to heat capacity with enough restraint for sensible overheat/shutdown on vulnerable targets, overall more dmg/round
  • Sensor Lock vs. firing adjusted toward fire by 5 across the board, global to 60, scout to 30 (global stock = 35)
  • Bulwark up by 5 to 75 global
  • Defensive Mood - Increased fear of heat generating dots from -0.3 to -0.6, AI was sheltering in Rad.Crystals on Lunar, lowered sprint exclusion radius to 100m and increased melee damage weight from 2 to 2.5
  • Scout - Increased base reserve by 5 to 80, increased likelihood to move less from -0.9 to -1.5
  • Vehicle - Defensive mood tuned for vehicle specific considerations
  • Lastman - Added lowered conservative shot value for more "panicked" firing

Initial 1.0 Release
Major changes to these behavior .jsons:
  • global/brawler - Wants to grant LoS to many enemies, deal damage and break Bulwark with melee
  • global_def - Defensive mood for all units, should be more aggressive than stock
  • sniper - Wants to stay high and out of sight for fire support, will DFA more readily if closed on
  • scout - Flanks to the sides and seeks out rear arcs, provides Sensor Lock if able
  • sensorlock - Mood sets defensive posturing when using Sensor Lock
  • vehicle - Flee from melee range, deal damage, not able to reserve by default
  • meleeonly - Amped up stock config that seeks out melee attacks
  • lastmanstanding - Will do anything to take someone down with it and moves to more defensive areas
Role reassignments for 'Mechs:
  • AWS-8Q - Sniper changed to Brawler
  • ENF-4R - Brawler changed to Sniper
  • LCT-1M - Scout changed to Sniper
  • QKD-4G+5A - Both Brawlers changed to Scouts
  • SHD-2D - Brawler changed to Scout
  • UM-R60 - Brawler changed to Sniper
  • ZEU-6S - Brawler changed to Sniper
For detailed .json changes see google chart below.

Massive thanks to Mpstark for making ModTek and helping me with that side of the mod. Also, a thank you to everyone who has helped provide feedback along the way here going back to beta!
Link to Stock+Modded AI Variables Google Sheet

Better AI is a ModTek mod that improves the enemy AI and acts similar to a human player. The AI can reserve, will use cover/terrain more intelligently and utilize the dynamic roles to a greater extent. The AI will pose a greater challenge than stock, but not insurmountable in our experience. I've done my best to make the AI as tactically proficient as I can. It should make less dumb moves overall. I'm always looking for suggestions on how to make it better, please post your opinions in this thread.

Mpstark, the creator of ModTek, is helping me with that side of the mod. Currently, other than the behaviorVariables folder the AI's .jsons reside in, the mod also edits some of the mechdef files to reassign dynamic role tags (like setting the UrbanMech from Brawler to Sniper) for better unit profiling. Going forward I'm excited to be working with him in exploring how far we can change the AI.

Better AI Add-Ons

Permanent Evasion Add-On:


Download Better AI - Permanent Evasion Add On 1.9.1 (For BATTLETECH 1.9.1 +)
On github @ Amechwarrior/BetterAI-Permanent-Evasion-Add-On/releases


This optional build is for the Permanent Evasion mod, forks of that mod and modpacks that use them. It changes the "k" : "Float_PipStripAttackProbabilityThreshold", variable that lets the AI know if an attack with strip a Pip or not, set to "1.0" or false. It also removes the threshold for conservative shots threshold.

This add-on is setup as an advanced JSON merge to Better AI and should not need to be updated along side the base mod any longer.


AI Modding Help:
Most, but not all of the AI's behavior variables are stored in the folder:
"BATTLETECH\BattleTech_Data\StreamingAssets\data\behaviorVariables"
These .json files can be read and edited in nearly any text editor, but I would recommend Notepad++ with some kind of compare feature added on.
[Mod edit: No unapproved links]
Most of the variables are defined as either "float ," integer," or "Boolean" value and changing them will affect how the AI weighs that variable.

  • Float - A numerical value with decimal point "1.1"
  • Integer - A numerical value with no decimal points, a whole number. "1"
  • Boolean - True or False
For example:

/* Influence Factor Weight for preferring moving less. */
"k" : "Float_PreferLowerMovementFactorWeight",
"v" : {
"type" : "Float",
"floatVal" : -0.5,

This float variable is the weight of how much the AI will want to move less. Making the number a larger negative value will give more weight to moves that go farther, and thus generate more Evasive Pips. Making the number a positive value will do the opposite and make the AI want to stay closer to where it is. Setting any value to 0.0 may cause it to be ignored entirely by default.

Usually, most values will be somewhere between 0.1 and 1. A +/- 1 is usually a very strong value, very few values reach as high as +2. Some variables work in meters or as a percentage out of 100 and they are noted in the comments.
huSVGqi.jpg

Link to Stock+Modded AI Variables Google Sheet


I've listed every single variable in the behaviorVariables folder along with HBS's comments and arranged the active and inactive files beside the default global.json and unused.json. Feel free to copy or download this file for your own AI modding needs. I plan to use it by inserting a new column for a modded global.json next to the stock so I can easily compare my changes to the default and any other files.

global.json + global_def.json


The global.json describes the default decision weights for all AI. When the AI is in a defensive mood (see moods below) it will pull on the global_def changes before the base global.json. Below in the spoiler field are my notes on the variables in beta, while the values have been changed and a lot have been removed, most of this still applies.

unused.json

This is a listing of unused variables that can be pasted in to the global, or another valid behavior file and once set to a non-zero value, become an active weight in the system. I'd like to thank HBS for including these as it greatly expands our modding potential.

role_XXXX.json

There are at least 6 active dynamic 'Mech role files in the game, each with its own defensive mood file ending in "_def" which is a blank file. These roles can be adjusted on the fly, changing as needed based on the unit_role_xxxx tag. Each mechdef contains just one role, and all units can pull brawler if others are filled. The Brawler role is effectively the default role of the AI and the global.json has been setup to reflect the Brawler fighting style with wanting to enter melee range and other adjustments. This ensures in a fallback situation, the AI will hunt down the players units and engage.

  • role_brawler (blank)
  • role_scout
  • role_sniper
  • role_meleeonly
  • role_noncombatant (blank)
  • role_lastmanstanding (blank)
The role_flanker, role_spotter and role_suppression have been flagged as depreciated. Most of them like role_meleeonly, activate when you would expect. In that, case it takes over from the 'Mechs previous role when it has no more ranged weapons, including support weapons. The role_lastmanstanding overwrites all other roles when the 'Mech is the last of its Lance, even with other Lances in play, but is currently blank. Turrets and vehicles do not have a dynamic role but are assigned static ones appropriately. The turrets file is blank, and honestly I can't find anything I'd change in one anyway. Role_noncombatant is found on the various APC vehicles but the AI file is blank.

For example, in the Atlas' mechdef there is a listing of its tags:

"MechTags": {
"items": [
"unit_indirectFire",
"unit_mech",
"unit_assault",
"unit_release",
"unit_ready",
"unit_lance_tank",
"unit_role_brawler"
],

The "unit_role_brawler" is the tag to let the game know to use the role_brawler.json to before default values. In this case, the file is blank. The default global.json is effectively the brawler role and brawler is also the default role mechs fall back to. Some roles also have a limit to how many units may pull a certain role. For Brawlers and Snipers, this is found at the end of the CombatGameConstants.json:

"DynamicAIRoleConstants":
{
"hysteresis": 0.1,
"brawlerMinAbs": 0,
"brawlerMaxFrac": 1.0,
"brawlerTagMultiplier": 2.0,
"sniperMinAbs": 0,
"sniperMaxFrac": 0.75,
"sniperTagMultiplier": 2.0
}

We can see that anything tagged brawler or sniper has those tag weights doubled, where the "scout" role isn't managed by this multiplier system. The min/max should mean that no more than 3/4 of an enemy force can be using role_sniper.json at any one time. This means even if the entire enemy force is GRF-1N's, they won't all jump away and PPC snipe you forever, as one of them will pull brawler and close to contact.

The scout role emphasizes skirting the edges and surrounding the enemy, while lowering the values for melee related variables. The sniper role emphasizes staying put and shooting targets over the default closing to melee range. You can have up to 3 Scouts in a Lance, but 4 will force them all in to Brawlers and almost never return.


AI PERSONALITY + FACTION

These AIPersonality .jsons seem to be active but unused at this time. All faction files are empty and I do not know the variable needed to declare them. The AI Personality variable can been seen in the pilotdefs:

"AIPersonality": "Undefined",

I have not done any testing with either factions or personalities. I'd expect personalities to work if declared.


AI MOODS

The five moods are:
  • Aggressive
  • Defensive
  • Sensor Lock
  • Undefined
  • Ruthless (1.1 addition)
Aggressive is the default mood and will use the normal .json files. Defensive will trigger the use of the .jsons ending in _def like "global_def.json" before the default global. The individual role_def are all blank and global_def.json is basically the entirety of the defensive mood. The global_sensorlock.json is used when the AI has the right ability and chooses to Lock a target. It's mainly concerned with where to move the unit that is going to Lock. The Ruthless mood is new to 1.1 and it removes most terrain and self preservation weights to focus on dealing damage to the single priority target. I don't know if this is used at this time in certain missions, likely a WIP.
I discovered in beta that the AI would always move units in the same order unless a unit was knocked over or shutdown. The current AI still mostly follows this, but it is able to jump queue in some situations. This is most readily apparent in Skirmish vs 4 medium 'Mechs all in Phase 3. Watch for the last one to act and strike it with everything you got and make it unsteady. It will be the first to act in the next round, if you do nothing, the round after this it will go back to moving last if it is no longer unsteady. If an AI unit is Fallen, Shutdown or Unsteady they will move first in that phase. If you have multiple AI units in those states, they will move in order of "Fallen > Shutdown > Unsteady" and multiple units in the same state will follow the normal cue as if they were standing. The AI doesn't consider being on the verge or death a condition to move first. So you can can have an AI unit with 1 CT remaining wait its turn nicely until it is time to move.
\BATTLETECH\BattleTech_Data\StreamingAssets\data\debug\settings.json
"aiLogCacheWriteImmediate": true

Will generate a ton of useful files in the "...\BATTLETECH\AI_Logs" folder in Windows. This is new to 1.1 and probably the easiest to read as the files are separated by individual turns and not one long continuous log file.

Alternate Logging:

Adding these three variables to the global.json and changing them to "true" will leave a set of AI dump files in "...\BATTLETECH\AI_Logs" for you to dig through. You can also turn on the other logging options in the debug folder, but most of that is duplicated here.

{
/* Whether to log influence map calculations. */
"k" : "Bool_LogInfluenceMapCalculations",
"v" : {
"type" : "Bool",
"boolVal" : false,
}
},
{
/* Whether to log influence map calculation profiling
information. */
"k" : "Bool_ProfileInfluenceMapCalculations",
"v" : {
"type" : "Bool",
"boolVal" : false,
}
},
{
/* Whether to log behavior tree logic. */
"k" : "Bool_LogBehaviorTreeLogic",
"v" : {
"type" : "Bool",
"boolVal" : false,
}
},
BATTLETECH\BattleTech_Data\StreamingAssets\data\debug\settings.json

add lines:

"TestToolsEnabled" : true,
"PlayerOneIsAIControlled": true,
"PlayerTwoIsAIControlled": true,


just above the

"disablePhysicsOnLoad": true,
"disableLoggingOnLoad": true,

Save the file. Big thanks to GUD and FlukeyFiddler on discord for figuring out how to get AI vs. AI in skirmish mode. This also works in PvP:

Huge thanks to Best Girl on discord! So, we did some testing and with a shared debug/settings.json the AI can play over the network. Both players need those statements and the host will automatically be controlled by their local AI files. The guest doesn't need to have altered their behaviorVariables at all. This allows two different AI to fight each other.
 
Last edited:
Thank you good Sir. :bow:

I appreciate all you have done above and all the many, many iterations that lay behind it. I look forward to whereever you have the time and opportunity to take us in the future. : )
 
So, with still more than a month to go, I'm finally getting around to messing with the dynamic 'Mech roles. Currently I've got Brawler, Sniper and Scout built from scratch and probably enabled them all via the combatgameconstants. This .zip will need to be dropped in to your /data folder directly. It will overwrite your combatgameconstants! It is just the same as the AMP modded one with some lines at the very end. The behaviorVariables folder gets a new global.json and the associated brawler/sniper/scout roles. I only just stared messing with this last night, so I don't really know much about what is or isn't working. I've just thrown the relevant variables in to each role and set them very high for testing. Once I know WTF is going on with it, I'll do a write up on how this works. If anyone else wants to do their own testing and exploration, go ahead as I could use the help and another set of eyes on this. I'm getting a error in the output log about the scout variables in the combatgameconstants, but it seems to kind of work anyway.

USE AT OWN RISK - UNTESTED FILES AND SETTINGS - FOR EXPERIMENTAL USE ONLY WITH BETA 2

Dynamic Mech Roles
 
Last edited:
I've enabled some of the AI logging options inside the global.json that give me some new info compared to the debug logger. I can see the "Mood" a unit is in each time it activates and what role that unit has. However, what I am looking for is where the game chooses which role to assign a unit. I don't know if this is a complete listing but here is what I have found so far:

Beta 2 Dynamic 'Mech Roles
  • Brawler
  • Sniper
  • Scout
  • LastManStanding
  • Hysteresis (?)
Beta 2 Unit Moods
  • Aggressive
  • Defensive
  • SensorLocking
The dynamic role "LastManStanding" activates when the unit is the only one left, but the role file is blank. Hysteresis is called on in the global.json as a "sprint from combat function", but doesn't seem to have a file associated with it. I've not seen Hysteria appear in an AI log yet. I believe it is in the program and working as I've seen the AI make those kinds of "Run away!" moves a number of times. The Moods are referenced in the global.json with options to turn the AI to always offensive or defensive, but exactly how these moods change behavior isn't visible to us yet. If you have a pilot with Sensor Lock, the SensorLocking mood is likely to appear if it is also in a lighter unit or one tagged as "scout" and acts accordingly. I've done some testing with the Heavy Support Lance, as all 4 pilots are in sniper tagged units and all have Sensor Lock. The JM6 pulls the sniper role, and all others get Brawler, even with "sniperMaxFrac": 0.7 and sometimes the PNT will be in a Brawler/SensorLocking mood and it will Lock some of the time if your global.json is set to a very low positive value. I had the AWS-8T pull a Brawl/Lock combo one round and it did lock, but oddly it was actually not a bad move all things considered. It ended up dropping Evasion on one of my units and the PNT took shots at it in the next round before it could act. If the AWS was to shoot instead, it would not have had very good shots and would have ended up just gaining heat or losing ammo.

My sniper role build seems to work as I intended, with the units moving back and away from combat, while still providing fire support. However, a unit like the JM6-A with AC/2 + LRMs likes to hide behind mountains and lob LRMs only, losing out on some damage potential. The brawler is almost suicidal in it's drive to the players units and this will still need tuning. Really, the smart thing to do would be move the brawler build in to the global, as it's the default role anyway and let sniper/scout overwrite what they need to. The scout role is working alright, but is the hardest to test so has been left for later.
 
Hysteresis is not even remotely the same thing as hysteria. Look it up.

Generally speaking, in an AI I'd expect it to work against the AI "changing its mind" every turn by making it prefer what it was doing before... no idea how that concept made it into a variable related to sprinting, though.
 
Hysteresis is not even remotely the same thing as hysteria. Look it up.

Generally speaking, in an AI I'd expect it to work against the AI "changing its mind" every turn by making it prefer what it was doing before... no idea how that concept made it into a variable related to sprinting, though.
Thanks, I had no idea. I'm hitting problems right now with getting the variables in the combat constants to stick. They define how many in a Lance get each role. I'm trying to make a UM-R60 act like a sniper, but it keeps rushing to braw,l as it draws a brawler tag. I even tried setting a sniper tag multiplier to x10 and couldn't get my Urbie to pull sniper role even with the other 3 units in pure brawlers. I did change the tag from the default brawler on the UM-R60, but the AWS-8Q I changed from sniper, to brawler, picks up the new tag just fine without any modifications on the brawler settings. I might have to edit the tag DB, but then if that was true, I don't know why the AWS-8Q pulled my edited brawler tag just fine.
 
Hmm... yeah. Since we don't really know how the code uses the DB, in the long term we should get in the habit of always keeping it up-to-date whenever we change something that's stored in there.

As far as the current issue, since Brawler seems to be the default role I wonder if the code is falling back to that simply because the JSONs and the DB are inconsistent. That could explain what you're seeing.
 
Quick question. Is the design goal optimal AI play like a clever human opponent, or to simulate how mechwarriors would think and act in-setting?

I ended up going for challenging human opponent that knows the game is set to skirmish, so DFA's are a bit high. In later builds I also tuned it to try to at least deal some massive damage before losing, DFA higher again... The recent dynamic role test is mainly just a way to familiarize myself with the system in case it's been cut for launch but still there in the background waiting for dev time/money in an expension or modders like me to pick up the slack as a project in the mean time. I tuned things like DFA and suicidal bloodlust down in the base files as my plan was to activate them back on when there is only 1 unit remaining and they take the "Last Man Standing" role by default.

If I were to make them act like "real" MW with only one life and one machine, they'd end up running away after the first few hard hits and that wouldn't be much fun. I wanted a greater challenge as I found even 4 Atlas vs. 15m too easy after a while.
 
If I were to make them act like "real" MW with only one life and one machine, they'd end up running away after the first few hard hits and that wouldn't be much fun.

That is true. Still, there ought to be some element of self-preservation instinct somewhere to aid with the immersion factor? Perhaps some randomization to shake things up a bit, where some percentage of the time they take a suboptimal but realistic move.
 
That is true. Still, there ought to be some element of self-preservation instinct somewhere to aid with the immersion factor? Perhaps some randomization to shake things up a bit, where some percentage of the time they take a suboptimal but realistic move.
I left in some, like it will still take a round to run away or make a purely defensive move if you severely damage it, but don't finish the kill.

Overall my goal was to get the AI to at least deal some meaningful damage to my team as I got better at handling each successive AI build.
 
If you are consistently steamrolling any nonoptimized AI, it's probably worth asking how much of the problem is on the strategic/management side compared with the tactical side. Are you being matched with appropriate challenges?
As we only have skirmish beta, that's limited. But 15m vs 4 atlas w/4 bulwark pilots isn't too hard, just either time consuming and lose no one, or I will lose one unit if I do a quick end via brawling.
 
Personally I would be satisfied if the AI would largely stop making moves I consider a blunder. From what I've seen in the streams that means:
  • skirmishers and scouts should maintain high evasion even if that lowers their to-hit percentages
  • mechs with a single LRM-5 like Vindicator and Kintaro should not think of themselfs as LRM-boats and hurl indirect fire from second line. I guess that extends to other mechs like the Atlas as well. Not every LRM-mech should behave like a Catapult.
I'm curious about your thoughts on what the chances are that a JSON mod can fix this. Also what do you think of the AI compared to the skirmish beta? As far as I can tell it now can use Sensor Lock well enough but I don't think I've seen it using Reserve.
 
Personally I would be satisfied if the AI would largely stop making moves I consider a blunder. From what I've seen in the streams that means:
  • skirmishers and scouts should maintain high evasion even if that lowers their to-hit percentages
  • mechs with a single LRM-5 like Vindicator and Kintaro should not think of themselfs as LRM-boats and hurl indirect fire from second line. I guess that extends to other mechs like the Atlas as well. Not every LRM-mech should behave like a Catapult.
I'm curious about your thoughts on what the chances are that a JSON mod can fix this. Also what do you think of the AI compared to the skirmish beta? As far as I can tell it now can use Sensor Lock well enough but I don't think I've seen it using Reserve.

I've already fixed the KTO skirmish before I moved to dynamic mech roles. I prioritized the "Get to optimum range" and lowered my previous "Stay out of minimum range" values and it works to keep a CPLT out of LRM min, but lets the KTO close to brawl. I've seen streamer LCT-1M's make very good and bad calls. Sometimes they move back to stay in optimum range and out of LoS, other times they rush to brawl and do nothing. But, it's fixable.

High Evasion is HARD. Set too high and units like the SDR or FS9 jump everywhere and enter combat already overheating. It also makes the AI jump more with other units, lowering their acceptable firepower from the heat. I made it a bit better from beta, but it's still not what I want, I hope some new AI variables can help me. Right now there is a "Move less" value that I set to a larger negative value to increase the distance the AI wants to move. With most pilots capped at 4 or 5 Evasion, it might be better to favor woodlines and just plain being out of LoS for those lighter units. One Sensor Lock and that 4 Evasion light is down to 2 and it's over for them if they are taking full damage from a 3 unit volley. A smart player will quickly learn to save the big guns for last, as with 2 Evasion, the 3rd shooter gets to fire vs. a flatfooted light.
 
So, posting some thoughts before launch:

AI mods will take some time, don't expect day 1 AI mods unless you can accept broken missions/campaigns.
  • We don't know how all the AI combat variables will affect objective based missions we see in SP. What if increased lethality leads to convoy vehicles trying to fight even more than they do now? What if increased defensive weights makes assassination missions unwinnable by maximizing rushing to extraction? Is simply making the AI better enough to make 4-5 skull mission not profitable for anyone through raw volume of fire? We need to know stock better before we can dive in to make it better.
We don't know how scripting and waypoint orders will affect the AI.
  • So even if you improved the AI in up-front combat, how will that play with patrol routes, scripted events and other spawning tools needed in SP missions? This will also take more time to learn how to handle.
I'll be out of action most of May.
  • I got real life work crap going on for basically the whole month. I'll get maybe a week to play the game and I don't plan on trying to put out anything before I know more about the gamut of difficulties. I'll likely have phone data, but not a lot of free time.
  • Others can pick up the torch. While I've been the only one on the HBS/PDX forums posting AI mods, why not everyone take a crack at it? I'd love to come back and find others are doing what I did, but better.
  • Post your builds/troubleshooting/questions/etc here and I'll update the OP once I'm back as a kind of AI variables basics and links to various AI builds.
Good Luck everyone and enjoy the game!
 
Any thoughts on what Bool_RewriteNonAttackMoves does? "If my move would not result in being able to fire, should I rewrite that move as a sprint?"

Does making that true prevent the AI from using brace in out-of-LOS situations? On the other hand, if it were false, would it mess with escape sprints?
 
Any thoughts on what Bool_RewriteNonAttackMoves does? "If my move would not result in being able to fire, should I rewrite that move as a sprint?"

Does making that true prevent the AI from using brace in out-of-LOS situations? On the other hand, if it were false, would it mess with escape sprints?

Back in beta 1, sprinting gave Evasion, which back then gave a flat 50% dodge chance to all attacks. It was way OP, but that variable makes sense in that context. In my beta modded AI I turned that off to increase the move>brace actions, as with sprinting, the AI would just get S Locked and killed with no protection.
 
So, I'm still away but have access to the jsons I emailed myself and am working on an excel sheet to make comparing the variables between roles and global easier.

In addition to the base, Brawler, Sniper and likely Scout dynamic roles can be called on. But I haven't had the time to confirm this. Personally roles might not be active either.