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

Divisions in Gratuitous Tank Battles

A picture speaks a thousand words, and a video draws a thousand pictures?, or whatever… But here is a video of me explaining and showing how the new ‘divisions’ feature for Gratuitous Tank Battles works, and how to use it. I’m quite pleased with it. It will be in patch 1.003, which after a little bit of final testing will be release tommorow.

Like A dork I broke my wireless router today trying to install a new aerial booster. BAH. Tomorrow an urgently ordered new one shows up. There goes a days sales :( Plus hopefully my much wanted new desk, which is very English and wooden and cheesy and old fashioned, but it will suit my house, which a modern shiny thing would just look odd in. Anyway. Enjoy the video, critiques and comments most welcome.

Redshirt game video blog

You know about redshirt right? It’s positech game’s first foray into publishing an indie game made by another developer. You might want to check out this new video blog (below, or the official website or facebook page.

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++?