
Role:
Gameplay | AI Programmer
Enemy Behavior Designer
Project Type:
Academic Project
Date:
Aug 2022 - Apr 2023
Skills:
AI Programming | Behavior Systems
Team Collaboration | Role Awareness
Team Size:
11
Project Description:
Chlorofell is an Isometric Shooter developed in a custom game engine, where I served as Gameplay and Enemy Behavior Programmer.
My primary role involved the implementation of advanced AI systems, including Behavior Trees, A* Pathfinding, Flowfield Pathfinding, and Terrain Analysis.
This project aimed to create an engaging isometric shooter experience with challenging AI opponents.
Contributions:
Developed player mechanics with physics-based projectiles, interactive reload, and explosive effects using C++.
Designed and implemented enemy AI behaviors with behavior trees.
Integrated A and Flow Field pathfinding* with terrain analysis.
Integrated Art Assets and implemented a custom component system to handle sprite sheets in a the custom engine, enabling efficient rendering and asset management.
Challenges:
It was my first project with multiple disciplines so there was a learning curve for understanding what their roles were.
We were working on creating a custom engine while simultaneously developing a game.
Accomplishments and Lessons Learned:
I realized how important it was to know what everyone on the team does and how they’re expected to contribute to the project. This was an idea I wanted to bring into my next team project: To make sure I had at least a basic idea of each role and how things work.
I set out to learn about enemy AI and methods to improve them.
I implemented A* and Flowfield pathfinding for different enemy types.
I applied boids techniques like separation to keep entities separated.
I implemented custom behavior trees:
My last project showed me that finite state machines are not very scalable.
I decided to learn new methods for creating and implementing enemy behaviors.
All enemy agents in this project use behavior trees.
Many of these techniques turned out to be taxing on performance, so I had to learn techinques for optimizing the algoritms.
One such technique I learned was multithreading however, that often would not be enough.
I had to learn more about data structures and understanding wich ones where appropriate to use for specific algorithms.