Game Design, Programming and running a one-man games business…

The land grab for gamers eyeballs

I enjoy reading about the early days of the internet. I have a strong feeling that only one guy really understood it. Only one guy really got what was going on, and what to do. I don’t mean Bill gates, or The google guys, or Steve Jobs. I don’t mean Woz, I don’t mean Tim Berners lee. I mean Jeff Bezos.

Jeff Bezos understood that the internet was like a big new country being discovered, where all the land was free. And soon, everyone would be emigrating there. Whoever owned all that land would be very very wealthy and powerful. He Realized he had to ‘get big fast’ and more importantly he realized that it was a long term win, where if you didn’t make money for a decade, in fact if you absolutely threw money down the drain for the first decade, it didn’t matter, as long as you won.


Gaming is pretty big, and it’s getting bigger. For a long time, gamers were just kids. Nobody over 30 played games. It was a niche thing. You wouldn’t make a living doing it. Then it became something that made decent money. then game developers started driving ferraris. Then Call of Duty started appearing on the news. The Minecraft happened. And so on…

Gaming is like a great big country waiting to be conquered, and right now, we do not know who has won. Some might say apple have won, because of the app store. others say maybe Microsoft win by default, due to the X-Box and Windows. or maybe Valve have won? or Zynga? The important thing right now is *we have no clear winner*. And long may that continue.

Thankfully, there is still a slight element of the free market in gaming. There is Kickstarter, Humble Bundle, Gamersgate, D2D,Steam and GoG, and that’s just third party PC game stores. We have some clear frontrunners but nobody has actually ‘won’ yet. I do have a great fear that the main word there is *yet*. As consumers, we will do absolutely NOTHING to maintain the free-market and level playing field. It’s just not in our nature. We worry that the supermarket will out-compete the local butchers, but we drive to the supermarket anyway because they have convenient parking. We are not the best guardians of free markets and competition. We are also, on the whole, oblivious of the fierce war being fought for our loyalty, our eyeballs, and our attention. Attention is everything. I *REALLY* want you to visit my site and buy my games from there, or at least hear about me as an independent entity. If I could guarantee that you would buy my next few games from my website, it easily makes sense for em to offer you my current games for free, or even at a loss.

Indies don’t generally think like this. Especially with their first game. You normally have bills to pay, and getting into debt is scary. If you earn $1,000 in a month, the thought of spending that $1,00 on adverts to get people to come buy your current game at a loss…. that’s madness right?

That’s what Jeff Bezos did.

Me…I don’t quite have the balls for that, but I’m pointing out that the big boys out there who want your eyeballs do. There is a war going on for the attention of gamers. To the winners go huge spoils. It’s fascinating, exciting and frightening to see. I just hope there’s still room for little old me.


Polishing what you have

I sometimes think indie game developers get a little bit carried away with new features. They cram in new stuff, in an excited and passionate way, without stopping to think that they should probably get last weeks feature working better first.

I hate to name names. Finishing ANY indie game is impossibly hard. You might notice that generally speaking, developers don’t criticize each others games. I did some twitter ranting recently about how Assassins Creed III seemed to be designed to torture me, but I try to avoid such rants. And most of that was ranting at stupid business decisions (unskippable crap, uplay, etc), rather than poor game design. I couldn’t get far enough into the game to even really play it…

…So I won’t name names, but I have played a few indie games recently where I wonder why they bothered adding new feature X, when old feature Y was half-assed. I am of the opinion that I’d rather have a feature not included until it can be done right. Feature-lists do not sell games. Quality, fun and atmosphere sells games. I thought GSB would sell better if I added the ‘feature’ of direct-control. It made no difference. (BTW the game sold VERY well, I’m not complaining…).

The problem is, developers come up with a new idea, and all they care about that week is the new idea. In a big studio, you have some dude in a suit (metaphorically) with a clipboard (ditto) who says stuff like “Dude, X is not on the approved feature list for this build. We need you to improve the agreed features so they pass QA”. As an indie nobody says that. You dream up some mad idea, and you race off to do it, forgetting that none of the buttons in the game have mouse-over tool-tips or a highlight state or crop text to fit because… fuck that’s so BORING! and the new cool feature is both NEW and also COOL.

I believe this to be a mistake. When you come up with a cool new feature, just write it down. When the game is finished, polished, bug-free, optimized, awesome… if you still have the time/energy and money, you can look at the idea again and see if it still feels so ‘must-have’.

A lot of indie games have historically shipped in an unpolished state because the developer is

  • bored or
  • penniless.

Now we have kickstarter, people can say it’s a beta and who cares :D But I’m still a believer in making sure you polish what you have. There are some hit games out there which are not at all polished, but I’d rather not gamble on making one of them. Polish is GOOD.


The Humble Positech Sale

So today is exciting because it’s the start of the HUMBLE POSITECH SALE. You can go grab the games and donate to charity (and the developer!) over at the site here (or click the image below)


It’s especially cool to have been involved with picking the charities for the bundle, which are the red cross and barefoot college. Who? well I first heard about barefoot college after watching as really cool documentary on them in the UK, where they followed the path of a woman who was taken to the college to learn how to manufacture and maintain solar lights. The idea is that they take those skills, and that independence and spread it to other villages and other people. This is quite a tough struggle against poverty, indifference, and quite a bit of sexism too. The documentary is great and it’s a worthy cause. And of course it supports renewable energy, which I’m really into.

But hey, also, there are some cool games of mine there. And they are at a good price. Go grab em. or tell your friends!  or both! And there are videos of me talking about stuff too…

The Democracy 3 Compass

So here is a half-finished feature I’ve added to the main menu for Democracy 3. It’s a chart showing the last 50 election wins you had in the game, with the icons representing the countries you were playing at the time, and they are printed onto a left/right liberal/conservative axis so you can see what the state of the nation was at the time. In a way, this is a clue to your own political opinions and prejudices, as presumably you will gently be nudging all the countries in a similar direction.


Next up: finding a way to populate the chart with the average positions of any of your steam friends who are also playing the game…

Some optimization tips for game programmers

I’m enjoying myself with some optimizing today (yeah I’m weird like that). So I thought I’d jot down some of my tips for making your game faster. These are general, not language-specific tips.

Never run code you don’t have to run

Seems obvious but few people actually do this. For example, in democracy 3, the simulation calculates the popularity of each policy by asking every voter if they benefit from it. That question is complex, and there are a few hundred policies and 2,000 voters. This takes time. Solution: I only ask them about a policy if I need the answer right now. Some policies can go a dozen turns without the player ever checking their popularity, so why keep calculating it?

Batch Stuff

If you have a dozen icons that are always drawn one after another on the same screen, stick them in a texture atlas. If you are 100% they will never overlap, then draw them in a single draw call. the less texture swaps and draw calls, the faster your code. This is trivial to do in 3D, an absolute nightmare to do properly in 2D, but it’s worth it.

Cache Stuff

If you have a variable that is complex to evaluate, evaluate it once, then cache it until it changes (we tend to call that setting it ‘dirty’). If there is some data that is going to be accessed a LOT, then make a local copy of it. And if you have a lot of stuff to write to disk, to the same file, buffer it. Writing to or reading from a file is slow, especially if you are going to do it a lot. Reading in a single file is much quicker than opening 200 of them one after another.

Don’t use sqrt()

Do you ever use sqrt()? never realised how scarily slow it was? Most of the time you can keep the squared result and use some clever tricks to not actually need the sqrt() result. If you were going to get the sqrt() and compare it against a value, just multiply the comparison value by itself and check it that way instead. it’s amazingly faster.

Use the right container class

Sometimes you will use a list where a vector will do. The vector is MUCH faster. And you know what is faster still. I mean REALLY fast? An array. If you really need speed, and the array size won’t change that often, allocating an array of items is much faster and is worth the overhead.

Re-use objects

If you have a collection of objects that keep getting created and destroyed, you want to wrap that up. Stick a factory object around them to handle their construction and destruction. That way, you can just set them inactive on destruction, and save yourself the hassle of the creation and destruction when it comes time to re-use them. Setting a single flag to say an object is ‘dead’ is way faster than calling a destructor, and resetting is way faster than a constructor.

Obviously there are lots more tips, and you should get a decent commercial profiler. That PC you develop on is a super-computing beast. if your game takes more than a few seconds to load, you are being sloppy.