Overview:
For this project, I was lead designer and engineer on a team project to develop a ranged enemy AI. I worked with 5 designers and 6 engineers to solve the needs of creating an engaging combat experience for the players of Valkyrie Quest.
Specifications:
Behaviors:
- Has a default idle state.
- Has Unreal AI Perception component to detect player presence.
- Has an aggro state during which the AI is actively pursuing/attacking the player.
- Enters aggro state when the ray cast to the player is uninterrupted and is within the sight radius of the AI.
- Returns to default idle when the AI loses sight of player (object is interrupting ray cast from the enemy to the player).
- Has health variable as determined by the design team.
- Takes damage from the player when hit by player attacks/abilities.
- Enters death state at 0 health and de-spawns.
Attacks:
- Primary attack within a variable range of distance as determined by the design team.
- Ranged attack inflicts damage on player character by amount controllable by a variable as determined by the design team.
Movement:
- Movement limited to the navigation mesh placed by the design team.
- Movement has adjustable speed controlled by a variable as determined by the design team.
- Has two options for movement: moving within its navigation mesh, or remaining stationary while looking in a specific direction
- Jumping away from the player when too close to the player – if jumping is available, otherwise, moves away based on speed variable.
Process:
- Brainstorming with team.
- Gray box enemy to include initial mechanics.
- Feedback from playtesting data and iteration.
- Refinement to prototype stage.
- Continued iteration and feedback.
- Final integration into the game.
1. Brainstorming with team.
Meeting with the combat design team, we discussed the option of creating an enemy that would help make combat more interesting. This resulted in the initial creation process of the skeleton ranged AI to help create variation in our combat game.
Please excuse my terrible draws, but these were the notes taken for our combat team meeting.
2. Gray box enemy to include initial mechanics.
We created this flow chart to organize the flow of logic for the initial creation of the AI as discussed with the combat team.
3. Feedback from playtesting data and iteration.
After finishing the gray box, the designers took the character and conducted playtests on the AI and found a few bugs.
- Would jump a second time while in the midst of a jump.
Analysis of the behavior by following the flow of logic revealed this was a timing issue in a branch of the behavior tree. The wait timer (time before behavior tree progresses) on the jump back mechanic was too short and increasing the time corrected the issue.
- Ranged attack was damaging the other enemy AI.
The playtesters were using this to their advantage and having the skeleton kill the other enemy AI for them. To correct this we added a check to the collision handler ensuring the player was being collided with and not a friendly AI. - Jumping off of cliffs and out of navigation meshes.
Adding a ray cast starting at the end point of the jump pointing downward allowed to the AI to check if the point would still be on the same navigation mesh, allowing for the AI to determine if it would be falling off a cliff or bumping into a wall. If the ray cast failed the skeleton would select another point on the navigation mesh and run there instead of jumping.
4. Refinement to prototype stage.
After iteration and playtesting the skeleton was ready for the finalized assets such as animations and creating/modifying the VFX – adding these awesome pieces of work to the AI really brought this new enemy to life.
5. Continued iteration and feedback.
After finishing the prototype and the designers conducting more playtests, there were more bugs found.
- Rotation felt jarring and to snappy.
Removing the rotation node from the behavior tree and added it into the AI Controller to allow for a smooth and constant rotation to face the player. - The player was getting hit twice with the ranged attack.
The ranged attack inherited from a base projectile class which had a collider that was also being triggered on impact. Removing the ranged attacks collider and using the parents instead corrected this issue.
6. Final integration into the game.
We are proud of the final product.
The Awesome Team!
Angeling Cruz-Yen – Art Director & Environment Artist & VFX Artist
Val Ross – Creative Director & Character Artist
Joe Brace – Environment Artist & Lighting Artist
Oak Thaloengpong – Environment Artist
Ebony Bryant – Concept Artist & Character Artist
Elena Rasskazova – Rigger
Cody Johnson – Lead Animator
Blake Johnson – Animator
Josh Bechtol – Animator
Suzanna Jelsema – Composer/SFX
Lindy Plunkett – Technical Lead & Gameplay Programmer
Dustin Keplinger – Producer & Gameplay Designer & Gameplay Engineer
Quinn Beierle – AI Engineer & Gameplay Engineer & Gameplay Designer
Ted Sharygin– AI Engineer
James Doolittle – AI Programmer & Level Designer
Casey Rogers – Design Director & Level Designer
Nate Borger – UR & UX
Laurel Darling – Combat Desginer
Jaden Corrado – Level Designer