Game Development

Dont Fail the Course

Release Date: April 2022

Technical Lead/C# programmer

- The game is a basic dungeon crawler set in high school, where players progress through the 9th grade by completing tasks such as solving math problems or battling characters like Shakespeare.
- As technical lead for the project, I guided less epxerienced programmers, assigned tasks based on urgency and skill level. As well as tested commited code.
- Developed an enemy AI with Patrol, idle and an Attack state (With different types of attacks), customizable for diverse and dynamic gameplay encounters.

About the game:

The game is a dungeon crawl where the player is in the shoes of a high school student in the 9th grade completing various tasks to finish the grade. There are 4 subject rooms and a final boss room, where each subject room has them either fighting enemies or trying to solve puzzles/math equations.

AI System:

One of the features I'm most proud about is the NPC system. As part of the project it required three types of enemy attacks, basic melee, full melee and range. So I had decided to make a finite state machine (FSM) which would have three main states; walking, idle and attacking.
I started with the walking state where each NPC would be given a randomized walking cycle between a list of given points. By doing so it would give them a feeling of being active in the game and being able/willing to explore the room. It also gave the NPCs an image of a teacher walking through the class to get materials or some other task throughout a given room.
Next I implemented the Idle state to help add variety to the NPC movement system. Upon reaching a walking point the NPC would have a 10% chance to go into the idle state rather than finding the next walking point. While idle they would remain in place for up to 10 seconds before returning to the walking state and choosing the next spot to walk to. This gave them a sense of awareness and as if they would survey the room for the player or other disturbances.
Finally, I built the Attacking state, which handles both a basic attack and a more complex attack depending on NPC type (minion or boss). Both types receive an event notification when the player enters a nearby room, triggering a coroutine that checks player distance every 5 seconds. This ensures NPCs only react to players within a realistic range rather than tracking them across the entire map.
Minion NPCs, upon detecting the player, move directly toward them and commit to a melee attack once in range. Boss NPCs, on the other hand, randomly choose between ranged and melee attacks. Ranged attacks cause the boss to reposition to the farthest point that still keeps the player within throwing range, while melee attacks have the boss close the gap, strike, and briefly retreat before engaging again. This distinction gives each enemy type a clear behavioral identity and encourages the player to think strategically about target priority when entering a new room.

Technical Lead Role:

Early into development I was appointed the lead programmer for the project given my previous experience in Unity and being able to distribute tasks between all programmers on the team. As lead programmer some of my responsibilities included providing feedback and reviewing the other programmers on the team. The process included reviewing task completion, error handling and comparing it with design and technical documentation. After the review process the notes on any improvements and what was done well would be passed back through the push request and sent directly to the programmer.