Unity - C#
For final year project of my BSc, I proposed a combat AI system using 'Utility'. I put an extensive amount of time and effort into the project, as can be seen in the depth of the final outcome and the awarded grade of 91%
My aim was to develop a functional model video game AI system, composed fundamentally of physical, rational and emotional layers, that allows for broader range of ‘emergent’ gameplay situations through variable behaviours, whilst retaining a designers authorial control through an appropriately presented interface.
What I did:
Over the nine months of the academic year, I extensively researched current games AI techniques, and was drawn Utility, a system by which data is converted into normalised and comparable values called 'weights' used to inform behaviour.
In particular I began to orbit the work of developer and academic Dave Mark: his adaptation of Utility beyond simple weighting into a system that incorporate a series of new design patterns was compelling.
Building on this, I revised my initial design into method that processed game state through a number of re-usable 'Considerations' that inform 'Reactions'
Process game state and turn into contextual information; "which enemy is closest to me, and how close?" for example. These pull data from an agent's sensor cache, and also factor in an agents emotional state. They return a Utility object with weight and rank that allow them to be compared which each other in context.
Evaluates considerations to inform it's own utility, as well as finding the best subject to use in it's performance. For example, the 'Engage' reaction evaluates considerations that inform the agent not only if it should fire, but who at.
I also provided a layer of state in the agent to track emotional response to in-game stimuli, like landing hits on an enemy or coming under-fire. These were processed by the perception layer and read by considerations.
Whilst not without it's flaws, my system proved more than functional and facilitated the expression of emotional changes in an agent, with evaluation subjects reading fear and aggression.
How I did It
The entire project was built with C# inside of Unity 2017, across a large but manageable and extensible code-base. Wherever possible I made use of Polymorphism through a base UtilityEvaluation class from which Considerations and Reactions where derived.
I also built supporting systems, such as cover objects, in addition to a replay system that recorded the state of a play-through as a JSON file for the observer to paste into the accompanying questionnaire.