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

Finally realized I need to explain the core mechanics

Gratuitous Space Battles was a relatively big hit game (at least for positech), but it managed it despite some hilariously bad decisions. The lack of any decent explanation of how the core game mechanics work has to be one of them… For example the whole thing where some beam lasers bounced off shields, and some did damage, and you had no idea how or why probably upset some people. It was all explained in the manual, which obviously nobody read, because it looked like an RTS or an arcade game and thus such things aren’t necessary…bah.

The mechanics in GSB2 are slightly different, in that weapons have a fixed ‘damage’ but the effectiveness of that damage varies by hull/armor/shield. So a weapon might do 100 damage, at 50% if it goes straight to hull, 75% to armor, and 200% to shields. That makes it an awesome shield-hammering weapon, but not one you’d want to deliver the killer blow.

At least now a new part of the pop-up tutorial stuff does this:

shields

Which should at least mean a higher percentage of people pay attention to that stuff. Now I think about it, I should probably add some code that encourages weapons to select targets based on their effectiveness. ARGHHHHH.

 

Tips on interpreting your indie game sales data.

Want to see a GRATUITOUS graph of some sales stats for one of my games? I bet you do. People love info-graphics, especially those really long vertical things with lots of numbers. I’m not going to do one of those, but I will present to you for your delight the following sales graph showing two weeks of income on an un-named website…

graph1

If you sell games online, you may well have seen similar looking graphs when looking at your own data. The thing is, just staring at a graph doesn’t help you much unless you can tie it in to the events that have influenced that data. After all, people like me are always talking about return on investment, marketing, publicity, and how to get attention, and how to convert visitors into buyers and all that kind of stuff. In other words, sales data is USELESS. What you need is sales data with context. So lets add that in the version below…

graph2Now this is actually something useful, because we can use the sales data, in combination with our recent marketing efforts to deduce what is working, what is not, and how best to approach marketing and business stuff as we continue to promote and sell this indie game. You can tell immediately that the blog post where we mentioned the game resulted in a notable spike in sales, that the ad campaign had a big, but very short-lived boost, and that a new lets play that someone did had actually only a pretty small impact on our sales, ditto a new steam curator that listed the game.

From this we conclude that we should put more effort into blogging, probably keep up the ad spending, but not be too bothered about encouraging lets plays and steam curators, as they have less of an impact on our bottom line.

Except no, hold on.

That’s all bullshit.

Lets look at the real graph, through the lens of realizing that the top point on those spikes was about $1k a day, and that the game has been out a while now. We could zoom out and look not at two weeks data, but at a years data, and then with that context taken into account we can re-formulate the data for those two weeks as follows:

scroll down…

… keep going

graph3

Basically fuck-all happened in those two weeks. Did I blog about the game? Probably. Did we get a new lets play. Maybe. Did we get some new steam curators. I think we might of, I’m really not sure. But regardless what happened, it made absolutely sod all difference to our sales.

Do not fall into the trap of over-extrapolating information from noise. It is VERY VERY tempting to do so, especially when you are a new developer because you desperately want to know how sales for your game will be, and you desperately want them to be good. The problem is, as a new developer your ability to analyze this data is very very low, simply because (unless you made banished) your sales are likely, with your first game, to be low enough that any change in them is statistically irrelevant.

If you sell 5 games a week, and then suddenly one week you sell 7, thats a huge percentage boost in sales. Sales have SKYROCKETED. Sales are ‘up in a big way’. There has been a ‘boost’ in sales! But really there has not. Really, one of the people who bought last week told 2 of his friends how good the game was. This is a trivial thing you cannot analyze and cannot benefit from analyzing.

If you sell 5,000 games a week, and then suddenly sell 7,000 that IS actually significant, despite being exactly the same variation. You absolutely should draw conclusions from it.

That seems counter-intuitive, so keep re-reading it. The margin of error is basically lower with a big sample size. This is why pollsters try to have a decent sample size, so one or two outliers don’t skew the result. In our 5 sales example, we lucked out and one of the 5 had lots of similarly minded gamer friends. The thing is, we could have gone entirely the other way, we might havebeen unlucky, and sold to 5 people with even less friends than normal, and this might actual dent the next days sales as our ‘virality’ collapses. A single customers sociability can skew our popularity up or down hugely.

With 5,000 customers, we are going to get lots of sociable customers, AND lost of unsociable ones. They cancel each other out, and we get a steady stream of recommendations, and non-recommendations. Unless one of the buyers is notch or stephen fry, them tweeting about our cool game will make zero difference, in the grand scheme of things.

The vast majority of indie game post-mortems over analyze events in their sales curve. It’s absolutely worth reading them for the ‘we made a game about chickens and it was a hit’ or ‘we made a mobile game and then we ended up living off noodles’. That’s ‘big picture’ stuff. But buying an advert or releasing a  trailer and seeing your sales go from 5 to 7, or 7 to 5, is a total irrelevance. Ignore it.

Tell me if I’m wrong :D

“When I own valve…”

That’s kinda an inside joke. but anyway. What would be a better way than to avoid doing real work this morning than to daydream about what I’d do if I owned valve :D My assumptions are as follows:

1) Valve probably have a large stockpile of cash, or at least access to such cash at good terms

2) Valve want to grow.

Because I enjoy theoretical empire building (not real empire building, because I enjoy working from home, and that kinda limits one’s galaxy-conquering potential), I’m going to imagine how best to achieve global domination if I owned the company. Here are my thoughts.

Thought #1: Let someone else worry about hardware.

Make no mistake, valves VR experiments are jaw-droppingly amazing. And the idea of a steam machine in the living room is cool, and making a gamepad that PC gamers actually like is a worthy goal. These are all worthy goals, but the thing is, they are hardware, and outside the realm of the ‘low-hanging fruit’  that I think would make a more sensible business move. As I understand it, valve are (very sensibly) avoiding building anything, just providing design and encouragement to actual hardware builders. This makes a lot of sense, but I think as a result it will not achieve as much as they think. The design and R&D but not the implementation seems like a job half done. Either try to take on the console manufacturers (and set aside a minimum of a billion dollars to do that), or don’t. I get the impression that they are doing this stuff purely because it’s cool, which is kinda awesome, and the sort of thing only a privately owned company can justify.

Thought #2: Casual Games.

Steam only has a limited cross section of games. They are mostly ‘core’ hardcore gamer games. Not the sort of stuff that BigFishGames and the other casual portals stock. Why not? It seems to me that a re-skinned ‘steam-casual’ client that wasn’t quite so serious looking, that focused on casual games could probably crush BFG and it’s ilk and takeover that section of the market too. I suspect Valve have a bigger marketing war-chest than BFG’s new owners. This is nothing but a marketing change, Valve already have the back-end for selling games to people, supporting community etc, it’s a no-brainer.

Thought #3: Video

Twitch and youtube are great, but why can’t I just watch the lets-plays of a game inside the steam client or website? Surely there is a big market opportunity there? If I’m browsing steam and find a great game, then want to see gameplay video, and leave the site/client to go to youtube, who knows if I’ll ever return? That seems like a leak in the sales funnel to me that could be easily fixed. Maybe the downside is bandwidth costs, but if youtube can justify it purely on ads, then surely valve can based on sales? Maybe their PC dominance is so great that everyone who leaves for youtube comes back to buy anyway? (or do they just watch cat videos instead?)

Thought 4: TV

I bought and enjoyed Indie game the movie through steam, and enjoyed their e-sports documentary. Frankly steam is better than the iplayer or itunes. Why can’t I buy breaking-bad through steam? They are experts at content delivery and sales. A video game isn’t *that* different from a TV show download. I was very surprised that more movies didn’t show up on steam. I bet they’d sell a lot of copies of Battlestar Galactica, Firefly etc to people who already own them, just to have them on steam.

Thought 5: Content

Content is king? or is it? it depends which pundit is popular this week. One thing is true though, 100% of something is more than [UNDISCLOSED_PERCENTAGE]% of something. Valve produce games in-house, but not many. There are plenty of devs that need funding. Currently they go to kickstarter. You can see where I’m going here right? You want funding for your game, maybe valve will fund the game and buy out your company? Valve is a huge distribution portal and a (relatively) small game developer. Nudging towards being a publisher seems a logical step.

Thought 6: Pay what you want.

Why isn’t this an option? Lets be honest, Valve could crush every single indie bundle this time tomorrow, simply by including PWYW + Charity bundles. It’s amazing they haven’t done so.

So why do I think they don’t do most of this stuff? Maybe the enlightened long term self interest of ensuring a vibrant market. That sounds like hippy bullshit, but it was widely speculated that Microsoft deliberately let apple stay in business back-in-the-day, so that they weren’t totally crushed by the government for being a monopoly. Sometimes it’s in your interest to keep other companies in business. That’s one reason. Another is just being nice guys. Public companies can’t do this, but they may well take the attitude that crushing The Humble Bundle and BFG would be a dick move. I suspect more likely is that the people at valve just want to do what is cool. VR is incredibly cool. Steam machines are cool. Negotiating with TV company lawyers and marketing match-3 games is not cool. Maybe nobody in the company is volunteering to do that. They don’t *have* to make any more money, or grow at all, so where is the incentive to do anything that they aren’t passionate about? I can kind of relate to that.

 

Optimizing my gratuitous GUI

If you’ve watched high-def videos of Gratuitous Space Battles 2, or been lucky enough to try it at EGX, then you may have noticed all that gratuitous GUI fluff that animates and tweaks and flickers all over the place, because… frankly, I like that kinda nonsense, and it’s called GRATUITOUS, so I can get away with it. This sort of stuff…

widgets

Anyway…I love it,and it’s cool, but until today it was coded really badly. I had a bunch of helper functions to create these widgets, and I sprinkled them all over the GUI for fun. For example there was a function to add an animated horizontal bar that goes up and down. Wahey. Also there are functions to add random text boxes of stuff. The big problem is that each one was an isolated little widget that did it’s own thing. In the case of a simple progress bar widget, it would have a rectangle, and a flat-textured shaded box inside it that would animate. That meant 2 draw calls, one for the outline of the box (using a linelist) and the other was a 2-triangle trainglestrip which was the box inside it. That was 2 draw calls for a single animated progress bar thing, and a single GUI window might have 6 or even 20 widgets like that… so suddenly just adding a dialog box means an additional 40 draw calls.

Normally that doesn’t matter because a) 40 draw calls isn’t a lot, and b) graphics cards can handle it. However, it’s come to my attention that on some Intel integrated cards, which are actually surprisingly good at fill rate and general poly-drawing, too many draw calls really pisses them off, performance wise. Plus… 40 draw calls isn’t a lot, if thats your ‘thing’, but if there are 40 on the minimap, 40 on each score indicator, 40 on the comms readout, 40 on each of 3 ship inspector windows, then suddenly you have several hundred draw calls of GUI fluff, before you do the actual real GUI, let alone the big super-complex silly space battle, and yup…I’ve seen 4,000 draw calls in a frame. Ooops. To illustrate this, here is that top bunch of widgets in wireframe.

wire

That’s a lot of stuff being drawn just for fluff, so to ease the burden on lesser cards, I should be batching it all, and now I am. That used to be about ten trillion draw calls and now its about five. I have a new class which acts as a collection of all the widgets on a certain Z-level, and it goes through drawing each ‘type’ of them as it’s own list. Nothing actually draws itself any more, it just copies it’s verts to the global vertex buffer, and then when I need to, I actually do a DrawIndexedPrimitiveVB() call with all of them in one go.

Ironically, this all involves MORE verts than before, because whereas drawing a 12 pixel rectangle with a line list involves 4 verts, drawing it as a trianglelist uses loads more, but I’m betting (and it’s a very educated bet) that adding the odd dozen verts is totally and utterly offset by doing far, far fewer draw calls.

This is how I spend Sunday Afternoons when it’s too cold for archery…