More selected projects

Snowball [By Tommy Graven]

Absorb all your enemies and become as big as you can while using your phone as a controller!

Introduction

I made a 2D linear game where you control a circle and have to absorb every enemy on the stage in order to proceed to the next level. Enemies are represented by squares, and you can absorb them only if they are smaller than your circle and very agitated/scared. Of course, your circle grows every time you absorb and more enemies become vulnerable to you. Enemies can aim at you and shoot bullets, if you get hit you lose a life. Same thing happens if you hit an enemy that is bigger than you. Once you lose 3 lifes, you start all over again.

The game runs on a computer and you make use of your phone's accelerometer to control your character using TouchOSC.

Concept and background research

Agar.io (1) is a 2D game made by Matheus Valadares in 2015. It's an online multiplayer browser game where every player is represented by a circle and they have to absorb smaller circles in order to become as big as possible. The core gameplay is obviously what inspired me here.

Geometry Wars (2) is a 2D shoot-em-up game made by Bizarre Creations in 2003. It's a Xbox Live Arcade game where you have to survive as long as possible. What inspired me is that the further you go, the more types of enemies you discover, and they each have a particular characteristic and appearance but they are still represented by simple geometric shapes.

I was also inspired by the artstyle of both of these games, they both use simple geometric shapes for everything. It is heavily focused on gameplay.

Lastly, there is Contra II which is a 2D side scrolling shoot-em-up game made by Konami in 1988 on the NES. I was inspired by the difficulty of the game: there aren't many levels but you have to die & retry all over again constantly. It is quite addictive because you are eager to discover the new levels and enemies there are.

 

Technical

I used the xOsc addon in openFrameworks and I also got TouchOSC on my phone to make the controller for my game. I used these because I wanted to make a controller without doing any physical computing, and I like the idea of using your own phone. It took me quite some time to think about the best way to control the character: my game went from using regular Push buttons to Multi-Push buttons, then to the Encoder, and finally I just used the accelerometer. I had to use OSCulator to find out what values I receive on the X, Y, and Z axis' when I tilt my phone at different directions.

It wasn't possible to interact with multiple buttons at once with regular Push buttons. It was still very hard to control your character with Multi-Push buttons (there were 9 ways to go: N, NE, E, SE, S, etc.). The encoder was better but there was no way to tell when the player stopped moving and besides it was not a very good mental model of a controller (It's not possible to change the artstyle in that app). I tried other OSC applications until I came up with the accelerometer idea and it just felt right, it became intuitive, easy and fun to play. 

I also used cfxr to make some sound effects.

Future development

Obviously more levels and more types of enemies. But they have to be more distinct, more different from each other, so that players get more excited about discovery. There has to be more things happening on screen, more game-juiciness (animations, sounds, particle effects).

I would change the type of input once more so that it becomes more accessible for everyone. I would like to put it on the Google and Apple Store for free so I would make the game purely playable on phone or pad, and match the character's position with the player's finger position that is on his phone's screen.

Self evaluation

I tried to make abstract classes and use inheritance but I came up with problems and didn't want to lose too much time learning how to do that in C++, even though I know how to in C#. I spent a lot of time working on an Enemy superclass so that I could make many types of enemies very easily. It took me a while when I figured I had to use pointers and references I believe, but I couldn't understand the full extent on this matter in time. So my code is tighly coupled at some places and harder to maintain that I had hoped.

I would do the sounds differently, some of them can become quite repetitive and there is room for improvement. I might buy quality music and sound effects from audiojungle.com, and I would also bring more variation (e.g. shooting now has only 2 sounds, growing 1 sound, etc. There should be more).

Overall i'm pretty happy with how it turned out, I really wanted to make a game that is different than any other game I made so far so that I could put it on my portfolio. I never used Perlin Noise and OSC in any other application before, I found these subjects very interesting and I believe they turned out pretty well. I didn't believe I would make something interesting in openFrameworks at first considering i'm more used to Object-Oriented programming and using game engines such as Unity. Thanks to a tutorial (3) I understood the basics about game development in oF (3). The game still needs to be extended much more than this before I put it on my portfolio.

References

(1) Agar.io screenshothttps://www.touchtapplay.com/agar-io-cheats-tips-tricks-to-become-the-biggest-blob-that-ever-was/, TouchTapPlay, 2015

(2) Geometry Wars screenshot: http://dfgames.net/1300-geometry-wars-retro-evolved.html, DFGAMES, 2016

(3) Experimental Game Development, http://openframeworks.cc/ofBook/chapters/game_design.html, openFrameworks, Phoenix Perry & Jane Friedhoff, Unknown date