The departure cover image

Age of Zombies

Below are some of the systems that I made for the remaster of Age of zombies. Porting the game from an inhouse C++ game engine to Unity and C#


!!Code Snippets Coming Soon!!


Created an achievement system that handles the tracking of stats and the checking of when the achievements have been achieved. This includes creating a pop-up notification that uses a queue to load up any sequential achievements that the player has gotten. The system waits for the local game achievement system to finish before running the code for popping the achievements on the Google and iOS platforms.

This uses the Unity component system to help with saving all objects in the scene. An object needs to have a Save component attached, and the first time this is applied in a scene it will give that object a unique ID which it will be saved with and will reuse when the data is being loaded. Any data can be saved in this system by using a dictionary and saving the dictionary in the save system as an object. This does mean you have to be very specific with the data types when loading the data back to where it needs to go but it's not bad for a first attempt. The data is saved using the C# binary formatter conversion with zero encryption. I would like to improve this system by using JSON as the save format and using Rijndael encryption which is an Advanced Encryption Standard (AES).

This handles the timing, max number, and type of zombies and bosses that spawn in every level. This was the system that took the longest to get feeling correct and working as well as the previous version. This involved a lot of iteration and playtesting to get right for the game. In my current project "Untitled" I reworked the wave system in Age of Zombies to make it more designer-friendly so that it can be updated quicker and easier in the Unity editor. The editor in the original was a bit of a mess and it had a mountain of dropdowns to add weapons to spawn, zombies, how many, the timings etc. But with the rework of my project, I removed this fiddly editor mess and now you just create two things. 1) Create a wave of enemies - This will be the min/max enemies, the types and timings between each enemy being spawned. This is a scriptable object. 2) Wave set - This is a list of the waves. This way you can drop in as many waves to the set and all you drag into the wave system is the wave sets. The system then works its wave through the waves, then the wave set.

This involved working with external APIs in Google Play services and iOS GameCenter. The leaderboards work slightly differently on the two different operating systems. With the iOS leaderboards for horde mode, you will see the 10 ten scores and your score will be added to the bottom if you're outside of that, if you're good enough to get into the top 10 then it will show correctly.