Sophomore Year Game Project
Fire Chicken Number 1
(Sep 2017 - July 2018)
FireChickenNumberOne is 2D platform action side-scroller where the player plays as a warrior named Sosa. He is tasked to head to the temple to give offerings to a relic residing in the temple known as the "Fire Chicken".
The player has to navigate through the forest and the temple's traps to reach the relic. But he is not the only one after it, Numba Wan seeks the relic for his own evil purpose.
GAM200/250
Our Sophomore year project was developed by 4 programmers and 1 artist over a 6 month period.
Editor and Engine
As technical lead, it was my job to plan the architecture of our game engine and code base. As this was the first time I had undertaken such a task I started of by reading Jason Gregory's book "Game Engine Architecture", which I highly recommend to any CS student. Then I began selecting the APIs we would be using like FMOD for sound, XML for serializing data, OpenGL for graphics and ImGUI for the editor overlay. Lots of research and many mistakes were made at the start of this project and we even failed our first attempt, scrapping by with a D after 3 months of work. Undeterred however, our team continued improving our engine, looking to more established engines like Unity and trying to implement their features in our own. In the second attempt, we were praised for our substantial improvements and quality of life features that we passed GAM200 with an A.
Component Based
C++ was the language used to create this engine and the features of this language such as inheritance and polymorphism as well the extensive STL gave us some very valuable tools. We were able to replicate Unity's <Game Object/Component/ Scene> style structure of content creation by utilizing the aforementioned features. Splitting the engine into system's and components also allowed multiple team members to add different features to the engine while minimizing conflicts when merging branches.
Designing a Platformer
Some features were only added after development of the game itself had begun. For example, a tiling feature and snapping tool were added as designers found it tedious to align items manually. An undo/redo system that I took a whole week to implement paid of tremendously because it now allowed designers to make mistakes without worry. We also bound keyboard short-cuts for those familiar with Unity and added more as the requests came in.
Scripting
I attempted to bind a scripting language to our engine to allow for faster iterations and hot-loading. This meant that we would not have to compile the entire engine every time a script was changed. I chose "Angel Script" as it was very similar to C++ and began binding the engine's functions to the scripting language. In the end however, it proved to costly a feature to maintain. We simply did not have the time to do the necessary updates and checks whenever we added a new feature (which was almost every day!). With IncrediBuild allowing for compilation times as low as 10 seconds, we decided to scrape the idea and code everything in C++.