Fromage Fortress (WIP)





This project was made as part of my final group project at University. For this assignment, we had free reign over what we made so it was a great opportunity to make something we were proud of but also had creative control over. The only main requirement was that we treat it as though it would be a game we were going to release which we would then show at our Course Degree show "ComX".

The game we came up with was 'FromageFortress', a game made in the Unity game engine. In this, the player is a cat and has to stop hoards of mice from stealing the cheese in their owners fridge. Within the build phase of the game, players are able to place down towers at different points within the level to deal with mice. Then when the player progresses into the combat phase, the mice starting attacking and the player is able to walk up to and attack the mice in a 3rd person perspective. Making Fromage fortress a blend between the tower-defence and wave-surival genres.

After 2 months of development, we had the honour of being able to show off our prototype at Insomnia #72 in March 2024.



As designated project manager, I was responsible for making sure our team remained organised and achieved our goals on time. Using various project management solutions, such as HacknPlan and GitHub, as well as regular team meetings to keep everyone up to date.

Also as a programmer, my main responsibilities were developing the following game systems:
1. The game manager that handled the build and combat phases. The wave manager was made in such a way that ever mice spawned in every wave could be directly specified by designers.
2. The mice AI. These were made using a custom implementation of Behaviour Trees and Utility AI in C#. I made the nodes use scriptable objects to expose all of the behavours to designers to make the mice AI easier for them to modify.
3. The health system, using a generic health script that could be applied to anything we want to be damageable. This system uses C# events to broadcast when the entity is damaged or killed. This allows other scripts to execute functions when those events happen whilst keeping the health script itself modular and free of unnecessary code.
4. The status effect system. Every entity that can be damaged can also have a status effect applied to them. Using a base class that contains functionality to initialise the effect as well as update it over time, it makes it easy to expand the pool of possible status effects.
5. The weapons system. Using a base weapon class, I was able to make it so that the player controller didn't have to care about what type of weapon it had, it just had to trigger it. Then by using Unity's scriptable objects for each weapon, designers would easily be able to create new weapons and modify their damage output and status effects.
6. The Player input using Unity's New Input system and then broadcasting the input to other scripts using C# events.



In addition to those systems, I also helped the other programmer debug his code as well as my code when needed. I also helped other team members implementsmaller features that help add polish to the game, such as a results screen to give a player a score to show them how well they did. By keeping my systems modular, the other programmer as well as animator were able to seamlessly intergrate their work with mine. Helping smooth out development.