Posts Tagged ‘gamedesign’
Hey guys, just wanted to take the opportunity to write a bit more about World’s Aftermath, and the process behind it.
One thing we strived for when we were planning this project was that we really didn’t want to use any content that wasn’t our own. So, from day one, Nicolas set out drawing pixel art, laying down guitar tracks, and doing voice overs for the character deaths. He kept a steady stream of content coming in, and I plugged away endlessly programming it all together. Every day when I returned home from work Nick told me he’d been up till 6am drawing dozens of animations. One night he stayed up all night animating 30 strips of animations and laying down the entire soundtrack. By the end of it all, we had 300+ frames of graphics, 6 original songs, 50+ original sounds, and half a dozen levels.
All of the source code is original too. I’ve been working on a 2D game engine since 2007 that I’ve been using for all my other projects. The night before the competition I gutted out one of my projects of all it’s content so I could start with a blank canvas. I used my custom World Builder (level editor) to design the levels. The engine is written in Java, and uses the Java2D graphics library for rendering (which I’ve optimized immensely). The most important thing, I realized, was that I would need to be able to create units for the game as quickly as possible, and that I wanted hundreds of units and hundreds of bullets on the screen at once. The game was going to be visceral and gratuitous and I think we hit the mark.
Every single variable, animation, sound, and unit/bullet type is defined in the INI files in the /gamedat/ folder (which leaves rooms for mods). By the time we were finished, units, bullets, sounds, levels, etc. could all be added without a single line of programming. To make sure the units could pile up without slowdown I wrote a spatial partitioning algorithm that sweeps over all the units at the beginning of every frame. Each unit is put in a different “bin” for every 100 pixels. This way, unit vs unit or bullet vs unit comparisons are made only on those units in the surrounding area by getting only those “bins” in range.
We really looked to Command and Conquer as a source of inspiration for this bad-boy. We wanted to capture the vibe of the original Command and Conquer, but we also wanted to make a game that could be played by anyone, without ever having played an RTS. So, we simplified the control scheme and mechanics quite a bit from a traditional RTS. This is where we feel we’ve innovated. Without direct control of unit placement, we were able to reduce the gameplay down to three actions (purchase, attack, defend), but made sure we left room for emergent gameplay and strategy. This created a very casual gameplay experience but also leaves room for a great amount of depth.
From the start, we realized the importance of making sure it was completely clear how to play without any sort of tutorial. So, we designed an intuitive and simplified control scheme that is ultimately compatible with touch screens. In this fashion, the entire game is playable with only a mouse, only a keyboard, or only a touch screen. Unfortunately, we had to ditch the tower defense and defend actions for this version, but adding them in our final release will give that additional layer of control that will really bring the gameplay together as a complete package. Forcing the player to commit to an attack makes each decision of what units to send, how many, and how often, that much more important; and the immediate urgency to capture towers right from the start sets the pace from the start of a match. Finally, the need to unlock tiers of units, as well as the importance of purchasing and defending your harvesters ends up making each purchase critical.
Finally, I’d like to mention that a design decision was made very early on to use object oriented code design to cleanly separate each aspect of the game. In this fashion units are separated from teams, and teams from players. We will be able to add in network support fairly easily for the full release, as the code is designed in a way to make networked control of a player trivial. Something we wanted to do from the very beginning was to play versus each other, so the full release will certainly have online multiplayer.
We’ve both always been huge fans of the earlier games in the Command and Conquer franchise. And even though Nick won’t play me anymore because I dominate him every time, we wanted to draw from these games for inspiration. We intentionally left out a unit cap, and made sure the game could facilitate as many units as a player could afford. The music and sound design were crucial, also, in creating an homage to these games. We laid down some guitar tracks ala Frank Klepacki (see below), and did our best imitations of the Wilhelm scream that Command and Conquer used so charmingly for it’s infantry death sounds. Getting the artistic direction of the two factions and the mood of the game just right was critical–since graphic design makes or breaks a first impression–so we worked hard to capture a dystopian “Red Alert Vs Tiberian Sun” feel. We decided the more conventional “Rebel Scum” vs the domineering and futuristic “Allied Collective” would be a good representation of this. There isn’t a story explicitly stated in-game, but we feel we hit the mark with our “show don’t tell” approach that we meticulously crafted through the subtle use of our art direction and the limited wording/naming we sprinkled throughout the game.
Looking back, we feel very satisfied by what we’ve accomplished here. In 7 days we’ve completed a game from start to finish with all the technical aspects of game development accounted for (sound, music, graphics, level design, victory conditions, menus, AI), and a strong core set of game mechanics. We’re geared up to now create a proper release of the game, having proven our prototype, and in the coming weeks we’ll polish the game with all the love in the world and release a free version of the game with all the bells and whistles.
Download/view our entry here: