AI for Framework Mobs


Summary

While working with educational material for The Game Assembly I Took the opportunity to expand the basic behaviours of some mobs I developed and at the same time picking up some additional knowledge of AI. In the two mobs on this page I have used Enviornmental Quary Systems (EQS) to add flexibility to a basic guard AI and I’ve used Animation notifiers to get make animations guide if the player gets hit by a melee enemy.
The Mobs are also used as Mobs in the Spline Controlled AI Boss Scenario

Specifications

  • A ranged Patrolling Guard with Cover Behaviour and EQS

  • A melee Monster using animation notifiers embedded in the animations

  • Created in Unreal 4.21


The Patrolling Guard

The Patrolling Guard is a classic AI and for the students to use such a asset when working on assignment would be useful to the learning process.
While the basic behaviors would not be the most interesting project to set up I decided to make parts of the Behavior Tree use a EQS to generate locations.

For the Guard I also created a patrol point system and a cover point system. The cover point system was in a way created as an assurance if the experimental EQS system did not work as planned. But in the end I could integrate the date from the cover points in the EQS.

The guard has tree main branches: combat, search and a Patrol. While the combat behavior could have been placed in a subtree it has been included in the same tree above.


Behaviour Tree with EQS

While it is still labelled as a experimental feature in Unreal 4.21 the EQS works fairly well. The documentation is somewhat lacking and one has to be prepared do some thinking. I decided to use the EQS for two occasions one what when the Guard panic behaviour kicked in the other was to select new cover points. My reasoning for this was that I wanted to include both the actor pick and the grid based finder of the EQS system. The pictures below show the debug feature of the EQS queries.

The guard had a panic behaviour that used EQS to find suitable positions to hide from the player. In this picture the EQS is calculated from the red dot.

I also used a actor based sorting system of the EQS to find out the most suitable Cover Point. The EQS calculations in this picture is made from the red dot

Additional Work and Debug

The player (foreground) with three guards all in different positions. (Cover, Shooting and well.. almost death)

In order to make the AI a bit more fun I included some animations such as reloading, crouching and death.
With these features added the Guard could work as a rough prototype for a guard.
To make it easier to follow how the cover booking system worked when several AIs were running a simulation at the same time I added some widget debug features on the Guards and the cover points.


Melee Enemy with scripted notifiers

The Melee AI uses a fairly standard behavior and detection. It is roaming around until a player is sighted and the charges for an attack. In order to make it a bit more interesting I scripted in a stun animation that triggers after taking heavy damage. Play testing I noticed that the attack animation was quite slow and in many occasions the player had moved away after the animation was completed. In order to make this more realistic I added Animation Notifiers and scripted the damage to be dependent on the player being close to the blow.

 

The 3 attack animations that triggers the animation notifiers

Notifiers in the animation montage marked with red arrows

And the code of the notifiers giving the player a chance to avoid the impact of the blow after the animation has started


Melee Enemy Behavior

The general behavior of the melee enemy is left intentional quite simple. The point of this is for the users (in this case the students) to have something they can use in a shake and bake setting to try out various designs. The simplicity of the behavior made the melee enemy quite easy to integrate as a spawned enemy in the Spline Boss Scenario.


Conclusion and Lessons Learned

While to AI of the two mobs are not the most complex I still had fun designing and scripting them. The EQS system, with the lack of proper documentation, was the most challenging part but also the most rewarding. If properly implemented EQS can be quite powerful but I definetly think a more thorough profiling than the ones I tried is needed if it is to be used.