Ekaya & Pebbles

Embark on an adventure as a brave girl who befriends a magical creature made of rocks that can transform into a powerful gauntlet, granting her telekinetic abilities. Together, you must purify an enormous colossus from parasitic rocks and restore peace to its home.

This was our seventh game project on The Game Assembly where we used our own DX11 custom game engine.

My contributions

My main contribution to this project was to create AI and behavior for our enemies. My initial goal when taking the responsibilities of creating the ai was to use some sort of pathfinding and navmesh. This quickly changed because of our level layouts not really needing pathfinding. Although our levels didn’t have that of a complex layout I still wanted to create something more interesting instead of just an enemy that moves toward the player. This led me to create a Context Steering system that could be used across all of our enemies.

Enemies

Context steering is a technique used in game development to control AI movement by collecting data around the AI and then using a solver to determine its direction of movement. This technique uses different steering behaviors such as obstacle avoidance and target chasing to make game characters move more naturally by combining them depending on weight.

What is context steering?

I created a base class for different behaviors and detectors that only consists of a virtual function for usage when collecting data around the enemy. All controllers for different enemy types store the behaviors and detectors they want to use, their AI data, and their context solver which does the final calculations.

The detectors use ray casts and sphere casts to gather data about the environment such as other close enemies, obstacles, and targets. This data is then passed into the Context Solver with its behaviors to be calculated using two arrays of 8 floats (interests and dangers) containing the dot product between the target or obstacle and all of the directions around the AI. These two arrays are then used to determine the final output vector that AI uses as its movement direction.

My Inplementation

First Iteration

Improved With Boiding

FINAL