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

unit deployment and undocumented features

There is one big usability failing in Gratuitous Tank Battles that I need to address. It’s something even as the designer that I notice mid-battle, so it must irritate a lot of players. It’s the unit deployment bar at the bottom of the screen. It works great with 10 or less units, and functionally, it handles hundreds, because it has a scroll bar and you can also rapidly zip through it using the mouse-wheel. But it has two issues:
1) It has no specific order to the units.
2) It shows you ALL your units, you cannot filter them.
I am investigating possibly strategies for improving the usability of it, maybe including some filtering options, allowing you to ‘hide’ units on it before a battle, maybe a system that lets you put together ‘armies’ of units that you can select pre-battle, I’m not sure yet.

More interestingly, I get the impression that hardly any players have realised that you can just mouse wheel anywhere over the bar and it will scroll. I obviously need to promote that more, but I think I have fallen foul of a popular designers dilemma, which is assuming the player thinks like I do. Family members always ask me how their DVD player / ipod / camera etc work, even though they have the manual and I do not, because they know I can work it out instinctively in seconds. I am a GUI ‘explorer’ and a usability geek. I am in the tiny percentage of people who have actually read ‘the design of everyday things’. I’m that sad.
What that means is, I need to remember that I am far more experimental and make far more assumptions and guesses about how GUI’s work that the player. I need to draw more attention to stuff like that.

Gratuitous Tank Battles patched to 1.002

I just released a bunch of fixes for GTB. The patch is automatically downloaded and run if you haven’t already run the game today, so at worst case, it will download for you tomorrow. Here are the fixes:

version 1.002
1) Hull weights and costs for all mobile units have been adjusted. Module costs have also been adjusted, and hull cost is now correctly included in cost calculations.
2) Players settings for showing paths and damage numbers are now remembered between battles, and those buttons display correctly as toggles.
3) High scores now correctly saved for multiple difficulties and attempts.
4) Open blue battle 'hints' now close correctly if you quit a battle whilst one is visible.
5) Deleting the current loaded unit from the design screen, then selecting a module or augmentation no longer causes a crash to desktop.
6) Closing the map editing window in the middle of a tutorial no longer leaves a tutorial window hanging.
7) Delete key now correctly deletes the enxt character in text edit boxes.
8) Map scroll speed (when mouse is at edges) now configurable under options.
9) Hang on resuming from alt+tab fixed.
10) Errors relating to the wrong design being deleted when you try to delete a design from the 'load design' dialog are now fixed.
11) You can now cancel a preferred target for a unit by selecting them, then right-clickign an empty area of the map (neither path nor unit).
12) Removed some redundant unit-layer tooltips on design screen.
13) Invalid option to fight a custom map against scenario units is now greyed out.
14) Custom maps now have a unique ID and never inherit the high scores of their base map, even if not re-named.
15) Debug menu now cannot be triggered.
16) Some fixes regarding low level rendering stuff.possibly fixing custom-map shadow map renders.
17) Game no longer automatically unpauses on resume from alt-tab, if it was previously paused.
18) alt+tab now pauses all the games music and sound effects correctly.
19) Bugs with online xp being calculated and applied wrong, and ranks not leveling up should be fixed.
20) Fixed bug where bolt action rifle could not be unlocked.
21) Clouds are more transparent and can be controlled by editing OPTIONS_MAX_CLOUD_ALPHA in config.txt
22) Missile damage is reduced.
23) Changed sound effect for clicking on augmentations.
24) Removed typo in manual.
25) Supplies now cannot exceed maximum cap, regardless of dog tags or deconstruction rebates.
26) Unlocks and achievements now only granted on campaign maps.

Because all-text blog posts are dull, lets have a picture of a tank. here is one of my favorites. Lets play NAME THAT TANK!

First real players, first real bugs

So…. GTB is out there being played by real actual people, rather than just me and my cats, and of course, the first few bug reports come in.

It seems hard for many gamers to believe that developers do their best to reduce bugs, because the minute you play a beta build, you encounter crazy stuff that makes you think “how the HELL did they let this one go?”. I thought I’d give an example of the worst bug found so far, and what caused it, and why I didn’t spot it.

Alt-Tab hangs the game.

On the surface of it, that seems mad, and annoying. Surely cliff tested it? Yes… he did, massively so, and it worked fine. So when I got multiple bug reports, after I KNEW it worked, I did some digging. Did alt-tab work for me? yes. In release build? yes. In release-build run outside Visual Studio? Yes? In different maps? Yes? Nighttime? yes. units selected at point of alt-tab? paused? mid-explosion? shockwave being rendered? nightvision on? paths drawn? yes,yes,yes,yes… after a cold reboot? YES.

Testing all that takes longer than it sounds… So then I do what you *have to do* when you encounter stuff like this. You pretend to be playing innocently, and go through an entire mission, playing and ignoring the potential bug, winning an entire battle. Then you play a second battle, and alt-tab. HANG

Which makes you think that it is something to do with multiple battles. Cue lots of digging through code. Cue turning on the directx debug run-time and maximised error reporting, and running the game in debug. Also cue bouts of near-sobbing when I manage to play 2 battles and it NOT happen… Eventually I manage to reproduce the hang in the debugger. (This is a big win). The you get that infuriating directx error that basically says “Srry, can’t restore DX, you forget to release some directx resource. We know which one, but we are leaving it to you to guess..” or words to that effect.

I bet this guy wrote that one:

Anyway, to cut a loooong (6+ hours) story short, eventually, a whole lot of experimenting shows that the problem occurs only if the post-mortem dialog, or one of it’s many offshoots get launched. This does some multi-threading, which led me up a right blind alley. Anyway… eventually it becomes clear that displaying the unlock-choices dialog causes it…sometimes…

Then a sudden brainwave. The unlock choices *sometimes* gives you a new Hull, and to do that it needs to render that hull. As an optimisation, it doesn’t draw it in layers, it renders out a composite texture (multi-layered) as a sprite, and uses that (it will get re-used later in various dialogs…). That means some render-target code gets triggered. A bit of digging shows that when I create a render target to save out a new composite hull texture, I wasn’t calling Release() on it correctly, in two places. Arrghhh! bug fixed. (AFAIK).

So why didn’t I find it before I shipped? Well basically I implemented the unlock dialog after I’d already tested the hell out of alt-tab. By the time I was close to shipping, and double-checking alt-tab, I either tested it in the first battle (no probs) or I had already unlocked anything and didn’t see that dialog, or I got lucky and the dialog only offered modules or ready-rendered hulls.

But it’s swings and roundabouts. This bug was hell, but pretty much every issues everyone is experiencing on the unit design screen to do with saving and deleting turns out to be a single line where I used = instead of ==.

Don’t you just love C++?

Gratuitous Tank Battles Available for pre-order/Beta NOW!

Ok, so it’s finally here!

Gratuitous Tank Battles, my latest  game, is finally open for pre-orders, and everyone who pre-orders the game gets an immediate download link for the current beta build of the game. Essentially it’s for sale now, you can just expect it to be updated a few times before I declare it finally released!

If you aren’t sure what game I’m on about allow me to show you the beta-release video trailer!:

If you like that trailer, please,please vote it up, or tweet it or +1 it, or whatever the cool kids do these days. Feel free to tattoo ‘I Love Gratuitous Tank Battles’ On your head and run through the streets. Or failing that, just tell some friends about the game :D.

Currently the game is only available to buy direct from little-old-me, but phear not. You get a download link that should last forever (email me if it ever dies), and as a special 2012 bonus, you will get steam-keys when the game is released on steam later on (when it’s out of beta). I have no doubt it will be released on other portals too.

Get it here:

Be aware that this is a BETA game. That means not 100% polished, not 100% balanced, not 100% optimised. It *may* have some technical issues on some PC’s (although I suspect not), and it may need some balancing and gameplay tweaking before final release. If you are wary of buying beta games, then just enjoy the video and wait a while :D.

Whatever your thoughts, share them here in the comments, or at the GTB forums over at:

This game feels like its taken a billion lines of code and a hundred years to make. I am so badly in need of a day off. Hopefully, people will like it, and it will have been worth it. Enjoy!