Game Engines – To build, or not to build: The Eternal Conundrum (Part 4)

Go to Part 3

Design and Development of Condor Wars

It was June 2012. It had been almost 1 year since I traveled to Bogota to work on The Descent for 3 long weeks as I mentioned already in Part 3. During that time we completely forgot about game development for a while and parted ways momentarily. Elias continued work on his baby YouOrderIt, which he was developing exclusively for his restaurant and I continued my graduate studies. In Summer 2012 I started a 12-week internship close to Detroit, Michigan and found myself with a lot of free time on my hands. I was also in a contemplative mood and somewhat depressed during the first couple of weeks of the internship. This was prompted by many factors – the work was not hands-on and I feared losing my technical coding skills. I had this paranoia that if I stopped coding in cold turkey fashion (my new career path demanded a different set of skills – mostly technical but strategic) I would be bound to forget coding and the dread of this idea made me feel worthless. I had been coding for almost 11 years so programming was an essential part of who I was. For this very reason I always kept a side project under my belt at all times in addition to my full-time professional responsibilities.

The situation in Summer 2012 accelerated my desire to get back into coding mainly to feel better about myself:

  • I was afraid that after taking a 1 year break my coding skills had decreased (a fallacy since Bill Gates in 1995 claimed he could write “slicker” code than John Carmack during a Windows 95 event even though he hadn’t obviously coded for many years)
  • I was living in the middle of nowhere and the setting was depressive, further exacerbating my depressive mood
  • I was running out of Breaking Bad episodes to watch, needed something to do ASAP

The situation above made me open Android Studio immediately. I had never played around with Android and OpenGL so I decided to develop a small proof of concept to test ideas and scrape off some of the coding rust I had hypothetically developed over the past year. Also, I didn’t want to deal with the Android Canvas library ever again so OpenGL seemed like the only alternative available. Ten years before during undergrad I had dirtied my hands with OpenGL for 3D programming so I didn’t expect a steep learning curve.

I toyed around with the concept of a spaceship flying through the vacuum of space, moving with the use of thrusters and attempting to avoid planets and asteroids. After a couple of days I had the proof of concept in pretty good shape and had tested out OpenGL graphics rendering, physics, game controls and some game mechanics ideas. It felt like I had gotten back in coding form so I archived the proof of concept and began brainstorming other ideas that had the potential of maturing into an actual game.

After a call with Elias we decided we wanted to release something very small – even smaller than The Descent. The Descent’s development was problematic due to the limitations we faced with the Android Canvas library and because of our lack of focus and direction. We also faced some challenges in our art department which added more obstacles into the mix. After learning from previous mistakes we didn’t want to play around with new ideas but rather with something simple that felt familiar. We also wanted to avoid having to depend on an artist or graphic designer to deliver game assets. We only had a 10-week timeframe and we wanted to control all aspects of development – adding a 3rd party artist/designer in a constrained timeline felt like adding a potential dependency for release. My internship ended by the end of August 2012 and we were targeting to release before I went back to graduate school.

We decided to resurrect a game that Elias had developed in assembly language many years previously called Condor Wars. We already had the game assets – there were only 2 types of sprites: the player’s spaceship and the enemy alien. The latter came in 2 flavors: green and red. The game is reminiscent of Galaga and Galaxian and the mechanics simple – you control a spaceship at the bottom of the screen that can only move left and right. Enemy aliens spawn from the top of the screen and zigzag downwards towards the player. They spawn randomly at certain intervals and the game objective is to dispose of them with the laser. The player can shoot the laser by tapping the screen. The simplicity of this gameplay made the technical requirements trivial:

  • Draw a player’s spaceship sprite and the spaceship laser
  • Draw a black background with randomly generated stars that move downwards to give the illusion the player is traveling through space
  • Draw enemy alien sprites
  • Manage an array of enemy objects that spawn randomly from the top of the screen (NPC object management).
  • Draw enemy alien explosion animation
  • Draw the player’s spaceship explosion animation
  • Draw raster fonts that display the player’s score
  • Handle collision detection between the player’s laser and enemy bounding boxes and also between the player’s bounding box and enemy bounding boxes (simple rectangle to rectangle collision detection).
  • Play sound effects (no music)

The limited technical requirements above didn’t warrant the use of an SDK such as Corona or Cocos2D so using OpenGL seemed like a decent option. There were only 5 types of objects displayed on the screen at any point in time: 1) the player’s spaceship, 2) the player’s laser, 3) the enemy aliens, 4) raster fonts and 5) the black background with stars. Managing the rendering order for these 5 objects was already predefined so a complex Scene Graph implementation was not required. For example we knew the rendering order would be the following:

  1. Background and fake star field
  2. Player’s spaceship and player’s spaceship explosion effects
  3. Enemy aliens and enemy alien explosion effects
  4. Player’s spaceship laser
  5. Raster fonts

In the draw() method we just made sure to render the game scene in the above order. Some complexities were involved with the loading, managing and rendering of OpenGL Textures for all of these 5 objects. However we developed boilerplate OpenGL texture loading and management code and carried on without deliberating if using an 2D Graphics SDK made better sense.

So after 10 weeks of development we were close to release. My internship ended in late August 2012 and I went back to school. Two weeks later we finished development and released Condor Wars to Google Play. After almost 8 years Condor Wars became Helldorado Team’s first game officially released to an app store. Everything we had done before amounted to technical demos, prototypes and proof of concepts. We downloaded v1.0 of the game from Google Play and the game crashed horribly due to a last minute production release bug. A fix was made and we released v1.1. So we downloaded the patched version and played the game again. But after playing the first couple of levels we realized something: The game was terrible. After 2 or 3 levels we found ourselves bored and you were lucky if you didn’t find yourself yawning beyond level 4. If you had to find 1 word to describe the game it would be sleep-inducing. A friend of ours claimed to have reached level 255 (the last level of the game and a nod to the 8-bit era) but I’m prepared not to believe such tales.

We realized we had found ourselves releasing yet another prototype masquerading as a game – but that had been our intention all along. We had committed to develop and release a technical demo to Google Play in order to experience the Android app release cycle, and we learned valuable lessons from that process. Before development both our mission and goal had been clearly defined and we followed through till the end. In some ways Condor Wars was a pilot test, and the foundational code that was developed for it served as springboard for the development of Condor Wars Redux, where we made some of our biggest mistakes in our game development experience. For Condor Wars we picked the right library (OpenGL) for the technical requirements which had been correctly identified before development, so the mistakes we made with The Descent were not repeated.

When tempted to release something (either a prototype, a demo or some semblance of a game) early due to external or egotistical pressures some conflicted developers advice to consider the words an ancient and wise monarch (who was also an accomplished coder) once said:

“Cherish an unpolished gem in your local machine. Abhor a turd in the App Store.”

– Alexander the Great of Macedon

With Condor Wars we learned that as a developer you are constantly faced with the following predicament: release your technical demo too early thinking that it can pass off as a game, or hold off the release of your pet project until it achieves a certain level of “perfection” or it fulfills your unrealistic ambitions. Most of us are tempted to lean towards the latter, and this is exactly what happened with The Descent (amongst other issues). Despite what Alexander the Great once said, it is better to release a piece of excrement to customers and gain valuable feedback than to let your closely guarded, ambitious project that hasn’t seen the light of day fall into oblivion due to your own high standards.

The disappointing story of Condor Wars Redux, as it was codenamed, will be the subject of our next article.

The Making of The Descent

5 Years of Hubris

The Descent was originally conceived in early 2010. Back then we had been experimenting a for years with many types of game engines and technologies. However our interest in gaming back then was purely academic. We knew that we wanted to experiment with games and that making games was far more interesting than building payroll applications or enterprise software. Between our college years and 2008 we had played around with Java, programming with DirectX (using DirectDraw), and even experimented with established game engines such as Valve’s Source Engine. We never really developed games to full completion, just tech demos or small games or graphics applications showcasing features. We lost interest easily in the apps we were building back then. We just liked trying some cool ideas and then moving on to the next thing. In 2008 I ported a mini game from Nintendo’s Wario Ware Inc (for the Gameboy) called DONG DONG to the Microsoft XNA platform. In my opinion that could be considered our first released game (or port). We posted the game installation file in some website and forgot about it. Shortly after that experience I opened a boxing blog called Boxing Highlights (now defunct) which I ran for 2 years. After closing down the blog in early 2010 (I lost interest in boxing), we decided to venture into working with games in smartphones.

Back then we didn’t know Objective-C. I don’t remember if we owned Mac computers (which are required for iOS development), but we made the decision to try Android game development because I already had some experience in Java so Android seemed like a sensible choice. We wanted to create a small game that we ourselves wanted to play so we decided to build a game inspired by Paper Plane (a mini-game from Wario Ware Inc.), one of the very few casual games that had stolen so many hours from our lives.

I began the core of the development during Fall of 2010 without many graphics assets until we on-boarded a freelance graphic designed into the team. There weren’t many Android game frameworks at the time so we decided to build the game using Android’s built-in canvas functionality. This proved to be a major mistake. We developed an MVP with core gameplay functionality but didn’t have a clear vision or an end in sight. We also started experiencing technical constraints with Canvas that we tried to ignore at the time (most of these were out of memory exceptions). By early 2011 we decided to release the game before summer of 2011 because I was going back to school for a Masters degree in August 2011. That was our initial target but we were still working without a clear plan, without a committed designer (a freelancer whose name will remain undisclosed but who will be referred to as Claudia Pulcher in this article) and experiencing technical flaws in our game implementation. Our technical flaws were deeply rooted in the graphics library selection. We didn’t have experience in developing real-time games for Android and we ended up picking Canvas as our de facto graphics library for development. We paid a dear price for this as we started experiencing many performance issues closer to our “imaginary release date”. We considered moving to native OpenGL (we were still thinking of doing everything ourselves instead of using a relatively established graphics framework) for graphics rendering but never did it due to the effort involved. Before going back to school I decided to fly to Bogotá (where Elioncho was residing at the time) to undertake a 3 week development crunch which we thought would complete the game. It never happened.

During those 3 weeks we started adding more features and developing a lot of new functionality ourselves (scope creep galore). We wanted to have leaderboards and achievements but we ended up developing that functionality ourselves. There was no Google Play Game Services at the time. Those features ate up around 2 weeks of our development time. But we still didn’t have the rest of the game developed (all the levels, all the small easter eggs we wanted to include in the game, and also the addition of sound effects and original music tracks). We also faced many challenges with Claudia at the time. Frustrated with all of these challenges we parted ways with Claudia and after the 3 weeks of development we still had an unfinished game under our belts and no designer.

After that we basically placed The Descent in the back-burner between the rest of 2011 and early Spring of 2014. During this 3 year hiatus Elioncho and I went our separate ways to focus on other projects (In 2011 Elioncho started developing YouOrderIt and I spent 2 years pursing a Masters degree from Carnegie Mellon University). Also, in the middle of 2012, even though we still had The Descent in our minds we developed Condor Wars for Android, a recreation of a game Elioncho had developed in Assembly language during college. There were many psychological implications behind the development of Condor Wars. During Summer of 2012 I was doing an internship close to Detroit, Michigan but was desperately seeking a side project to work on during my spare time. One day we brought up the idea of porting Condor Wars to Android “just for the heck of it” but in reality I believe we did it for the following reasons 1) to regain confidence in development after falling short with The Descent and 2) to use the port of Condor Wars to Android as a “guinea pig” to learn about the pros and cons of developing and releasing a game to Google Play. We released the game in September 2012 but shortly after removed it from Google Play. Condor Wars is now vaporware.

In 2014 something compelled us to bring back The Descent from the dead so we decided to continue where we had left off. However we decided to focus on the iOS platform. In April 2014 we on-boarded a new designer – Quintus Sertorius (his real name will remain undisclosed) to start working on the graphics for the game. We decided to develop the design elements for the game (sprites, backgrounds, etc.) from scratch. With a new designer under our wing I worked on a rough prototype for The Descent iOS using the Cocos2D framework during Spring of 2014 and handed off my work to Elioncho during before Summer of 2014.

By June 2014 Elioncho decided to continue the game by building on top of the rough prototype but switched from Cocos2D to SpriteKit since the latter is an official Apple framework that looked promising (it also shared many structural similarities with Cocos2D, which we realized lacked sufficient documentation). However we were focusing mostly on getting the graphics right this time so between April and July 2014 we worked closely with Sertorius while doing minimal development work on the new prototype. By the end of July 2014 Helldorado Team went on a 4 month hiatus again and The Descent went into hibernation mode due to personal reasons and other side projects.

In October 2014 development work on The Descent resumed but at a plodding pace as we continued to work on the graphics and tried to finalize the official assets for the game. We went back and forth too much with Sertorius regarding the finalized graphics deliverables so we decided in February 2015 to part ways with yet the 2nd The Descent designer. We were again in the same situation – we had a working prototype and no designer.

Between February 2015 and May 2015 we were swamped with other projects as well – we had to develop additional functionality for YouOrderIt which we wanted to include in our product roadmap and some prospective clients were pressuring us to deliver. But even though actual development of The Descent had stalled for a couple of months, we decided that 2015 was the year for release. We set a target for June 2015 to deliver the game or “die trying”.

We started juggling work on many fronts – YouOrderIt (web and mobile) and The Descent. Early during 2015 Elioncho did some freelance work for Carlos Forero of Milmentes and made an arrangement that would allow Forero to work with Helldorado Team as the official designer for the game. In April 2015 we on-boarded The Descent’s final designer and by end of May he had produced all the graphics that ended up carrying the real feeling of the game we had always wanted to play. The bulk of The Descent’s development work (now with SpriteKit and the integrated graphics assets) was developed between February 2015 and June 2015.

In June 22, 2015, after almost 5 years of a development schedule that we described as “half a decade of sweat and blood”, during the middle of day, Elioncho made the last code change of the The Descent, ran some unit tests to validate functionality and clicked the “Publish” button within the deployment wizard of Xcode. For 5 years we had felt like Atlas holding the Earth under his shoulders. Having been burdened by past frustrations and by 5 years of trials and tribulations, we mentally let out a long, deep sigh as a smile formed in our faces.

We’re Alive!

Hello guys,

A couple of months have passed, but let me assure you that we’re close to releasing The Descent. As I predicted, our designer failed and we failed to meet our January release date. Then other things came up and we had to stop development entirely. The good news is that we’re releasing between May and June, no excuses. We’re working with a new designer who is producing quality work at a fast rate. Be ready! It’s just around the corner. You’re going to love this game!

Another Status Update of The Descent

Had a great meeting with our graphic designer yesterday. He got pretty excited and pumped up when he played the game and got a feeling from it I’m sure will help him on his work. But the most important thing is that he’s commited for the early next year release. I’m hoping it’s true, our last two designers have been very unreliable.

In other news, Tiogus is finally checking for bugs and sharing input on the game.

All is well, we’re on schedule and very happy to share this game with you guys very soon.

Status of The Descent

After almost two months of development, I’m happy and excited to announce that we are on schedule to release our iOS game (code named The Descent) early next year, hopefully on January. All the gameplay features are done. We’re going into beta phase right now. We’ll be polishing things up, balancing the game, and incorporating updated graphics stuff (we’ll have to push our designer hard).

As always, thanks for your support! You’ll be hearing a lot from us in the following weeks. Don’t forget to leave a comment below if you want to be part of the beta. Thanks again!

Game Documentary Recommendation – Indie Game: The Movie

Just finished watching this doc on Netflix. I highly recommend it, got me really inspired. I feel related in many ways to each character in the movie: the struggles, pain, grind and sacrifice everyone goes through. And ultimately the love that they feel for their craft that makes them fight till’ the end. I hope our story unfolds as theirs.

I leave you with two quotes that I liked:

You kind of have to give up something to have something great.
Tommy Refenes

If you don’t see a vulnerability in somebody, you’re probably not relating with them on a very personal level.
Jonathan Blow

Don’t forget to support the guys that made the movie:

Indie Game: The Movie