I think my AI-mod is now complete enough for me to consider it releaseable.
The current version can always be found here:
https://github.com/Xilmi/OpenXcom/releasesThis mod is forked from OXCE and provides a few new options both for modders as well as for players themselves.
All the while being compatible with every mod that is also compatible with OXCE.
Installation-guide:
https://www.youtube.com/watch?v=fV4VGWHe5zgAs the name suggests, the new options are primarily centered around AI and in particular about making the AI more difficult to beat.
There's one non-optional-change to how manufacturing works:
An item in the workshop-queue will only use workshop-space when either at least one engineer is assigned to it or production has already been started. This allows you to queue a lot of items to produce one after the other without granting any advantage to parallel production.
Here's a list of all the new options and what they do:
Geoscape:"
Aggressive retaliation" => This option existed before but was slightly modified. In addition to it's previous functionality of allowing all UFOs to potentially discover a base, it changes the behaviour of UFOs on a retaliation mission in a way that instead of searching the base near pre-programmed areas in a big area around the actual position of the base. This fixes an issue that allowed for better or worse to almost completely avoid base-defense-missions when putting bases in certain locations that weren't anywhere near the search-areas of the corresponding region. The radius of the area being searched is approximately 2670 km.
"
Enhanced dogfight behaviour" => When enabled, as soon as you start shooting the UFO, you can only use max-distance or retreat when your craft is actually faster than the UFO. Otherwise the UFO will try to keep you within it weapon-range. The main impact this has, is that you can no longer kill every UFO as soon as you unlock the plasma-craft-gun or other weapons that outrange-the UFO with standard interceptors. You either need to bring several to deal enough damage until it gets in range of their own weapons or need faster craft.
Battlescape:"
Realistic accuracy and cover system" => Feature developed by Joy Narical and merged into Brutal-OXCE. Find the full documentation here:
https://github.com/narical/openxcom-accuracy"
One-click grenade priming" => When enabled has the following effect: "You can no longer select the amount of turns after which grenades shall explode. The timer will just be set to 0 without having to pick a value."
AI:"
Brutal-AI" => This is the name-giving core-feature of this Mod. It includes an almost complete rework of how the AI determines what to do. All enemies can see and attack what anyone on their team sees. Not only that, they can even change the order in which they operate, so that for example a spotter will wait for other aliens to act first before it decides to continue looking for enemies or to hide again. It will generally try to maximize damage-output when attacking and is very capable with using grenades. A lot of bugs in the basic AI are fixed with enabled brutal-AI. (For example arcing-shot-prediction-bug) Those bugs were deliberately not fixed in the base-AI to keep it behaving exactly as it is. An exception are bugs in the "pick up items"-code, as that's also optional for base-AI.
"
Brutal AI option-preset" => An attempt to reduce overchoice by providing some presets for the other options.
There is a total of 5 presets:
1> Advanced tactics disabled, Aggression and intelligence inherited
2> Aggression and intelligence inherited
3> Static aggression and predictable
4> Dynamic Aggression and unpredictable
5> Cheating
"
Brutal AI for neutral forces" => If a map features a third faction, you can let them be controlled by Brutal-AI too. If it's civilians all that'll do is make them hide a little better. If it's Space-Marines they now may actually prove worthy allies.
"
Brutal Brutes" => This allows you to configure whether less intelligent units that don't have an inventory should also be controlled by Brutal AI. Some have said that having a rat or zombie act in the most efficient way was immersion-breaking. So units like that can their brains now have reverted to their previous state. Note that manually setting these units to brutalAI in their respective *.rul-files will overrule these settings. This way modders have the control to make specific units smart regardless.
"
Allow AI to use explosives on turn one" => Ignores all turn-delays for items that may be set in mods. By default only blaster-launcher and grenades are concerned. But it would also overrule other turn-limits.
"
Bug hunt mode for Brutal AI" => Since the basic-AI also is cheating, Brutal-AI does so as well by default. This option allows to disable AI-cheating and makes a massive difference in perceived difficulty. When enabled the AI knows where all of your units are all of the time. But it only uses this knowledge for movement-purposes. It will not shoot at your units without first revealing them. It will, however, take this information into account when deciding where to move. Disabling this means the AI has no clue where your units are and will start randomly scouting the map until it sees one. When it sees one temporarily that then moves out of vision, unlike the base-AI it will not know where it went, only where it was. It will then either check or fire at this position and then consider the unit it saw there gone. It will also update that knowledge once it sees the unit somewhere else.
"
Allow Brutal-AI to pre-prime grenades" => Isolated AI-units that have nothing to attack will prime their grenades to then be able to use it later for a much lower TU-cost compared to only priming it when it has a target for it.
"
Brutal AI avoids proximity-grenades" => If enabled units controlled by Brutal AI will recognize when there is a proximity-grenade on their path and avoid stepping on it. Not working for units with maximum aggressiveness.
"
Spread out" => Units controlled by AI will deliberately avoid standing too close to each other in order to reduce the impact of explosives.
"
Weighted randomization" => The scores that are used for decision-making of the AI are multiplied with a random factor in order to reduce predictability.
"
Performance optimisation for huge maps" => Normally the AI will pathfind for the entire map and also remember line-of-fire and vision for all it's units in the entire map's range. Now this will be toned down when the amount of tiles on the map times the amount of enemies exceeds that of a 60x60x4 with 30 enemies. With this option massive maps like 120x120x10 with 115 enemies become kinda playable again.
"
Targeting behaviour for Brutal AI" => There's 4 different behaviours which kinda act as a difficulty-level the default is 3.
1 => As for the base-AI, the AI-units can only attack what they can see themselves.
2 => AI units can also attack whatever any of their friends see.
3 => AI units will remember locations of player-units they've become aware of and use blaster-launcher-weapons against them.
4 => The AI goes into hard-core-maphack-mode and can now attack everything it has a line-of-fire to without the need for vision. It is completely ridiculous and I don't really recommend using this.
"
Aggressiveness-mode" => This replaces the old "Inherit aggression"-toggle and has a total of three options for now:
0> Static aggression. => Uses the value of Enemy aggressiveness or Autoplay aggressiveness respectively and sticks to it for all units.
1> Dynamic aggressiveness. => AI-controlled units dynamically adjust their aggressiveness based on their morale. The thresholds are:
>= 100 => 4
>= 83 => 3
>= 67 => 2
>= 50 => 1
<50 => 0
This change shall lead to more dynamic and less predictable behavior without having to introduce randomness.
"
Enemy aggressiveness" => There's 3 different options to choose from:
0 => Fears the outdoors and values cover over anything else. Won't peak and try to set reaction-traps instead.
1 => Values being in good cover over advancing towards the enemy.
2 => A balanced approach between moving forward and being in cover.
3 => Like 2 but unless it has made contact in the current turn, it is forced to end their turn closer to the supposed enemy-location than where it started.
4 => Always move forwards without any sense of self-preservation.
"
Intelligence-mode"
0> Static intelligence.
1> Inherit intelligence from unit-intelligence
2> Inherit intelligence from difficulty-level.
"
Static intelligence"
Chance to make a smart move instead of a random one:
0> 0%
1> 20%
2> 40%
3> 60%
4> 80%
5> 100%
Internally there will be a random roll of 0-5. Whenever the value of the roll exceed the intelligence of the enemy, they will move to a random reachable tile incase their TUs are still full or skip moving alltogether if they already spent TU in this turn. So at an intelligence of 0 the unit will always act randomly whereas at an intelligence of 5 it will never act randomly.
"
Automated combat" => Hands the control of even your own units to the AI. Warning: That's a bit experimental and might not produce the results you desire. Can be toggled on and off during your turn in Battlescape by pressing ctrl+a.
"
Autoplay aggressiveness" => Same as Enemy aggressiveness but for your own units in auto-play. Note that an aggressiveness lower than 3 might stall and not always advance. Especially the lowest setting.
"
Sneaky AI" => This was not changed in how it works. It prefers going longer paths over paths that are visible to the enemy. It was just move to this new category because it fits here.
Extended:"
Fog of war" => When enabled any tile that was previously visible to the player but currently isn't will now be drawn in the selected fog of war color.
"
Select fog of war colour" => Values from 1 to 15, each representing a different shade colour. Hint: 1 and 6 look good.
"
Smart ctrl-click and auto-equip" => Ctrl-clicking items in the loadout-phase will prefer slots that are faster to reach. The off-hand will be deprioritized if the main-hand holds a two-handed item. Auto-equip uses the same logic.
Features for Modders:All the features for brutal-AI can also be enabled separately while the player themselves has disabled them. This way modders can customize the experience as they with for their players.
The files to edit for that is "units.rul"
You can add the following:
"
isBrutal" (true/false)
"
isCheatOnMovement" (true/false) (equivalent to omniscience for brutal-AI)
"
aiTargetMode" (equivalent to Targeting behaviour for Brutal AI)
Note: If "Inherit unit-aggression" is enabled, the Aggression-stat of the unit will be used. However, if the aggression-stat is 3 and above, it will map to Aggressiveness 3. The maximum aggression via inheritance can only be achieved with the LeeroyFlag. This is because in some mods a lot of units use aggression-values of up to 8, which otherwise would all map to a pretty bad and non-competitive behaviour.
If both the mod and the player use brutal-AI-options but they differ, the higher one will be used. For example: You set "Brutal AI" enabled with "Omniscience" and target-Mode 2 and the Mod has it enabled but no omniscience but target mode 3, the unit will use target-mode 3 and omniscience.
If asked to describe how using this mod with default-settings (ignore-grenade-timer/brutal/omni/preprime/3) increases difficulty, I'd say when we quantify difficulty with the kill:death-ratio for soldiers, I'd say it's about 5 times more difficult. Especially early-on with basic gear and especially when the enemies have access to explosives.
If you want to combine this with other mods that increase difficulty, I recommend to tone it down and maybe use the non-cheating-variant and fire-mode 2. Unless, of course, you are ready to suffer or really, really good at this game.
Major Milestones:2.0.0: Movement-logic completely rewritten to be much more efficient and comprehensible.
3.0.0: Inclusion of auto-play, allowing the possibility for player-controlled-units to be controlled by the AI.
4.0.0: Consideration of all possible attack-options of all equipped weapons. Including walking closer to increase accuracy or use melee-weapons.
5.0.0: Prediction of enemy-movement and taking it into account for decision-making.
6.0.0: Using a heat-map to quantify danger and being aware of potential support from allies when deciding how brave to be.
7.0.0: The AI is now capable of weighing self-preservation against attacking making it less likely for them to end their turn exposed when decent cover is nearby.