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

A bug that will become a feature (but a worthy one)

So I’m working on various stuff I’m not talking about yet for GSB 2, and I ended up with the image below. All looks fine, it’s a ship nicked temporarily from GSB 1, with some tweaks, and I found a bug. The bug is a bit of a pain, and it’s those 2 little axillary engines in the middle towards the bottom. Those engine glows are not supposed to be there, they are supposed to be under the ship.

Image2

But they aren’t.

And I could fix this really easily, but actually, it is kinda cool. I mean…why *shouldn’t* i have a few ships with engines that sit above other elements of a ship? the more creative freedom the artists have the better right? and that way the glow from the engines will illuminate the ship ‘fins’ in dark battles. It will look cool. It also means a shedload of irritating fiddling with code that already looks like a psychotic kitten has had a panic attack in a spaghetti factory.

but hey, I’ve trained myself never to think like that. If it makes the game better, I’m going to commit to supporting it, even if it makes life awkward for me. Expect this game to ship sometime this millennium…

Game sales & marketing analysis over 14 days

I’m dumping my brain here in case it’s interesting to review strategy, from a business POV. I’m looking at the last 14 days of positech, as if I’m playing a strategy game.

The income over those 14 days is roughly $60k, taking into account direct sales, Steam GoG and the apple app store. there are some other relatively trivial sources too. This is pretty high, because obviously Democracy 3 is relatively newly released, and was just coming out of a sale.

Spending on marketing & PR during this period is relatively tiny. about $2,600 in adwords, another $1,000 ish on another network, and some PR costs, put the whole promotional cost at about $4,600 or roughly 7% of revenue. I could clearly spend more if I saw a decent opportunity to grow the customer base for my games. With this in mind, I just plonked down another $2k today for a splurge on reddit ads coming up.

So how does this all translate into growing the direct-sales juggernaut? well… Direct traffic at positech.co.uk over this period is 54,000 visits compared to 71,000 visits to steam (you get to track this data now). The average steam visitor duration is 31 seconds compared to 82 seconds on my site. This suggests steam is pretty leaky.

In terms of those users I get coming to my site, what are the best sources? The biggest chunk is ‘organic search’ which you don’t have much direct control over, other than trying to get more reviews and doing some SEO, which is a nebulous goal. The most analyzable category is ‘referral’ which is 24.6% of traffic, so quite small. They ‘convert’ in terms of hits on buy pages etc at 11.7% compared with 52% on organic search….interesting. If I narrow this down to people who show up on the Democracy 3 homepage, that figure goes up to 23% of referral visitors converting.

Luckily I can analyze further…

if I look at the Democracy 3 search campaign on adwords, that cost me £266 in that time, or roughly $441. For that, I got 618 clicks, at £0.43 a click ($0.77). This resulted in 72 confirmed buy page hits. I doubt all 72 bought the game. If we assume half of them do, and split the direct & steam takes to get roughly 80% of the money, then I got maybe 36*(0.8*24.95) which is  $718, or a profit of $19 a day. Pretty pathetic.

However, if I assume of the half who didn’t buy the game (but had visited the buy page), two thirds of them are prepared to buy the game next time it’s 50% off, then I can add on another $9.50 a day, which is still kinda crap, but better. Further to this, there is the viral effect, where word of mouth from those buyers might lead to additional sales. This involves even more guesswork….and there is more stuff I don’t know…

So the key variables I need to juggle here are:

  1. Percentage of people who bought the game directly attributable to this spending (some of this is known, but with considerable error margin)
  2. Percentage of people whose exposure to the game ‘stores up’ a purchase at a later date.
  3. Percentage of people whose exposure to the game ‘stores up’ a purchase at a lower price.
  4. Virality multiplier from new purchasers of the game.
  5. Potential upsell from new customers for future games.
  6. Cross-promotional effect of people visiting for Democracy 3 but buying GSB./Redshirt/GTB etc…
  7. Sales income through all channels from people who saw the ad, and had the brand re-in-forced, but did not click, or whose clicks were not tracked due to privacy settings/javascript disabled.

The trouble is there are just too many variables here, and this is where it becomes alchemy. My gut feeling is that I am underspending on promotion. Possibly massively so.

P.S.If you are an indie dev and read all this, and you are new to the industry, I wonder if you noticed the big amazing factoid buried in all that, that defies general assumptions by almost everyone in the industry? Let me type it again: Direct traffic at positech.co.uk over this period is 54,000 visits compared to 71,000 visits to steam. Yup, this is doable. it takes a lot of time and effort and patience and risk.

 

 

Yay depth sorting (kinda!)

So after a lot of mucking about with render states and blend modes and shaders and reading, and z buffers and other tedious things i think i now have the previously unattainable mixture of proper smoky effects, happening in 3D with my shadow casting and bright ‘burn’ laser and flame effects all working together. This means a ship exploding can look like this (click to enlarge)

screenshot_28-02-2014_11-37-41

Which I’m pretty happy with. Those particle effects are all a mess, placeholder stuff that I can fix easily once I’ve rebuilt my editor for them. Plus I need to add a lot more stuff, and also those ships are obviously just modified GSB 1 ships not designed to take new lighting capabilities into account fully. I also need to fix some boxy depth-of-field artifacts for the distant asteroids. Next on today’s agenda is likely to be getting ship hulks to cast shadows (easy!) and then work on letting hulks drift in pseudo 3D (towards or away from the camera, but always planar, as they are sprites after all :D).

So what was the solution? Well it was as I suspected (amazingly). I just needed to take the key scene objects, the hulks, the ships, the turrets (which are separate items) and the asteroids and draw them to my own depth buffer. I then set that depth buffer to be texture layer 2 when rendering the smoke & flames (so that I can reference it in a shader) and just set alpha to 0 for any pixels where the depth buffer is closer than the particles I’m drawing. Right now I’m using a manually created and rendered-to depth buffer, so it’s actually a render target. You can’t in Directx9 have a z buffer that is a render-target, so I might experiment later with toggling the z enable on and off and using a standard directx zbuffer. I’m guessing that internally the card drivers can simultaneously render to a dedicated Z buffer AND the current RT, whereas if you use a manually created RT it’s a separate call. It’s no big deal because I build up a ‘deferred’ list of depth buffer render objects in the engine anyway, but it would let me reduce my video memory usage.

To recap, I’m doing all this because I want the smoke effects to be rendered last, so I can do some clever-ass light compositing that excludes them, such as laser beams lighting up the ships they pass over.

Non-Programmer version: “Blah blah geeky geeky…Explosions!” :D

 

Fun with 2D game engine rendering algorithms

Sooo…consider the image below (click to enlarge) it’s from GSB 2. A ship has blown apart (no bright fire pixels yet, just clouds of smoke) and there are smoke plumes. So far so good right?

screenshot_27-02-2014_10-42-25

Sadly no. The problem is, that ship was in the distance, and behind all the other ships, but if you are really eagle eyed you will notice the smoke plumes get drawn above the ships next to it, and this is a HIDEOUS RENDERING ARTIFACT. For complex reasons to do with the way I build up lightmaps and composite them back, I can’t just draw the smoke cloud after I draw that far-off ship, and then let other stuff render over it. I do some nonsense with multiple render targets that means despite using a ton of transparency and ruling out a conventional Z-Buffer system, I have to render some things out of order. So those smoke plumes are actually rendered last, just before I do my (slight in this screenshot) bloom effect. This lets me have them work sensibly when it comes to obscuring lights behind them, and avoids other artifacts.

The problem is…I need a way when drawing them to prevent them appearing in front of far off objects. Thankfully I have z-positions for everything, so in theory this could be done, although reading up on it, it seems like a conventional z-buffer is not going to cut it, due to it being all translucent smoke particles. So… right now I’m considering the experiment or the day is for me to create my own z-buffer, fill it with the ships (and asteroids) and their z-positions, and then manually compare the z-positions in a special shader I can use for drawing the smoke plumes. In my head, I know that even if this works perfectly, it won’t work perfectly…because there is nothing to stop a smoke plume going ‘through’ a ship. But hey… we can live with that, as long as ones in the background don’t get obviously drawn on top of things in the foreground. Because GSB 2 uses a lot of parallax, it looks slightly 3D-ish, and I don’t want to ruin that effect.

This probably will all go wrong, it’s one of the many experiments you go through when you have an unusual game and your own graphics engine. In my head it seems easy. Create new offscreen render target (yikes…performance), render all of the items I want to sort to it (yikes…performance), using their z-position as the value written to it (it could be a simple and small 8bit format), then set that as a texture I can read from my smoke-plume shader, pass in the Z value to the shader and compare the two, setting alpha to be 0 if the pixel should be obscured. Job done right?

Place yer bets!

Capitalizing on the portal effect

My website looks more like a games portal than many indie developer sites. the reason for this is simple, I have more games. Depending on your screen resolution, you currently see images of GSB, GTB, Democracy 3, Redshirt and Kudos 2 on the front page. This is a huge advantage for an indie. It basically means I have five times the chances to capture a gamers interest if I can get them to my site. If you have ONE game, and you run an ad, or have some PR that drives traffic, you need to be 100% sure that visitor is interested. Sometimes they don’t like the look of your game, and they leave. In my case, if they see that big GSB image and think ‘meh’, they might be attracted to Redshirt, or to Democracy 3. That makes the site less leaky, and that’s awesome.

This is why it makes sense for indie like me to fund a game like Redshirt. I’m also hoping to fund another game. It basically doubles my output, and means each year Ideally I get two new games up there. This means halving my leakiness, and potentially doubling the return-per-click on any marketing efforts. My stats show me a lot of people bought redshirt after visiting my site direct from the main menu of Democracy 3. And vice versa. This is awesome. It’s also another reason why Steam is a billion-dollar success.

I tried to do a free thing for indies to get the same effect. It’s here. it didn’t take off. Indies are very interested in ‘someone else’ doing stuff like this, but by definition, we are indies, we like to work alone. This is a pity, but it means it’s even more important for me to continue building my own mini-portal of positech-published games. I reckon I need a game a year to stay even, as older games will eventually lose their appeal.

The maths of this are very interesting. Even assuming the ‘I was here for X but bought Y’ effect only works in 25% of cases, then previously me bidding $0.30 for a click means I can suddenly bid $0.37 instead, if I have one extra game. If I have 4 games, then I can double my bid. That’s a huge bonus. It also explains why, if you have a single niche indie game, and advertising isn’t making an ROI for you, that you may lose faith in it. Each year my PR budget goes up and up, and each year the stock of games it’s selling goes up. they are clearly related.

So I’ve just dusted off the trusty old Google adwords campaign for my site which I experimented with years ago, and will try again. Not for any specific game, but for GSB,D3 and Redshirt combined. I suspect it will do well.

positech_lb1