Camelia

The Game

Camelia is a 2D side-scrolling platformer in which Camelia the Chameleon uses her power-ups to enhance her jump height and increase damage knockback to defeat insect enemies in the way of her pursuit to collect the three rarest vinyl records in a neo-jungle city.

Trailer

The Team

Pied Piper was a team of 11 people. There were 3 artists, 5 programmers, 2 designers, and 1 sound designer.

Development

Camelia was developed using a custom-built C++ game engine. In anticipation for this project, I began researching and developing the essential framework for the engine during the summer prior to the fall semester, and was thus elected as my team’s Tech Lead. The game engine was comprised of various systems, including a graphics system, physics system, entity-component system, and many others.

My Contribution

Graphics Engine

Early demonstration of the graphics engine. Note how objects can be rendered with transparency and collisions can be appropriately sized and attached to game objects.

As the principal graphics programmer for this project, all rendering capabilities were designed and programmed by me, with OpenGL as my preferred graphics API. The engine makes use of the GLFW library, and encompasses the entire rendering pipeline, including building vertex/index buffers, applying MVP transformation matrices, and organizing vertex and fragment shaders into a neat library.

Research

Engine overview, and vertex array overview

As mentioned earlier, development of the graphics engine began in the summer before the school year. At this point, I had no experience with graphics APIs and rendering implementation, and thus had to scour the internet and book stores for educational material. In addition to the book, OpenGL Shading Language, an invaluable source of guidance was found in The Cherno’s OpenGL series on YouTube, which I watched the entirety of.

Spine Implementation

Character animations implemented via Spine API

Spine is 2D skeletal animation software for video games, which can be used to build rigs and animations. While Spine is relatively simple to implement in commercial game engines, using it in a custom C++ engine necessitates the complex integration of Spine API into your source code. Having a background in computer animation, I was excited to undertake this challenge.

Debugging

In addition to graphics and animation responsibilities, I also used the spdlog library to write a basic debugger that would write text files with timestamped information. Because the engine had two primary components – a backend core side and a front-facing client side – I elected to create a separate logger for each. Through the use of smart pointers, the whole system ran quite efficiently.

Build Automation

In order to make the project more resilient against the risks of having 5 programmers working simultaneously on the engine, I learned a little bit of LUA scripting and used Premake to write something that would automatically include all directories and linking protocols upon the generation of a new solution. In order to use it, all one would have to do is double click on a batch file.