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

Gratuitous DLC Experiment

Ok, first things first, let me announce the release of a new race for Gratuitous Space Battles. They are called the nomads, and you can see more info here, and watch a video of them here (or below). And you can even go buy the new DLC here.

The idea for the nomads are a sort of retro-future race, suggesting a species that has been around a loooong time. They are travellers, and fighting purely for sport. They don’t come with any new technology or weapon types, but they do have a few extra tweaked ship modules. Also, there are not new singleplayer missions, this is just a race for you to use in existing scenarios, or in challenges.

Here is an embedded video showing off the new ships:

Now comes the slightl wacky bit. I’m selling this DLC for $5.99, just like all the previous races were, and there is no change there. If you are a long time GSB plauyer and just want the new race, then go buy it, it’s $5.99. That gets you the standard version of the DLC. There is also a ‘discount’ version of the DLC. The difference between the two is that one is $5.99 and one is $2.99. That’s it.

Obviously the standard one costs more, and I get more money as the developer. The discount one costs you less, and I get less. There will be updated stats on the page here showing who bought what.

It’s entirely up to you, which one you buy. You decide. I would obviously prefer you bought the standard one. Nobody will ever know what version you bought, the files are identical. This is a bit of a sudden manic experiment to see what happens. If you genuinely have very very little money and would have waited months hoping for a bundle or a sale, then you could make an argument you could get the discount one. If you frankly, *do* have the money to spare and would buy it anyway if there was only the $5.99 option, I’m asking you to do that.

This might make me look really stupid, but I’m prepared to risk it. I like trying new stuff in business. I think it will be interesting either way. Also, the DLC is more about promoting the game and making a bigger range of ships, so there is more variety. None of these expansions are really aiming to make money, the core game does that. ( I hope!)

Anyway, it should be interesting. If you find the time to tweet, facebook like, link to, blog or otherwise promote this experiment, I’d appreciate it. It could be interesting.

Cheers,

The current positech plan (posiplan?)

I see no harm in making my immediate future plans public.

In no specific order this is what I have coming up:

1) Release of the 1.47 patch to all partners (valve etc). I did this this morning.
2) Release of the new Race (The Nomads) On my site, in a slightly strange way (details to follow) then on the partner sites when I know it works ok. Teasing screen:

3) Talk to Steam and other partners about selling the Mac copy of GSB.
4) Pre-order / beta access and eventual release of the GSB campaign game.
5) Game IV.

This should last me a good few months. Hopefully the money lasts a good few months too. Ha!

In amongst all this, I’ll be taking the first holiday (only a week) since I moved house, and it will be my Birthday. I also have a visit from a  structural engineer today to tell me if my roof can hold up solar panels or not. I will be mr sad face if he says it cannot.

Nomads

I spent some time today on a new race for GSB. It looks like I’ll release this pack before the campaign is finished. I actually had expected to have finished the campaign and have released it by now, but it’s much more involved than I thought, so I’m still working on it. Once I’ve finished complete bug free playthroughs as 2 different races, I’ll get some people testing it for me, then there will probably be a pre0order beta thing, then release. That is probably another month (best case) of work.

So in the meantime, luckily I have artwork for a new race all complete, and am working on the data and the balance. There is nothing radically different in the race in terms of gameplay yet, but the style is interesting. The backstory is that it’s a very very old race, a bit like the dwellers from The Algebraist (Iain M Banks). Over the years, they have rebuilt their ships from the salvage of their enemies, so you will see that their ships have some rebel engines, some order engines, and various other components. They are also the first race to have multicolored ships. I’m calling them Nomads, and they basically fight out of sheer boredom on their multi million year journey across the universe. They have a cool retro look.

I was lying awake at 2AM this morning unable to sleep, thinking about new weapon and ship modules for that race. This pack will be different, likely no new missions, just the raw fleets for you to use. I had originally thought no new modules, but I think I’ll at least add some variants.

A lot of the more interesting ideas involve a ton of code, which I’d rather not do when I’m so busy with the campaign, but there is plenty of scope for module variants that work within existing parameters. I keep thinking that a very long range sniper laser with high penetration but low tracking speed and low damage could be interesting. Hopefully I’ll do some work on it tomorrow.

Improving the deployment screen in Gratuitous Space Battles

I found this really annoying when playtesting the campaign, and I know people have asked for it before. I want to know if this is an improvement, before I release it in a patch. People were getting vexed because they often had 5 or 6 or 20 cruiser designs of the same race (for example) and the silhouette icons were no help in picking them, so they have to use mouseover tooltips to pick the right one, which is slow. So i have experimented with adding the (cropped) name of the design to the UI: (Please click to enlarge)

Old:

New:

If you play GSB a lot, you might think “yes, I need this!”, but I’d like to know if you think it looks a bit cluttered, or messy, from the point of view of someone just trying the demo for the first time.

Edit: I tried it with a smaller font. Better? or too small?

Newer!:

Basic principles of game optimisation

Making games run faster is a pet topic of mine. Code samples are too specific to help many people, so here are some general principles I’ve learned.

1) Design to avoid the code.

Sounds horrid doesn’t it, but people do it all the time. ‘Skinned’ animation at points like shoulders and knees is CPU intensive and tricky. Ever noticed how many characters in games have big shoulder-pads? Makes life much easier. GSB is a 2D game, mainly because I prefer 2D gameplay, but I can’t ignore the fact that it would be horrendously more draining on the CPU/GPU to be in 3D

2) Run the code offline.

If the output of your code is a one-off, only ever do it once, and before you ship the game. The GSB campaign game code has some really inefficient slow brute force stuff for calculating planet-travel distances. It’s done as a one-off, and the results loaded in at run time. If there are calculations your game makes at run time that are based on data that never changes, just pre-calc them and load in a table, assuming the table is small enough

3) Run the code once, and cache it.

This is the ultimate big win. In the old days, people used tables of cosine/sine lookups, rather than calculating them. Hold on! GSB does that for some stuff too (nothing gameplay critical). Never make a calculation twice in a  function if you can do it once and reference it later. It’s amazing what a difference this makes. even simple stuff like STL list end() calls can mount up with really large containers

4) Don’t run the code every frame.

Not much code has to be run every frame. The minimap in GSB isn’t updated every frame. Can you notice? I can’t, because most frames a ships movement would be ‘sub-pixel’ anyway. If stuff like this seems to jitter, update half the code one frame, the other half the next frame. A frame should be 1/60th of a second. Nobody will notice.

5) Don’t process what isn’t seen.

GSB does some cunning code for all kinds of cosmetic things that only applies if that activity happens onscreen. In theory you can pause the game, scroll around and spot very minor inconsistencies (good luck). With strategy games, most of the time, most of the action isn’t being viewed, so you can skip allsorts of stuff. I don’t update timers for running lights offscreen, for example.

6) Re-order and group stuff.

Graphics cards like to do things in big clumps. give them a single texture, and 50 sprites to draw and they are happy. Give them 50 sprites with different textures and they are not. This is why all the GSB debris is clumped into a single texture, ditto the laser bolts. I also re-order ships in the game code so that similar ones are drawn one after the other, even when drawn as icons. This minimizes texture swaps. Because GSB doesn’t use a z-buffer(for blending reasons), that makes for some spaghetti like code, but it’s worth it. The easiest system I’ve found is to maintain spritelists for different textures. You still draw sprites as normal, but when they draw they just get thrown into the relevant list, and the list gets drawn later.

7) Save stuff for when you are not busy

GSB does this. It’s very tricky, but you can have code that only runs when the CPU is idle. If a laser bolt hits some debris in GSB, the debris explodes. This ONLY happens if the CPU is idling. People spot it occasionally and think it’s l33t. They never spot that it doesn’t happen all the time.

8) Optimize the UI

People get a fast engine then slap some super-slow UI on top. Madness! With a lot of text, icons, dialog box backgrounds and multi-part buttons, you can have crazy overdraw, crazy texture-swaps and huge inefficiency. Keep an eye on it.

Don’t forget that you can also optimize textures too. Some textures are ripe for compression, others not, but you can also do crazy tricks with some stuff, like chop a circle texture into one quarter, and raw it as 4 flipped and mirrored sprites (I do that a lot). Not everyone has 512 MB video cards, and its quicker to load a small texture than a big one anyway.

Most coders probably know all this already, but it doesn’t hurt to recap. It’s easy to forget about optimising and just worry about features, but gamers will thank you for it. I get a lot of people remarking how surprised they are at how well GSB runs on their machine. This is no accident :D.