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

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:

http://www.gratuitoustankbattles.com/

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:

http://positech.co.uk/forums/phpBB3/

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!

The unstoppable rise of gaming videos

Something has changed for me in the last six months or so. A year ago, if a new game came out that piqued my interest, I would probably check out some screenshots, then read a review, (probably several), perhaps read gamers comments on forums, and maybe, if one was available, I’d try a demo of the game, before purchasing.

Now things have changed, youtube is my #1 source for evaluating the possibility of me liking a game.

I probably *hear* about the game at Rock Paper Shotgun or some other gaming site. I might hear about it first on a forum, but now I tend to not bother reading reviews until I’ve checked out a gameplay video. (reviews are good for getting a big-picture description of the entire game)

I *like* this development in the industry, because there is nowhere for the cynical marketing crap to hide…

Demos are sometimes just one slice (the best!) of a game, come out long after release, and are a huge pain to download these days, if you live in the country with a usage cap.
Screenshots are invariably bullshit. They are touched up by artists. They have zero relationship to the game you will buy. (They are called ‘target renders’ in the industry). (All my games screenshots are 100% honest simple screen dumps. This is actually rare.)

Reviews, which contrary to belief are generally not ‘bought’ or corrupt, are nevertheless seen through the prism of that reviewers opinions and experiences. A reviewer always brings their own genre tastes and personal pet peeves with them, they can’t avoid it. if I reviewed games, I’#d mark down everything with unskippable cut scenes, macho protagonists or elves with enormous breasts, but that is probably just me..

Youtube gameplay videos are wonderful. The most handy are not official trailers, or posted by big name sites. The best ones are just some random dude who played the game with fraps running and clicked on upload. That is the sort of experience I as a gamer will get, and that is exactly what I want to see. I probably know if I want to read a review within 10 seconds of video these days.

Am I alone in this?

Unsure trade-offs in game design

Here’s a thought.

Good games are ones where we make unsure trade-offs. Most games are either about reflexes or decisions. Decisions are more common in the kind of games I make, such as strategy and sim games. I think the two basic approaches to strategy/sim games are plate-spinning and trade offs.

Plate-spinning is where tons of stuff is happening at once and you are trying to stay on top of everything and keep everything from falling apart. Democracy 2 is very big on this aspect of design.

Trade-offs are much more common. Even games that are conventionally reflex ones, such as First person Shooters have a lot of trade-offs. You choose to be a medic, trading ammunition capacity for the ability to heal. You choose to be a scout, trading everything for the ability to move fast. Choosing to have more of X, means less of Y.

Where this system goes wrong in games, is where it is too clear, too obvious, too analytical, to decide exactly what the trade-off is. In other words, the number are a bit too explicit. If I *know* the details of every variable in the trade-off, then it simply becomes a matter of Vulcan logic. It’s when there is a suitable amount of fuzziness around the numbers, that the trade-off becomes one filled with uncertainty, anticipation, risk and excitement. You *think* the best choice is to risk building a new factory in the city, trading off increased pollution against lower unemployment…but you can’t really be *sure* that the numbers will go your way…

To me… that makes for a fun game. I don’t always need to know the numbers. Sometimes, just a hunch makes for more fun.