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

Where does the memory go?

I haven’t been working on memory optimisations in GSB for a few days, in fact I’ve done nothing but work on features and bug fixes and other stuff for the campaign game. The game is getting better, and looks nicer now, but there is tons to do, a whole host of niggling little things, and some vital balancing and optimising still to do.

But as I work, I keep thinking back to my attempts to optimise the memory footprint of GSB. I wrote an overriden new and delete, to track all my memory (I never use malloc or free). I have spreadsheets showing all the allocations. However, it seems that the memory I allocate is just a trivial percentage of the RAM the game seems to use if you look at it with windows task manager or the windows performance monitor. Of course, there are about 36 different measurements of memory, such as ‘private bytes’ and ‘peak working set’, And nowhere is there a definitive answer on which one to use. However, even using the lowest one, there is still at least 50% of memory unaccounted for. At one point, I checked my stats were not reporting MB as KB, it was that bad.

Sadly, it’s hard to optimise when you can’t see the wastage. I suspect a big chunk of it is particles, but the maths don’t support that. It could be directx making system memory copies of video texture buffers and sound files, but would that be inside the GSB.exe memory footprint? Who knows!

In other news

1) The ecofan really works. In fact it is awesome.

2) Chopping wood from 3 year seasoned timber is trivial next to 10 month felled holly, which is like cutting neutronium with a spork.

3) The UK has a major apple glut. We have some apple trees in the garden and so many apples we literallty can’t walk in the garden for the fallen ones. I actually knocked on neighbours doors to hand them carrier bags full of apples today, just to get rid of a few hundred. It’s insane. We are eating as many as we can, and making apple cakes galore.

Drag and drop design

A lot of stuff in the GSB campaign UI is drag-and-drop based. For example, if you want to merge one fleet with another, you pick up a fleet icon and drop it on the other one. If you want to move a fleet you pick it up and drop it on the destination.

The trouble is there are some situations where that fleet has moved (and thus can’t move again) but you still want the ability to drop it on another fleet in the same location. That means I allow you to pick up an icon, but only drop it on a next-door icon, which is confusing. I change the icon color to show that it can’t now ‘move’ only be merged, and explain ti with tutorial windows, but it’s not really good enough.

I think I’m going to go for a two-pronged solution. Firstly I’ll restrict the distance you can move a dragged icon if it can’t leave the system, and secondly I’ll change the icon more drastically to have a big red stripe through it to show it can’t be moved right now. That’s still not a perfect solution, but it’s a stepĀ  in the right direction, which is always a good step :D

I tried out a competing space campaign style game today, which I didn’t get into at all, but that was entirely due to what seemed a clunky interface. I don’t want people to have the same view of the GSB campaign, so it needs a lot of work. Everything has to be super-intuitive. Lots of work to do.

In other news, we wanted quotes from 3 builders. We arranged 4 to come visit. Only 2 showed up, and 1’s quote was some sort of joke. I’ve now arranged a 5th builder. What the hell is wrong with these people?

Gratuitous Balance Tweaking

I’m back 100% on the campaign tomorrow, I’m at the stage of doing tutorial text for it, then I need some complete run-throughs. Then maybe a pre-order beta release.

I’ve also been drastically improving the games memory usage. And also some baalnce tweaking. This is what I’m likely to be changing:

nomads:
Awazem loses its cost boost, gets 8% armour boost
Duwasir loses its armour boost, gets 10% speed boost
Majali reduces speed penalty from 22% to 12%
Abbadi gets an 8% armour boost
Nomadic dogfight laser damage increased to 8
Nomadic beam laser power usage reduced to 13

general:
guidance scrambler beam weight increased to 147
EMP Shield ecm strength increased from 66 to 82
All frigate armour maxdamageabsorbable increased by 20%
EMP Missile launchers, (both types) missile speed 25% faster. fireinterval reduced 10%, ecm strength increased 10%
Decoy missile launcher weight reduced to 70

order:
Limpet launcher limpetweight increased to 8.2, cost reduced to 110

Feedback welcome. More announcements soon, hopefully.

Memory allocation improvements

I’ve been working on about 16 different things, but one of them was to reduce the memory leakage of GSB. I know some people design very cunning survival-mode fleets and have battles that can go on for an hour or more, and basically GSB leaks memory quite badly right now. Also, if I ever want this game ported somewhere, it will need to get it’s memory use under control. Plus campaign games sometimes lead to some VERY big battle, which makes the issue worse.

Lots of fiddling around (writing my own memory allocation debug stuff) means I could watch exactly what was getting allocated mid battle. I dumped every memory allocation during battle to a text file, then chopped off the first 10,000 (so I don’t worry about early allocations, which are then cached and re-used anyway), so I could see what the long term persistant offenders were.

The next step was to ensure I was looking at the *amount* of RAM being used, not the number of small trivial 20 byte allocations. Those need optimizing too, but not now. To do this, I stuck all the text which looked like this:

file:..\src\GUI_Particles.cppline:429 28672
file:..\src\GUI_Ship.cppline:733 204
file:..\src\SIM_TargetedModule.cppline:905 48
file:..\src\SIM_TargetedModule.cppline:981 12...

Into Excel, and created a pivot table out of it, to nicely summarise each allocation type by number of calls and total RAM allocated. It was clear that particle allocations were rare, but huge. It was immediately clear that I was allocating memory for a big mega explosion even for the tiniest 7 particle fighter-impact effect. All I did was re-write the particle code to calculate on application-start what the maximum number of particles were that this emmiter could ever need, and then ensure it never allocated more than that when I created it.

Some more work with extensive debug display code mid-battle was done to ensure the new system was working as expected, and that the majority of the allocated RAM was indeed needed and being used.
End result? My test battle (Multari nebula, a fair few fighters, fought to the end with all options turned on) went from a peak of 403MB for GSB.exe to 305MB. That’s pretty darned good. The savings on bigger, longer battles will be pretty noticable.

Expect that improvement to be folded into a future update.

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,