During my study abroad in Germany, I had the opportunity to enroll at Hochschule der Medien's Games Technology program which gives a comprehensive overview of the commonplace tools and practices in the games industry. For this project, I was assigned to the engineering department and contributed in optimizing the enemy behavior and designing the state machine.
Set in ancient Greece, Orpheus focuses on the myth of Orpheus descending into the underworld to save his wife from death. Players must delve into the dark caves of Hades' realm and use sounds to find their way through levels while avoiding enemies. However, players will need to be smart as noise will attract unwanted attention. Distractions, careful planning, and wise positioning are vital to the player's continued survival.
I had the honor of working with many talented and diverse individuals from around the world including Germany, Spain, Finland, and the Netherlands. This full-scale project was accomplished by combining our artistic specialties in graphic design, sound engineering, user experience, game design, and programming.
idle state machine code snippet
machine learning in Unity
The main goals for the first milestone meeting was to become acquainted with the workflow of the project as this is my first experience working on a scalable game project in a group setting. First was picking the development team I wanted to work in for the semester. I was conflicted between choosing GFX and ENG since I wanted to improve my skills in blender modeling, but I my primary study is in computer science so I felt it was more appropriate to stay within my field. Hence, I joined the engineering branch since I had some experience with artificial intelligence at my home university (Oregon State University).
The first task was getting oriented with the workflow and the tools necessary for working on the project such as Unity, Confluence, Jira, etc. Next was getting familiarized with the Unity Engine which I had some experience with working on independent projects. For a majority of our group, this was our first time attempting to implement a self learning AI into unity, since the initial idea was to use it to learn the path the player takes every iteration. Therefore, we initially found MLAgents, an open source Unity add-on, to work best for this purpose.
After following the tutorials and individually creating small scale samples of the AI agent learning to reach a destination point, we began development for the showcase prototype for Milestone 1. For this prototype, I was tasked in creating the test maps which was made using Unity's built-in Probuilder tool. The initial map featured two levels which was found to be unnecessary since the AI agent only floated (no change in the z-axis) and can not go up stairs. This was resolved following a group meeting and was promptly changed to be a single floor with some obstacles and platforms for the agent to navigate.
For the second milestone, our main goal was to optimize the agent to prioritize sound waves and the player. Several meetings were scheduled with the Game Design and Engineering department so these requirements can be clarified. This phase is where we discovered the challenges of using AI since the agent needs to hear its surroundings. Since there can be multiple sources of soundwaves (water droplets, groaning from other monsters, throwing rocks, etc.) we needed a way for the agent to prioritize certain waves created by these sounds. This was done by using a camera attached to the agent and track where the sound orbs are being generated. Most of my time during this development interval was spent training the AI to track and approach these orbs. Nevertheless, training this method would prove difficult since the agent still moves erratically despite the number of iterations simulated.
After the previous milestone showcase, our group discovered that machine learning is simply too complex for the objective our game aims to achieve. Therefore, we decided on a state machine approach where the enemy cycles through a set of waypoints, goes towards a distraction, or chases the player. I was tasked with the idle state when the enemy was passive and patrolling the area. For this milestone, I developed the tools that control, for placing the waypoints, how fast the enemy moves to a new waypoint, and how long they pause at each waypoint. In addition, there was involvement with making preparations for media night such as playtesting the beta build with QA, recording interviews, and helping management with miscellaneous tasks.
The main challenge our group has faced was figuring out what tools we should use to implement the machine learning idea without much guidance as the individual who initially proposed the idea has left the project. My next challenge was learning how to collaborate/communicating with other members on Unity and reading what their code does before I implement my own to make sure I didn't break anything. Then there was adjusting to a new work environment and culture as a student from abroad.
Most communication was held within the engineering/AI teams as we had to frequently had to merge our work such as merging the sound wave shaders from ENG with our AI to detect them. I kept constant contact with our group head to update what tasks what have been done, what needed to be done, and questions on how it's done. Also talked with game design regarding inquiries about the requirements of the enemy AI and then there was QA who generated feedback to ensure it behaved as intended.
Overall, I'm satisfied with how the project turned out and how our group overcame the challenges that were faced in developing the enemy AI. If anything, I learned more about myself and my own capabilities in game development applied computer science. Some things I can improve is actively consulting with team members and asking more questions about the feature requirements since I'm too used to working on solo projects. Another is expanding my knowledge and getting more experience with the unity engine as this is the first time working on a project with set standards. Finally, I'm honored to be granted this learning experience and the opportunity to work with talented and passionate people in this field.