I’ve been slacking lately on the blog unfortunately. In any case, Outwitters is still chugging along as I chip away at a large to-do list. We’re still not feature-complete, which is a bit disappointing. Yet, the core game is playing more smoothly than I predicted it would be at this stage so that’s a plus. We’ve started adding a few more testers into our pool to get more feedback from new players as well as get the matchmaking ironed out.


So one of the ‘big’ features I’m really liking is the matchmaking we’ve created. It’s no Halo, but I think it’s turning out great for a mobile game. A quick rundown of what it’ll do:

  • When you first start out you play a few ‘placement’ matches. This is done to try to get a decent read on your skill level before throwing you into a league.
  • When you finish your placement matches you are put into a league. The leagues all have silly names, but they range from the low-level casual player skills to the high level competitive skill range.
  • When in a league you are competing not against everyone in the world, but only a small subset of players in a single ‘division’. This has some nice benefits in encouraging players to do better. Being ranked 40 instead of 40 million is a slightly better feeling I imagine.
  • As you play, your rank goes up and down on that division. If you start doing really poorly you may be moved to a lower league to find better suited opponents. If you are stomping people left and right it’ll push up to a more difficult league.

For anyone that has played Starcraft 2, it’s not all that dissimilar to their system. Couple of things started to arise when we started to have a few more people join up. One issue was the algorithm for placement. I think it’s too aggressive right now and it catapults people into really high leagues with barely any wins. I think I’m going to be redoing the placement league point calculations.

Secondly, the match finder has two somewhat opposing goals. The first goal is to find someone of a similar skill level to you. The second goal is to find a match quickly. When your player base is sparse, the ‘quick’ goal tends to prevail more and more than the skill level goal. The steps it does to find a game are pretty straightforward:

  1. Look for someone within your skill range
  2. If it didn’t find a game, expand our skill range and look again
  3. Screw it! Find *ANY* game and join it.

and theoretically if the userbase is sufficiently large there should be a diverse set of games waiting for players to join, so it should balance out. But I can’t assume Outwitters is going to have a huge player base :). The 3rd step is what fulfills the “quick” goal. The problem is when the game is just launched, lots of players are joining but their skill levels haven’t settled yet, so match finding will rarely find ‘similar players’ at the beginning and always fall to the 3rd step. This will lead to some frustrating games for the lower skilled players. Right now I’m planning on adding a time constraint to step 3. It will look for any game that has been waiting for a player for at least X days. That way when a large influx of players start playing, this will help increase the ‘waiting pool’ to search through in steps 1 and 2. The downside is you may get more matches where you are waiting for someone to join in the early days of the game, but someone will eventually join.

Asset Pipeline Lessons

At one point I would have called our work flow a pipeline. Now it’s more like a laundry hamper where I’m throwing a bunch of assets into folders, sorting them, running scripts on *some* of them and not others, and *then* manually going through the ‘broken’ assets and fixing them (more on this later). When I initially designed a lot of our scripts, it was with in-game assets in mind. So the artist didn’t need access to them after-the-fact. But we’ve gotten to the point where we use these scripts to generate assets for UI layouts that are done in flash. So the artist does need the output in a timely manner so he can keep working. And on top of that, the flexibility to only generate the assets that he needs at that time. The system I setup was designed with an ‘all or nothing’ mentality. Seeing that I didn’t care when the scripts were done and didn’t expect them to be needed in a hurry, a lot of the build processes are very rigid and just blast through our entire asset library re-generating things from scratch.

I’ve done a lot of tweaks/hacks and config file augmentations to support some of the things we need it for on a daily basis. But I’m just taking it as a lesson learned and when we start our next project I’ll have a better understanding of what our asset build process should be capable of.

In regards to ‘fixing’ broken assets, I was having some issues with tga and png files being corrupted. I run a windows VM on a mac. There are some cmdline tools that are windows only that I use to process our images. Since the VM sees my Mac’s asset folder as a network share it can gain access to them without any tedious file copying. The problem is accessing the mac folders is very slow. And I guess some of these build tools don’t like that and end up corrupting some of our files. I had to revert to tedious file copying to copy stuff into the VM-only directories and got a massive speed boost on the processing and no more corrupted tga or png files. Hurray! Kind of.


I’ve been slow on the blog updates lately mostly because the times I use to write were taken up with me being out of town. Just got back from an awesome weekend trip at MLG Orlando. For those that don’t follow that area of gaming, MLG stands for Major League Gaming, and is essentially a league for professional gamers to compete in. Starcraft 2 has taken off in a big way in the MLG, considering only a little over a year ago MLG was pretty much dominated by Halo and Call of Duty. Seems the SC2 crowd is dwarfing the other competitive games at the show. So gooo SC2!


Taking a picture with pro sc2 gamer EG's Chris 'HuK' Loranger. Happy after coming off another win in the tourney I'm sure.

Anyway, to relate this to indie development one idea that struck me was how similar those involved in sc2 competitive play are to indie devs themselves. Most likely other professionally played games are like this as well, but I can’t speak for them directly. Even more interesting is the fascinating stories of those that don’t compete directly but are community figures and support the community in other ways. Casters such as Sean ‘Day[9]’ Plott, Nicolas ‘Tasteless’ Plott, Dan ‘Artosis’ Stemkoski now make a living off of their passions in a career path that barely existed 5-10 years ago. They now all often commentate pro matches and serve as hosts to Starcraft events around the world. It’s one thing for pro gamers to make a living playing games professionally. Pro gaming was on the ‘fringes’ years ago, but is becoming more viable these days. But to think that people such as casters, and even popular gamers who stream their gaming sessions (such as Steve ‘Destiny’ Bonnell) are now doing these things full time is mind-blowing. I would almost call that the epitome of the ‘American Dream’. Taking your passion and then pursuing it to the point where your passion becomes your means of living, even if a there’s no obvious or immediate way to make a living off your passion. Indie devs certainly fall in that category, but it’s a tad easier to swallow that a developer makes a tangible product and then sells it, which is more in line with a standard small business lifecycle these days. These guys, they are the product. Pretty fascinating to think that their careers revolve around a single video game! Now I say almost ‘American Dream only because half these casters don’t even reside in the US, they live in South Korea and are apparently loving it. Getting to travel the world, attend global tournaments, doing what you love? That’s a win in my book.

In other news, Outwitters is still deep in development. Finally got the universal build up and running but the iPhone version is still rough around the edges. Hopefully after things start to stabilize we can start testing with a wider group of testers. I had a game with Adam earlier this week that I was certain I would win, only to lose…yet again. Maybe one of these days it’ll click with me and I won’t appear to be strategically retarded.

Oh, It’ll Be Out By….

Hmm, even now as I look back on what’s been done on Outwitters, I’ve learned a *ton* of new things in regards to game development. I’m not too excited about having only 1 game to release this year (if we even make *that*). Hell, we even planned on having 2 games a year. The take-away from that is game development is not an assembly line process. Going into Outwitters I:

  1. Never coded a turn-based strategy game before
  2. Never worked on an asynchronous game before
  3. Never worked with Google App Engine
  4. Didn’t use unit testing prior to this game
  5. Never worked with push notifications
  6. Never worked fully in C++ in a commercial project before
  7. Knew little of JSON and it’s benefits
  8. Hadn’t used Actionscript to the capacity that I am now
  9. Haven’t touched Python since freshmen year of college (omg I love python again)
  10. …and several others

Looking at just that list above, which isn’t even scratching the surface, it was dumb to think I could predict *any* sort of release date prior to starting this project. Unless you’re phoning it in game after game, or the game has a very small scope, or you just have many years of broad experience working on several different kinds of games, platforms, and genres, scheduling is almost silly to think about. Having only been doing this for a couple years, I’m far from the “broad experience” category. There are a few constants in game dev, such as getting your boiler plate code, foundation, or engine ready to go, or a super basic prototype up and running, but beyond that it’s just a hazy mess for me at the moment.

The great thing is now I know a decent amount of everything on that list. If we were to do another asynchronous TBS game for iOS, scheduling would be far less hazy. But that’s the dilemma. I sure as hell won’t want to dive into another “Outwitters”-like project after this for a while. I get excited about new games and new ideas (most involving multiplayer to boot). I’m interested in things I haven’t tried before, and as a result, they’ll always be difficult to estimate length of development, but the challenge is what makes it fun for me. Even if we were to revisit a previous game and make a follow-up, I would want to add or change something about it that would make it unique, because that game is already a “solved problem” and is pretty much just grunt work from start to finish with little thought involved.

Outwitters Battle Report

This week I finished up implementing custom games into Outwitters. Outwitters was designed to be played with friends, so it’s kind of weird having this feature come online so late in the game. Our Leagues and Ladders system works with 1v1, but we wanted to make sure to have 2 vs 2 in there as well so you can still take on the world with a buddy. Things are always more fun with a friend in tow :). Custom games are just a way for players to create their own games with their own settings. They can choose who is in the game, who is on what team, and the map. The league system tends to take over a lot of those choices to make things a bit more ‘standard’. Wins and losses don’t count in custom games, so it’s a nice place to try out strategies or just play with friends casually.

Speaking of leagues, the matchmaking and ranking system is finally online as well. It’s not too interesting to look at yet since the player numbers are still very low. At least not my profile, since i have zero points and can’t win a game to save my life. I’m apparently strategically challenged when it comes to these games. Probably explains my horrible performance in Starcraft 2. I tend to be impatient and like to throw my army away like lambs to the slaughter when the engagement heavily favors the opponent instead of me. Oh well, there’s always Battlefield :D.

This following post is probably going to be useful to an extremely niche audience: anyone developing a multi-user iOS app that has a GAE backend. I’m currently working on Outwitters and debugging turn-based games on the local dev server (dev_appserver.py) is really quick and painless. The problem arises from the nature the game. It’s a multiplayer game, and as such, requires multiple users to function. You can only go so far with creating ‘mock user’ accounts, and fake data populating your local server. With each build I always find some sort of issue that the alpha testers stumble across that may not be server-related but the gamestate that the “production” server is holding is something I want to grab and debug with locally. Wouldn’t that be nice?

So when you run a local dev server the command is pretty simple:


dev_appserver.py pathToCode


Not bad. Now if you want to access it on your machine you simply do an http request to localhost:8080. The problem comes in when you’re developing for a mobile device. The dev server is no longer at localhost but on some local LAN IP. That’s a pretty easy fix too:


dev_appserver.py –address 192.168.1.x pathToCode

Now in your iOS app you can send requests to a local server. We’re in business, awesome! So you want to download the data from your hosted application over at appengine.google.com? Pretty simple. Uploading it is pretty straightforward to if you use the –url option with “appcfg.py upload_data”.

Now this is where I ran into problems, and I couldn’t find a clear cut answer as to why uploading data to my local dev server was simply not working. It would ask for credentials, and no matter what I put, it would fail. Hopeless. I used all sorts of combinations of my local address and ports for the –url flag for appcfg.py and tried countless combinations of any of my known logins for both appengine and my local dev machine. I then decided to go back to basics, and follow their instructions exactly. I downloaded the production data as documented. Then I launched a clean dev server with no command line options. It worked as advertised! I had all the data frolicking about inside my dev server, but I couldn’t access it with any of my iOS devices. Without the address option, the dev server would launch with localhost as being it’s address, and no other device could connect to it.

So after banging my head on the keyboard for a couple hours, and not being able to find any answers as to why upload_data only works to a local dev server if you’re running on localhost, I found a round-about way of getting production data into my own iOS friendly dev server:

  1. Download the data as per the documentation
  2. Now launch  dev_appserver.py, but this time declare a datastore path as a command line argument. This is the –datastore_path= option. Also run it with a –default_partition of “” (empty string), to mirror production’s data.
  3. Now that you have a dev server running on localhost with a defined datastore file, upload your data to your dev server with appcfg.py (by using the –url option pointed to localhost).
  4. Once uploaded you can now shut down that server.
  5. Now run a dev_appserver with the commands that you usually run with (the –address flag), but add a –datastore_path pointing to the datastore file you used in step 2.
  6. W0ot!
A lot more cumbersome than just doing a simple download/upload routine to test stuff locally. Of course, I may be missing something entirely as I’m still relatively new to GAE, and there may be a way to do this with a local dev server that is running on an actual LAN ip instead of localhost, but I haven’t been able to find it. Hopefully this will prove useful to those using GAE for their iOS apps as well, or they’ve found a better way to do this and can leave a comment :).

We’re still balancing Outwitters gameplay. When thinking about changing, removing, or adding gameplay I try to keep two aspects in mind, choices and unpredictability. I’ll speak to the choices aspect today, as I’m still trying to grapple with that whole unpredictability thing in a turn-based perfect-knowledge setting. When we set out to create Outwitters, we wanted to make a simplified strategy game. One where players can easily pick it up much in the same way they pick up an iOS arcade game. The reality of the situation is this has become extremely difficult to achieve. I have a strong hunch it’s harder to do in our game due to the context in which our players are using strategy. It is essentially a “war” game. Players do battle with each other over vivid, colorful venues with fun-looking characters. The overall goal is simple: Destroy the opponent’s base. But the way in which you achieve this goal can be complex. If we make the choices too few and too simple (ie, with the arcade game mentality) the game itself becomes uninteresting very quickly even with a human component on the other side. Just about every “enhancement” to the gameplay we think of adds complexity to the game rules or mechanics. It adds “potential” fun to the initiated, but raises the barrier to the uninitiated. I feel there could be a strategy game idea out there that isn’t centered around battles/violence that could exhibit arcade-style ease-of-play but still have an interesting depth to it.

The Scrambler overtakes enemy units and makes them change to your team

An example of making player choices too simplified can be found in an earlier build of Outwitters. In Outwitters each player has a team of characters to choose from. Each team shares 5 of the same units (just different looks), but 1 unique unit to that particular team. Each turn a player has the choice to move, attack, or add a new unit to the game board based on points the player can spend per turn. In an effort to simplify the game, we made the cost of adding a unit to the board the same for each unit. Every unit cost the same, even the unique ones. We thought removing the barrier to learn how much each unit costs helped make the game rules easier to digest, and also focused more on what units you chose to spawn (strategy) rather than trying to manage your points. We found a couple of issues with this approach.

Firstly, this limited the effectiveness of any particular unit. We couldn’t make any unit be greatly powered in one particular aspect, especially the unique units, because they would instantly become the dominant strategy. Since every unit “cost” the same to acquire, the units had to be somewhat similar in damage and range capabilities. Secondly, because no unit had no obvious advantage over another, newer players floundered in picking the “correct” unit to add to the game board for a particular strategic situation. When players became experienced with the game, they understood the nuances of each unit and started using them more effectively to gain that little edge they needed to get the jump on another experienced player. The problem with this? You had to become “experienced” to have a decent understanding of the unit choices.

Bombshell is able to do splash damage to several tiles at once

So we decided  to change a couple of things. Our original idea for Outwitters was for players to choose their favorite teams not just on aesthetic choices, but strategic ones as well. The current state of the game was heavily in the ‘aesthetic’ camp for team choices. We made the unique unit for each team cost twice as much, and also made them much more powerful. This had a positive effect in that it made unit choices much clearer and focused for newer players. This extended even beyond the unit choice screen and into the overall playing strategy of the game. Before this change, I’d see new players just do random moves because they really can’t see how their actions would effect the game beyond a couple of moves. Introducing, for simplicity’s sake, a “hero” unit, players began to focus their strategies around that unit’s strength. It’s what we wanted to begin with! Players clung to their hero units because:

  • It cost a lot. The loss of a “hero” unit was painful.
  • That hero unit’s actions clearly implied how it’d effect the game. If a hero unit could do 2-3 times as much damage, or transport waves of units across an entire map, or take over enemy armies *easily*, the player can easily make the connection and think, “hey, this is an easy way to attack the enemy’s base and win”. Before this change I felt like the answer to attack an opponent’s base was far less clear for inexperienced players.
Giving players that super strong unit gave them a focal point. Sometimes it may not be the most ideal strategic focus, but it’s a start for newer players. The downside? I feel that we  gave up some elegance in the game rules in favor of depth. The very thing I cited earlier where just adding more rules generally makes a strategy game more “interesting”. But on the up side, the choices a player makes is now clearer. It’s been a difficult task to try to simultaneously minimize the number of choices a player can make,  make those choices relevant and clear, and to maintain strategic depth to the game.

Mobi can "launch" units towards the enemy base by sucking them in and spitting them out

My first week off the iDevBlogADay rotation and I miss my usual Friday post. Go me. We’ve kind of hit a period where a lot of work is getting done, but an ever growing mountain of work is coming up on the horizon. Polishing a game is hard. Polishing an online turn-based strategy game is really hard. The simplest things take 3-4 more extra steps to do whenever you incorporate a server into your game’s architecture. Noted. Turn around times are my biggest hurdle due to the larger scope of the game and Xcode’s stupid way of managing resources. Left to it’s own devices, it doesn’t copy new bits every time, so a work around is to essentially ‘touch’ the root folder to have every resource re-copied on every compile. The downside? Long deployment times due to a huge number of assets. To help mitigate this I wrote in some asset hotloading into the engine so  I can iterate on UI a lot faster. It was definitely worth the day of implementation.

And now, I’m starting to see the value of unit-tests even though I’m not doing them yet. In prior games, the code base was small enough, the turn-around time so quick, and the permutations of input so limited, that it was the same amount of time, if not quicker, to simply run the game, test the UI or mechanic, and fix it. But now, the actual game logic complexity is growing so much that whenever I’m met with a new thing to implement or test I get a sense of dread of how many turns it takes to setup a game board, execute the test, and when it inevitably fails, debug it and try again. I don’t think it’s too late for me to start doing unit-tests, so I think I’ll get that going. The game’s setup I think lends itself well to unit-testing since all the game logic happens separate from the visuals. I don’t think it’ll be completely necessary for me unit-test the visual stuff (due to the nature of the thing), but having just a few unit tests covering the game logic will really help test those obscure edge cases that would be a pain to test manually, as well as help stop regression (which is already happening)

Now I’ve tried doing unit-tests before in older game projects and hated it. Why? Because I didn’t get the sense that I was  getting much benefit from it versus my old way of just running the game. it just seemed like an exercise in typing more code.  It’s interesting to note, that a lot of the advice one hears from devs about the more mundane tasks of game development (hot loading, unit-tests, asset pipelines) become this ‘awesome thing’ that saves the day when you finally hit a point in your development cycle that would tangibly benefit from it. Academically, I was told repeatedly to write unit-tests. In the “real world”, I saw no explicit need for it, until now. So I guess the takeaway is don’t blindly follow other devs’ mantras unless you can see where it makes sense, but be knowledgeable and aware of them. In the case of unit-tests, it didn’t start making sense until last week when I was seeing how much time I was spending “playtesting” the game for bugs and such. Experience is the best teacher as they say.

I’ve been making a ton of progress on Outwitters lately. Although when I step back and look I still see a mountain of work left to do. But I *do* feel like I’m whittling away slowly at it. All of the core gameplay has been implemented for local play. Online play works in a non user-friendly manner and is still missing a few bells and whistles to make it stand apart from the typical affair. I always recognize this stage of development as when the game starts transforming from a toy/prototype/hobby into a commercial-ready product. Most of the ‘fun parts’ of game development are behind me (Although I’ve saved a few for the rainy days ahead), and now it’s about focusing on all the less glamorous parts of making it a usable, marketable  game. Things like player preferences, profiles, UI, first-run initializations, etc are rising up on my to do lists these days. Oh, and lots of testing/debugging. Very much your typical software development role. At a glance, very similar to any given dev job in the business world. Only thing is my object models have cannons, health points, and spells instead of accounts, transactions, and employee data :).

One thing that has constantly surprised me is the amount of data we’re dealing with this game compared to Tilt to Live. It’s immense. A quick file count shows there’s about 3500 files in our ‘data’ folder, which contains images, sounds, maps, and animations. The tools I wrote work on game data in kind of a ‘macro’ view, where editing one, it goes ahead and updates all affected files throughout the project to maintain links and references. Without our tools/scripts it literally would’ve been impossible to iterate on anything. Sometimes it’s aggravating having to go in and ‘fix’ a tool or update it to reflect a new data format change where it’s sometimes easier to just edit that *one* file. But by constantly having the mentality of trying to keep human hands out of the asset pipeline beyond the actual drawing and designing, I’m always reminded it’s worth it when I launch 2 scripts, and come back 2 minutes later and all assets are packaged, sized, meta-data generated, and placed in the xcode project directory ready to be deployed.

I also suppose this is my last iDevBlogADay post, or at least until the new incarnation takes place. With or without iDevBlogADay I’ll be keeping to this bi-weekly schedule as best as I can. Hopefully, after Outwitters is released I can write up a bit more useful content beyond just a dev diary :).

Wow, Friday almost flew right past me. I’ve been working on Outwitters practically non-stop. A lot of the major ‘components’, as I like to think of them, have been figured out and implemented in some sort of fashion. Now I have to make this big herculean effort to get it all integrated and seamless:

  • 1v1 and 2v2 pass-n-play
  • A couple of teams and their animations and unique powers
  • The ever crazy complicated (implementation-wise) UI
  • Asynchronous play using Google App Engine

Aside from team animations/powers, all those things exist in kind of their own isolated ‘prototypes’ in one way or another, and now I’m trying to get it all under one “roof”.  Our 1v1 and 2v2 pass-n-play are fully functional. We’ve had a few playtests of the 2v2 game mode with family and friends and it’s been a sigh of relief to see them genuinely enjoying themselves. Sometimes, you don’t have to look at the actual game to see if the player is ‘getting it’, just looking at their laughing faces as they all play against each other is vindication enough that you’re on the right track. The bigger task at hand his trying to make this game as close to engaging as possible in the asynchronous model as it is when in a small group of players. Realistically, we’ll never achieve that, but it’s something to shoot for.

In other news, I got my standing desk in the beginning of this week and I’ve just finished my first week of ‘standing’ while I work with my new desk. I tried it out first for a week with a small glass-top high breakfast table and liked it enough to invest in an actual standing desk. Of course, I’d like to sit in the evenings so having something adjustable is extremely handy. Noel Lllopis had mentioned his foray into this work style a while back, so I took his and several other dev’s recommendations and went with a GeekDesk, and I’m loving it. With just a couple of weeks of doing it, my back doesn’t feel completely owned every morning when I wake up (I have a bad sitting posture). I find that whenever I’m brainstorming, or thinking about a problem I tend to pace around the room or go to my whiteboard to draw stuff up. While standing, this feels a lot more natural and I tend to move around a bit more during the day. Another plus, is during the mornings I’m finding I’m a little more focused on getting through some of the less enjoyable parts of the job like managing money, bug hunting, etc.

Unfortunately, I don’t have much else to share at the moment other than Outwitters is shaping up to be pretty freaking cool. Only time will tell if we’ll be alone in that opinion.


Keep in mind, a lot of the rambling below is in the context of me being neck-deep in working on Outwitters, which is a strategy board game. I’m constantly thinking of ways to present games, their systems, and their objectives to people. Notice I said people, not gamers, or casual gamers. Sometimes I even look around my own environment and question “why the designer wrote that message the way they did”. Sometimes it’s obvious they gave little thought to the message and scribbled it on some printer paper for all to see on their store front. Sometimes it’s spot on and even clever. Other times, I question their decisions:

I’m constantly always surprised by how confusing traffics symbols can be. When your speeding down a new stretch of highway at 70mph you don’t really have a “2nd try” at figuring out what a sign means. Sure, the locals all know that this exit sign is mis-labeled or too close to the actual exit to realistically act upon it, but I’d argue those signs should be made with an emphasis on new people to the area.

The Mistaken Non-Gamer

In any case, I think about this habitually, but sometimes I wonder if it’s even making a difference to a certain segment of the potential audience. I can really only speak from personal anecdotes, but I’m starting to think reaching out to the “non-gamer” crowd is less about how well your UI is designed and more about how socially engaging it is. I will use my mother’s gaming habits, for lack of a better example.

She will not play a new game on her own accord. She does not seek them out, and the usual ‘marketing venues’ one would use to garner an audience for an iOS game completely bypass her and her demographic. I can hand her a game, but she will ‘demand’ that I tell and show her how to play it. If I walk away, she’ll lose interest. If I stay, she won’t bother with tutorials or help menus and simply ask what to do next. For her, games are social experiences and she has to be ‘introduced’ to a game by another physical person who already knows the rules. But once she does understand the game, she’s no less engaged or competitive than a ‘typical’ gamer. Am I crazy in thinking there’s a large segment of the audience like this that is incorrectly labelled as a ‘non-gamer’?

No amount of well though-out UI design, tutorials, or marketing will capture this kind of person. Is this why Nintendo struck gold with the Wii since the vast majority of their mega hits were multiplayer-centric wii games? Were they able to tap the “non-gamer” market by selling an experience that was championed by the gaming enthusiasts who brought home these devices to their curious “non-gaming” family members?

The “Gamer”

Then there’s the typical, mainstream view of a gamer. He/She isn’t afraid of new systems or paradigms. In fact, they seem to be curious and love trying out novel ideas, and don’t require another person to introduce them into the game. When something confuses them, they don’t throw up their controller in frustration, or look to a friend to get an answer immediately. They fiddle with the controls, dig through the menus, and sometimes even go online to find an answer. To them, a well designed UI means something and there’s a tangible benefit in reducing the friction to learning how to play the game.

I imagine they have their limits though, present them with a genre they feel they don’t care for and with a ruleset that takes a little more than a minute to understand and they’ll probably walk away from an experience that might’ve actually been pretty fun. Or, hell, get a console gamer to try to install, setup, and play a PC game and you’ll see what I mean, all before they even get to run the game.

Then there are hardcore gamers who just love the idea of solving problems. Games in themselves largely revolve around this fact, and anything inside or outside the game’s fiction is a problem waiting to be solved. This sometimes borderlines on ‘geekiness’.  Picture the guy that will tinker with his computer for hours to get a game to work. No amount of rules, or depth will deter them from at least trying to get involved in a game they see as potentially enjoyable.

These kind of gamers can introduce games to “non-gamers”, and the great social experience that results is better for it.

Now Back To Design…

For the iOS platform, who do you design for? It seems trying to come up with clever ways to engage the mistaken non-gamers through tutorials and UI won’t help them directly as they depend on social interactions to guide them through a game. Think of new players playing a board game for the first time with family or friends and how that interaction ensues. This is where they get most of their information. Yet, if you design with the ‘non-gamer’ in mind, you’re helping the actual gaming crowd gain easier access to your game, which hopefully will result in them being the person that introduces this game to their friends and families. In a weird way, you’re designing systems and interactions to help someone become a living tutorial for your game.

Does this mean if you wish to target the “main stream”, and as a result, the widest audience, that you should be designing games with social interactions being the core of the experience? It seems a good number of the recent iOS successes are building off of this idea. Given the pressure in most gaming enthusiast circles to always have some sort of solo experience built in, do you even bother with it knowing that most of your “non-gaming” audience doesn’t even care for it? For example, is a single-player mode for Monopoly really necessary? I could never envision my family or friends playing on their own, but put them in a room together and it’s usually a great time.

It’s all interesting stuff to think about as I look at how Outwitters is shaping up to be versus how we originally envisioned it so many months ago. The social experience I think is absolute key in making a game like this widely approachable.



Tomorrow (June 18th) marks the first year anniversary of me becoming a full-time independent game developer. Wow did the time fly by fast! Over the course of the past year I helped launch Tilt to Live HD, Lite, a couple of major gametype updates to Tilt to Live for free, a paid Viva la Turret update, and finally released a multiplayer co-op mode for both our games. When I think about it that way, it’s definitely been a busy year. I sometimes forget how much content we added to Tilt to Live and Tilt to Live HD, and sometimes I think to myself “man, it’s been almost a year and all we’ve done is 1 game…”.

I don’t think I could think of a more full-filling career than a independently creative one as this. I set my own hours (admittedly probably too many hours), I take days off when I feel I need to or want to. And one of the most fundamental changes I’ve noticed over the months was how I’ve lost track of holidays and weekends. Now that I wake up to go to work (rolling out of bed, freshening up, and walking into the next bedroom) eager and excited for today’s challenges and problems, I’ve found I don’t even care what day it is anymore. In school, and in previous jobs, it was always hard to not think of or be reminded of the next upcoming weekend or holiday. It’s as if people’s lives revolved around them. While I still look forward to weekends because most activities with friends and family tends to be on those days, but I guess I don’t have such a severe case of the “Mondays” as I use to :).

Looking back, if someone was wanting to go the full-time indie path with iOS in mind, what would I tell them?

Don’t chase the fads

If you’re trying to ‘one-up’ a current trendsetter, you’re not ever going to be the trendsetter. Everyone knows about Angry Birds, but you’ll never get that kind of mindshare trying to out-do Angry Birds. It seems to ring somewhat true the iOS market rewards games that bring a bit of something new to the table or ‘best of class’. Games that are top of mind that bucked the trend and did their own thing would be Pocket Frogs (talk about being a trendsetter :P), Casey’s Contraptions (this game fits so well with the iPad, it’s hard to see it not succeed), and Tiny Wings (bird themes aside).

If you have an idea that is a really interesting twist of a current game genre, or a game idea that you haven’t seen executed with much success on the app store you should probably try giving it a go. If the game flops, you’re in the same position as someone who made a ‘trendy’ game and flopped. If it succeeds, you own that niche and the rewards, emotionally and financially, can be great. With that said, don’t be different for the sake of being different. Anyone can look at Tilt to Live and see the obvious influence of Geometry Wars in it. What made it stand out? It used the device’s novel hardware to the fullest, had a non-typical art style for that genre and Geometry Wars wasn’t on the app store yet (phew). Outwitters is the same deal. There are plenty of turn-based strategy games out there already. We just haven’t seen one with our particular brand of humor and art style with a focus on simplifying the strategy element rather than trying to make it artificially deep with tons of units/choices. The takeaway is make the game that you want to make and think could succeed, not the game that the top 10 charts are telling you are currently succeeding.

Shipping a game is half the battle, and I’m not talking about marketing

Marketing and promotion aside, the iOS market has a very different set of expectations when it comes to games. The PC/Console market is very ‘packaged goods’ and ‘pay once’ oriented. We started out with that mentality thinking we would ship and move on. Yet, we’ve submitted probably over 10 updates to Tilt to Live alone, the vast majority of them adding major pieces of content and actually changing the game. The Tilt to Live at launch is no more, and Tilt to Live of today is a rather different game. We added multiplayer in Tilt to Live a year after release. People expect that their games change, and for the better. When scheduling time for a game development cycle, the ‘ship date’ is far from the end of that product’s life cycle. Pocket God is the poster child of embracing this kind of thinking.

The challenge for the developer is trying to find a way to make this sustainable. I think developers are starting to catch on that there is an audience willing to pay for the extra content, so that they can fund even more content for the games that they like. If you’ve got something on the app store people are liking and clinging to, give them more of it! We added a bunch of free content to Tilt to Live, but before moving on we wanted to give players a chance to experience one more idea we had in our heads, but without funding it just didn’t seem feasible so we charged for it. Despite all the flak from the vocal minority, it was successful. Successful enough for us to take the time to update that new gametype with it’s own Co-op mode as a free update. Free updates helps build endearment towards the developer, but it’s a two-way street. Let your customers help support you as well, it is a business after all.

Your first, second, third, or even fourth game won’t “succeed”

It’s hard to speak to this point because I got extremely lucky with Tilt to Live being our first iOS game and also being a decently successful game that allowed me to launch my full-time indie career. But with getting to know other devs in the community, and watching their trials and triumphs, there seemed to be one common factor between the ones that did “succeed”, and it’s not giving up. As cliche as it sounds, it’s hard to overstate that trait. I’ve seen several times throughout the year, a dev that stuck to their guns and eventually one of their games hit a sweet spot and became successful. The ‘overnight success’ I think is a myth that the media tends to give too much credit to and is easy to fall in love with. If you look at the history of just about any of the top selling games on iOS, you’ll find more often than not this person or team has been doing this for years prior, and sometimes in complete obscurity, like us. I’ve had communications with some devs over the months after they launched their first or second game, and then slowly disappeared from the community after those games weren’t break out ‘hits’. I was on about a month long dev cycle for each gametype update on Tilt to Live. I actually believe that had we released each one of those game types as stand alone games, the only one that would have any chance of success on its own would probably be Viva la Turret. So I tend to think of those other gametypes as our small ‘failures’ in a way as they never really became more popular than Classic or Code Red, but we were sheltered from disappointment because they were a ‘side dish’ to the main Tilt to Live game. Not everything will stick, you have to try hard to stay motivated through the ‘low times’.


So here’s to hopefully another wonderful year of the indie life!