Pew Pew Pew Game at a Glance

  • Tools: Made using C++ (Visual Studio Comunity); SFML
  • Dev Platform: Developed on Windows 7/8.1
  • Target Platform(s): Windows/OSX/Linux
  • Time: ~500 hours, March-May 2015
  • Team: Solo

Server/Client Architecture

By far my favourite part of this project, the client-server capability of Pew Pew Pew Game really brings it to life. Even though the server essentially just echos the data it gets, the potential for far more advanced functions, like data validation, ensuring players don't cheat, or even data interpolation.

Show me some code
Though snippets aren't available right now, feel free to check out my git for the complete code base!

Custom Game Engine

The bulk of Pew Pew Pew Game revolved around building up the various game component systems. SFML, for example, offers only the ability to load and display sprites - I had to build up the animation (and particle) system from there. Likewise, since SFML is just a multimedia library, I had to build in all of the physics elements, including collision detection.

Show me some code
Though snippets aren't available right now, feel free to check out my git for the complete code base!

4 Playable Characters

Pew Pew Pew Game features 4 different types of characters, each with their own strengths and weaknesses. For example, the Warrior has a special shield ability that blocks the Archer's arrows. However, the Warrior is slow, and can easily be backstabbed by the Ninja. Though the Ninja is really fast, he dies in a single hit from the Wizard. In his own right, the Wizard is very powerful, but a smart Archer can stay out of his range while still dealing damage.

Show me some code
Though snippets aren't available right now, feel free to check out my git for the complete code base!

About

The story behind Pew Pew Pew Game starts a few months before the project itself. Around mid-February, the University of Waterloo hosts its annual high school computer contest, the CCC (Canadian Computing Contest). Back in Grade 11, I (for some reason) considered myself a quite apt programmer. So, of course, I went into the CCC with, shall we say, ambitious expectations.

Unsurprisingly, of course, I did quite poorly in that contest. So poorly, in fact, that I decided I had to right this evident unjustice in the world. My solution, of course, was to make a game. I've been making things in Game Maker and similar programs since I was in middle school, and I figured that making a game was fun to both code and use (so I could get plenty of play testers!).

But, since I was so confident in my coding abilities, I decided I would delve straight into it, and go as low level as possible, and the result of that was that I ended up using SFML. Slowly but surely, I implemented more and more features into my game (which, believe it or not, started as a match pairs game), until I somehow ended up with a platformer. It was certainly not the most obvious of progressions.

Even though I had gotten to the platformer stage, I was unsatisfied. Everyone makes a platformer, I thought. How can I stand out? At the time, the vast majority of my friends played League of Legends, a MOBA (multiplayer online battle arena). In my infinite wisdom as a high schooler, I decided that I could probably implement at least half of the big features that League had (with the notable exception of 3D graphics), and so I set to work. I spent most of my time working on this project, even (perhaps one could argue especially) in class.

The various features accumulated quickly enough, but it certainly felt like a loosing battle with my imagination. Every new feature inspired several more on the to-do list, until the to-do list greatly overshadowed my already ambitious initial goals. However, even that wasn't insurmountable.

What really 'killed' the project was my disorganized code. As a result of the way I actually built the game, features were mostly haphazardly sewn into the code, with generally very few features being planned for ahead of time. I did do frequent refactoring, but the behemoth of a code base required far more refactoring than I wanted to do (I had a goal to accomplish, after all; the polish would come later) until it became truly unmanageable. The final nail in the coffin was that I got burnt out after several months of just working on this, and after taking a short break of a couple of days, I had forgotten a lot of the connections in the code.

Without any documentation, and faced with a monster of an unreadable code-base, I decided that I got far enough with this project that I could be proud of my efforts, and shelf it. Though I have not worked on it since then, I have tried rebuilding most of the systems, to what I would argue is great success. Pew Pew Pew Game is certainly not my cleanest code, but it is my most feature-rich, and one of my defining projects.