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

Academia: School simulator

Squeaky wheel, the guys who made Political Animals (which I published) have a new game coming to steam early access in a few days. here is the trailer:

And here is the store link.

Hope you like it :D. I think it will do very well indeed… if you think ‘oh itts that same style for art everyone is cloning’ then…well yeah, that’s ryan’s art. he did the artwork for Prison Architect which started all this, so he gets a free pass :D

Stressful week

So I had some bugs in stockpiles, and I tried to fix them, and it got more and more tricky, and eventually yesterday I had a bit of a code epiphany and this morning I deleted hundreds and hundreds of lines of code and wrote a few dozen new ones and now finally seem to have a stockpile ordering system that does (as far as my testing can see so far today) everything I want it to.

It was pretty stressful trying to fix it, as when i have buggy code I cant fix, it really does bring me down. So last night I was typing away in visual studio, occasionally with my head in my hands after a bottle of wine, quite late, and quite depressed/annoyed thinking…

“Why the fuck do I try and make such complex games to such a punishing schedule. Why don’t I just do some buy-to-let properties and retire like any sane person…”

Luckily I feel tons better today, but its important to note that people tend to only turn to social media to talk about game development in a good mood, and its not all roses. so there..

On a happier note, here is todays’ video blog :D

Coding post: Prop pre-draw optimizing. Thinking aloud.

Typing out my thoughts often helps.

Production Line has lots of ‘props’ (like a robot, a filing cabinet, a pallet, a car window…). They could all be anywhere on screen. They are however, all rendered in a certain tile. I know with absolute certainty if a tile is onscreen.

Before actually rendering each prop, I ‘pre-draw’ it, which basically means transform and scale it into screen space. I do this on the CPU (don’t ask). To make it fast, I split all the tiles into 16 different lists, and hand over 16 tasks to the thread manager. In an 8 thread (8 core) setup, I’m processing 8 props at once. I allocate the props sequentially, so prop 1 is in list 1, prop 2 is in list 2, and looping around so i have perfect thread balancing.

Its still too slow :(

Obviously given the tile information, I can just ‘not transform’ any prop that is in a tile that is known to be offscreen. I already reject this early:

void GUI_Prop::PreDraw()
if (!PTile->IsOnscreen() && FallOffset == 0)

But the problem is I’ve already made the function call at this point (waste of time) and checked IsOnscreen (a simple bool…but still…). Ideally this call would never happen. A tile that is a stockpile with 16 pallets and 16 door panels on it has 32 props. Thats 32 pointless function calls. Clearly I need to re-engineer things so that I only bother with this code for props that actually are in a tile thats onscreen. That means my current system of just allocating them to 16 lists in a roundrobin fashion sucks.

One immediate idea is to allocate them not as props at all, but as tiles. That means my proplists would be a list of props (each of which can iterate their tiles) and means at draw time, I’m only checking that PTile->IsOnscreen once per tile, rather than up to 32 times. One problem here is that a LOT of tiles have no props at all, but I can fix that by only adding tiles to the list the first time a prop is added to a tile. To be really robust, I’d have to then spot when a tile was clear of props and call some ‘slow but rare’ code which purges it from the appropriate prop list. That can be done in some low priority code run during ‘free’ time anyway.

I’m going to undertake a switch to this system (its no minor 20 minute feat of engineering) and then report back :D



well I *think this increased speed by about 50-80% but its really hard to be sure. I need to code some testbed environment which loads a save game, then spends X seconds at various locations and camera positions in order to have reproducible data. The speedup depends vastly on the zoom level, because its basically saving a lot of time when a LOT of the factory is offscreen, but introduces maybe some slight overhead in other circumstances, because there are now 2 layers of lists to iterate. the tiles and then props-within-a-tile. When zoomed in, thats still vastly fewer function calls.

Also it really depends on the current code bottleneck. The code is multithreaded, so potentially 16 of these lists are being run at once. If the main thread was dithering waiting for these threads to complete, this speeds things up, else nothing is gained. My threadmanager hands tasks to the main thread while its waiting so hopefully this isn’t a concern. I shall await feedback on the next builds performance with interest.


An indie game developer posts about introversion

Ha. Thats me just being funny in a way that will mess up Chris & Marks SEO efforts :D

But seriously…

I’m reading a cool book, called ‘Quiet‘. Here is an exciting screenshot of the cover!

I’m about 50% through the book, but feel motivated to mention how good it is. Normally I’d post stuff like this to facebook, but meh…do I really want to be monetised, scanned, aggregated and catalogued just because I like a book? Anyway. This book is pretty awesome. its basically all about introverts, what is feels like, why its not a bad thing, how you get treated by other people, and most interestingly, it raises awareness of how society treats introverts.

I’ve never really thought about it before, but there is an implicit assumption that extraversion is good. When you see someone who is loud, confident, shaking hands, smiling, hugging people and laughing, you assume they are good people, worthy people, people who are going places, high achievers, people you can trust…blah blah. Almost all politicians are extraverts, they shake tons of hands, do the proverbial kissing of babies, they speak confidently with no equivocation, they often have louder voices than normal, they never, ever shirk from public appearances…

This book makes it clear that this can be *really bad*. Some problems (like climate change) are best dealt with by people who are quiet, reflective, deep thinkers. It brings to mind the old joke that ‘we must do something! this is something! lets do this!’ which is pretty much the attitude of most politicians, and the cause of many a poorly thought out law or economic policy.

Of course, not all walks of life are as obsessive about extroverts as politics, but the entertainment industry and games is definitely one in that general area. To succeed 9we are told) one must go to games shows, shake hands, talk to everyone, be confident, be outgoing, be personable. Go to all the GDC parties, and meet new people! Walk up to journalists and pitch your game to them! Practice your elevator pitch!


Thankfully this good will make you feel good, happy, content to be an introvert. It will also open your eyes to the very low-key preference for extroversion in the media. In my own tiny, tiny way, I am trying to support introverts by not being stupidly LOUD AND EXCITABLE when I do my video developer blogs.  My part in the great war :D

Early Access progress for Production Line

I recently released Production Line update 1.29, so that’s 29 updates since the original release of the game, which was back in the pre-early access days, and just for people buying direct from my site. In that time, what’s happened?

Well, we have more than doubled the players of the game since going into Early Access, which is cool. Not surprisingly most people now buy direct from steam rather than through the humble widget, which means we earn noticeably less per sale, but that’s to be expected. Income from the game is ‘ok’, in that compared to Democracy 3 it hasn’t set the world on fire, but then the game has already paid for its dev costs (minus my salary, which I don’t count directly), and if I do the maths, its paying me a reasonable income for a senior software developer, so from a financial POV, things aren’t that bad at all.

Plus its still in Early Access, so I’m expecting a nice fat bump when we eventually declare it released, a second bump for the first time its discounted in a steam sale,  and so on.

Working out what to do regarding promoting the game has been very tricky. Take a look at this, at first seemingly interesting chart:

The trouble is, that big spike is a steam sale (we were not even discounted, but extra eyeballs etc…) that final peak at the end is the first steam visibility round which I triggered yesterday. I’m trying to work out if its worth spending money on ads right now. There isn’t a strong correlation between ad spend and higher profit, but it does result in higher income overall (as you would expect), and there is an argument that higher overall player counts will lead to building virality and higher long term sales.

My gut instinct tells me I need to nudge the games approval higher (currently 84% positive in last 30 days, 78% overall), and also include my own internal in-game metrics reporting which gives me this:

Which is good, but could be better. Especially stability. I need to see roe examples of crashes and fix them. Essentially what I’m getting at is that the game feels ‘good’ but not ‘great’ in terms of how people respond to it, and I want to save my marketing firepower for when the conversion rate is really high.

That brings me on to the whole pricing strategy debate. There has been some interesting and well-argued talk lately about indie games being under-priced lately. I have a lot of sympathy with this view. I am a bit biased in this area due to being relatively cash-rich and time poor, which is the opposite of many gamers and mean basically I all-but-ignore the price of a game if it looks like I’ll enjoy it. I own the premium edition of Battlefield one (enough said :D).

The trouble is, when I browse games on steam in the top sellers for the categories that interest me, I do not see acres and acres of crap, which is how many devs describe indie games new on steam these last few months. Granted, there are a lot of poor quality, unplayable, useless titles in steams bargain bin, but what do I care? I’m not trying to compete with someone’s first unity effort, I’m a guy with 36 years of programming experience, and multiple million-dollar selling games under his belt.

To be blunt, I’m competing with Factorio, RimWorld, Prison Architect, and their ilk. These are my competitors. I don’t give a damn about the price of other titles.

And given the huge feature-set of some of those games, and their long development history, and their current prices, and the fact that Production Line is still in development…could I really increase the price yet?

I don’t think so. Its still $15.99.

On a related point however, I always felt, from the very first time someone did it, that having a sale on a game during Early Access seems a bit weird. Its like the game is not even properly on sale yet, and you already don’t think its worth what you are asking. It sends, in my opinion, a signal of ‘we just cant wait to discount this game! just you watch!’, and I think that can be unhealthy.

Production Line entered Early Access at $15.99 on May 18th, and 3 months later its the same price and has not been discounted a single cent. I’m fairly happy with this as a pricing strategy and have absolutely no plans to run a discount on the game in the near future. I think this sends a bit of a quality signal, even if its a small one.

Anyway… Patch 1.29 is under my belt, Sports Cars and Design studios will be coming soon. Eventually it will be time to do Hybrid/Electric engines, Quality and Defects, along with more marketing. Still plenty to do, and still in early Access for a while yet. The main thing is that I enjoy working on it, and its not causing me any actual stress. I also really enjoy playing it myself, which is always a good sign :D