Tanks In Advance, my final game and second as game co-lead in the Game Creation Society, takes a simple 1v1 tank game and adds a time-traveling twist. In each consecutive round, players battle alongside their past selves from previous rounds to defeat their opponent.

This game was my concept, and I worked with Adrian Ma to lead a team of around 10 members, most of whom were programmers. My goal was to keep scope small so we could make a finished, polished game in one semester. I managed the programming and sound teams on top of being the lead VFX artist, a discipline I had very little experience in beforehand. In the end, we created a remarkably polished game for GCS and won the Best Sound award.

Itch.io Game Creation Society GitHub

Command Pattern

To implement the game's main mechanic, playing alongside your past selves, I wrote the game's base code, including movement and aiming, using the command pattern. This meant every action, like moving and shooting, was a timestamped object that was saved and replayed in the next round. I also manually wrote bullet ricochet code to avoid indeterminacy in Unity's physics system.

Shader Stylizing

With only one artist active on the team, I decided to focus on improving the visuals with code. Using Unity's Shader Graph and Render Features, I made shaders to seamlessly outline the grid-based maps, highlight tanks' movement behind walls. The outline shader uses a Sobel filter to highlight sharp changes in normal and depth buffers, which was necessary for seamless outlines on our block-based maps.

Other VFX

As a VFX artist, I made stylized tank & mine explosions, a color-changing win circle, and a big laser.I started learning Unity's VFX graph with tutorials before modifying them or trying to make my own effects from scratch. I also used Blender to create a cylinder without circular sides and specific UVs and Krita to create a texture for the laser effect.

Programming Management

The Tanks In Advance team was almost all programmers, so managing the programming team was a big task. We also had members of various skill levels, ranging from brand new freshmen to seniors who had used Unity in GCS for four years. My job, on top of the above features, was to split up the work and help where needed. I provided ideas on implementations, debugging help, and pointers to resources where needed, and also integrated different programmers' work. Eventually, when all of the easier tasks had been completed, I reassigned the two newest programmers to work on level design and QA, which worked out fantastically for bug catching polish.