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

The perils of patching

Patching a game people are playing is a nightmare. On the one hand, you have all these people experiencing problems with the game, and you desperately want to fix their problems.

On the other hand, is the fear that changes to the code may actually change something somewhere else and cause problems for people who are currently playing the game fine. Everyone has a different setup, with different hardware, and plays differently, so its’ very hard to have an absolute test case when you know you fixed bug A without introducing bug B.

Worse, is the nightmare that without a huge room full of QA experts like the big retail studios, you can either do some basic tests and release a new patch, or wait 3 days while you methodically test the new patch yourself. Neither option is easy, or popular, and whatever you choose you uspet some people.

I know some people have performance issues with the new improved 1.03, the one that fixed the sound issues (AFAIK). So today, rather than working on fun gameplay stuff (area of effect damage) and AI orders, I’ll be profiling the sound system code.

Balls.

Trial By Fire. And Bugs…

I did mention it was a beta didn’t I?
Actually people have been VERY understanding, given all the bugs that leapt out of the woodwork the nanosecond I put this pre-order link up. As expected, its a combination of hardware-related crashes I can’t re-produce (The menu battle bug, the sound crashes) and just UI things that I never thought to check (submitting a blank serial code, deleting every ship, fielding ships with zero modules…)
I’ve fixed a bunch of stuff, the real urgent ones, and released a patch, and hopefully my auto-patcher will automatically update everybody. As of this morning, the game is much more stable and playable.

But

There are a TON of things I need to improve in terms of UI, to get the game more usable. I was amazed to discover so many people prefer mousewheel zoom to be reversed to the way I like it, but that’s an easy fix. I have to totally re-code a lot of Ui stuff (ship hull browser, challenge browser) to make them more usable.
And I’m going to crack on with that passionately, because only when all that is done do I get to do the real fun stuff, which will be the reacting to balance and gameplay issues, ‘stacking’ of ships, better AI orders for the crews etc.
I’m overwhelmed with the feedback from everyone and pleased that people seem willing to put up with a few days of crap in order to get a polished game. My priority this morning is the sound-related crash.
I’m working on it!

Finding and fixing some nasty bugs

It’s amazing what bugs you find when you just sit and play through the game for hours (I’m playtesting and balancing the game so that the AI fleets give you a bit of a challenge).

Two bugs squashed today are these:

Firstly, the code that detected that an enemy target was being ‘painted’ by a target painting laser (and thus easier to hit for missiles) was just not working at all. I’d checked and double checked it many times, but because the ‘is it painted’ code is just one of about 6 factors determining optimum target selection, it was hard to tell if it was working right without stepping through everything each time.

It turns out that code worked fine, but some *other* code which told a targeted module whether or not it even *was* a missile launcher, was buggy, and so the code was never even being run. doh!

The second bug was investigated after I noticed some very slow missiles which looked like multiple-warhead missiles but never split into their sub-munitions. It turns out that this code has never worked correctly! The code works fine the first time a missile splits into sub-munitions, but if it gets to live long enough to shoot another missile later, the sub-munitions are never triggered. That was an easy fix.

Unfortunately, that means I’ve been underestimating the destructive power of multiple-warhead missiles all the time, which means I need to re-play through every battle, on every difficulty, and both re-balance the fleets, and maybe re-balance the cost and strength of the appropriate missile modules too. This will take all of today at least.

Damn :(

One thing I did notice, that was pretty cool was an imperial AI fleet I’d put together that sends its fighters in ahead, and the rest of the fleet shows up afterwards (moving slower). By lucky hap, although the fighters were useless against the heavily armoured federation cruisers, they did manage to blow the crap out of the row of point-defense equipped escort frigates that flew alongside them. So when the Imperial cruisers got into range, they could bombard the feds with missiles without opposition. This is exactly the kind of design and thinking I hoped the game would reward, so it’s cool to see it is all about strategy and not just luck :D (Obviously when you play against that fleet, make sure you don’t have a line of unarmed frigates sitting waiting to be blown up :D)

Raw PIX data for gratuitous space battles

I’ve never seen anyone share data like this, but I don’t see why they wouldn’t, it’s hardly source code. PIX is a free program from Microsoft that lets you analyze your games directx performance. I haven’t analyzed this data or changed any code yet, but here is a quick 2 minute start of a battle in the game (release build) analyzed with pix. Click the image for a larger version

This is great for working out why you get occasional slow frames, or working out where bottlenecks are. TYhe FPS seems to never go above 60 FPS, because the game caps it there, making a note of the ‘headroom’ available for potentially enabling higher-demand effect (not all done yet).

This is under Vista, 2 gig RAM, Core 2 Duo 6600 2.4 gig CPU and a Geforce 8800 GTS with latest drivers.

Please feel free to comment on how the numebr compare to agmes you might have worked on or develop now. I’d lvoe to see other peoples pix data as a sanity check. Is 83 set textures a frame a lot?  it seems to depend on what else is going on.

RangeFinder

In my play testing and balancing sessions, I found myself really wanting to know what the ranges were of a specific weapon mid-battle. You get to see this in pre-battle deployment, but that’s only the initial formation. There is nothing more frustrating than watching your ship sit there, minding its own business while an enemy ship sits just out of range and missiles it to pieces :D I should adjust the ‘retaliate’ AI order to allow it to move within range

So anyway, I’ve added in a new range-display GUI to the battles. Basically you just click on your ship to show the window with its details, then click a module with a turret on that window for it to highlight that weapons range on the map. I’ve toggled on the background grid here for extra ‘tactical display mode’ fun.

The last few days have been really hard work battling an obscure texture corruption bug. I was working on it at 1AM last night. I’ve completely rewritten my vertex buffer code to use a different locking strategy, and I’m pretty sure it’s for the better, although I do too much memory copying for my liking. Still, the game runs pretty fast even so.