The latest version of the mission tracker has been overhauled, the implementation has been converted from a Blueprint object into a C++ class. Now that the system is written in C++ this provided a great opportunity to use an observer pattern approach. The system is notified by the GameMode when a mission actor has been interacted with by the player. Using this pattern also greatly simplified the system's complexity. The mission log has been split into two logs, an active and complete mission log. Missions themselves can now be unlocked once prerequisite missions have been completed.
The AI has had additional behaviours and improvements made, without going into great detail to avoid writing a large post I'll just cover them on a high level. The basic enemy combat behaviours have changed the most since the last post. If the enemy is to find and move into cover to attack the player there are two actions they will undertake. The first is aiming and firing their weapon at the player, the second is crouching behind the cover to protect them from the player. On the back end, several of the AI's behaviours, such as locating and moving to cover has been moved from Blueprint to C++ functions.
A new system has been implemented to handle weapon accuracy and projectile spread, although this is still in a prototype stage the results are promising. Now each weapon has an optimal range, which means that all projectiles will hit a target that is within the cross hair on the HUD although due to the spread could end up somewhere within the cross hair. Once the player starts trying to hit a target beyond the optimal range, the chances of hitting the target accurately becomes reduced. The second change to the weapon handling is that the cross hairs displayed on the HUD are based on the weapons/characters skeletal mesh movement, so if the player is running or jumping the cross hairs will move more than if stationary.