Assassin's Creed Valhalla - AI Tech

As a gameplay programmer, I specialized mostly in AI systems, and as such, did quite a bit of feature development of underlying systems which designers used to build concrete features. As the central part of our mandate on fight was to both build more varied and unique archetypes, in addition to building more of them, we had to push our AI tools in quite a few areas.

Target Prediction

  • Built a flexible system used by NPCs to try and move to the target’s predicted position, rather than their current position.
  • Settings were adjustable to create the sense that some archetypes were ‘smarter’.
  • Dramatically cut down on the amount of data required for correct navigation completion distance as relative speeds between enemy and target are handled by system (previously they needed to be manually entered).

AI Framework Improvements

Was responsible for the majority of the development on our Goal Oriented Action Planner (GOAP) on Valhalla.

  • Responsible for guiding and performing feature development.
  • Worked with tools team to improve development tools and debug information for end users.
  • Performed end of project optimization on the system.

Fighter Custom Updates

A simple, yet extremely powerful framework for writing custom code which would only be run on select archetypes. This was an essential piece for some writing some of the more ‘exotic’ behaviors for some archetypes while keeping the overall execution cost to a minimum.

  • System was design to facilitate custom code for either an individual, or for a coordinating a whole group
  • 11 different types of updates were made by the team. Examples of a few of the updates I made include:
    • ‘Volley shot’ which was originally designed for the ringleader volley shot, but was flexible enough to be used for the pyro and Vicelin boss fight.
    • 'Archer Priority Monitor' which limited the number of archers allowed to shoot at the player and gave priority to archers who were close and on camera.
    • ‘Fighter Relative Position’ which was written for the kinsmen so they could know how they were positioned relative to their fight target (i.e. defensive unit in front, split, etc).
    • ‘Enter Fight Realization’ selected the best person to play some realization when entering fight if appropriate. Served as a lightweight replacement for our existing realization system which was causing performance issues with the larger scope of the project.

Melee Positioning and Pacing

  • Created a new abstraction layer for our existing pacing system which helped to build data more efficiently and reduce the number of inter-archetype bugs while still respecting the existing data.
  • Improved the reliability and performance of the standard navigation task used to approach a target for a melee attack.
  • Developed tech to help reduce issues we were seeing with congestion and blocking when a large number of enemies were in melee at the same time. This was a multi layered approach which involved things like penalizing paths that obstructed other NPCs all the way to allowing someone else to take your ‘turn’ if obstruction was unavoidable.

Technical Director Design

As we did not have a TD on the fight team, part of my roll on the team was to fill that gap.

  • Prepared and ran trainings and video tutorials for designers ramping up on the fight system.
  • Worked with designers to create guidelines for best practices for building data efficiently.
  • Primary point of contact for debugging assistance.
  • Performed larger scale data cleanup and optimization for data.
  • Managed the ‘base planner’, which was the AI shared between all archetypes.