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

Fighter nerfs, Spatial anomalies, UI fixes galore

I have a mental trigger than once I’m past 11 things on the ‘recent bug fixes and improvements’ list then I need to get off my ass and release a new patch for all you lucky beta players of Gratuitous Space Battles.

So hopefully some time earlyish tomorrow I’ll be doing that with version 1.13. Here is what will be in it:

1) Fixed bug where power consumed can seem to equate to power produced but still be shown to be invalid on ship design screen
2) New feature : new minimap-button and hotkey ‘O’ turns on or off a green/red overlay to show friend or foe ships.
3) Fixed bug where the size of a ship-destruction shock wave varied based on your zoom level at the time of detonation
4) The option to turn off repair-drone effects now actually works correctly
5) Better repair drones, in that they have better weld effects, and actually carry out visible repairs so ship’s damage now reflects their true status much better
6) Added tooltips to the options
7) Added a new ‘hardware sounds’ option you can disable on options if you want pitch shifting sounds without slowdown at fast speed and have certain sound cards”
8) Added a new button on the deployment screen that lets you read all of the restrictions and spatial anomalies for this mission.
9) Added some better spatial anomalies
10) Fixed bug where tutorial got stuck at ‘select orders’
11) Various scenario deployment changes to take into account the new spatial anomalies
12) Missiles that are en-route whilst their target explodes will now autodestruct rather than fly on aimlessly (regardless of missile type).
13) Fixed major bug involving engine modules where damage to an engine module is ignored until the next time the ship is damaged (should make fighters more vulnerable)
14) Rebel atlantis bomber now has it’s drifting space hulk triggered
15) Attempting to load a design of ship into the editor that is invalid now gives a nicer, in-game error rather than a crash!
16) New delete button on file opening windows lets you delete existing ship designs and deployments.

It’s the usual mixture of minor niggles like 1) and usability stuff like 2) plus big enhancements such as 5) which I already blogged about. The big ones here are definitely 5) and 9). You might enjoy trying out the emerald nebula again, and the last skirmish mission, as these now have some more interesting spatial anomalies. Hopefully this will make for some good new challenges too, because people who hate fighters or love frigates can now have their fun.

Also, fighters have been nerfed a bit, partly by huge balance change improvements to anti-fighter missiles (not listed here), but also more subtely by 13). This means that it’s all fun and giggles in your high speed mega fighter until you take a single lucky hit. Then you are just some slowly drifting piece of metal with ‘target’ written on your ass.

Penny Arcade Traffic

In case you missed it, GSB got mentioned on penny-arcade, which was awesome. It also brings in some decent web traffic, and I reckon generated about 100 sales (no way to be 100% sure). This is all very welcome indeed, it helps feed jack and jadzia, and as an afterthought, me. Here is the blatant stats-porn: (filtered by penny-arcade as a referrer, so the graph spike isn’t relative to my normal traffic!)

I’m working on more interesting spatial anomalies for the game today, and tomorrow (at least) That will involve rejigging some fleets, some balancing etc.

Repair Drones

It’s amazing how much extra effort had to go into this over the last 48 hours…

Repair drones have always looked a bit cool, but not been much help to the player. The problem is, their only tie to the core simulation was their quantity. Every repair module gave you a ‘swarm’ of repair drones, and once your ship took some damage, you would see them hovering around and looking like they were welding the ship back together. The problem was, they didn’t actually achieve anything froma  visual point of view.

Thios was worse than a visual bug, because it means that when you play against an enemy fleet that has lots of ships which make strong use of repair drones, you cannot tell if that enemy cruiser is on it’s last legs, or just cosmetically burned, yet at 100% hull integrity. Surely this had to be fixxored.

So now (behold the youtube vid below), those drones (as well as having nicer welding effects) do actually weld those damaged bits of your ship back together. To make it REALLY obvious in the vid, I built a ship with three repair modules, so until the repair supplies run out, it’s pretty nippy at welding stuff back together.

Let me know what you think. I reckon it not only looks better, but will make playing against repair-spammed ships much easier and more enjoyable. (in terms of learning from the battles. The simulation is unchanged)

Another patch, some web stuff…

Today I released version 1.12 of GSB. That fixes a ton of AI stuff, and a lot of minor UI niggles. It is pretty handy that beta testers compile lists of little UI things they notice (that as developer, you tend to become blind to).

Fixing bugs is relatively stress free, it just takes time and effort, and concentration. Improving Ui stuff, new features and new graphics are all quite stress free too. The really scary stuff seems to be balance changes. Everyone who plays the game uses different tactics, and no matter what you test, the nanosecond you release the new patch, people find some cunning way to design ships that takes advantage of a loophole you hadn’t even thought of.

That sort of stuff is inevitable with a game that involves competition, but it does make it pretty scary and time consuming to ever change anything. I concluded that missiles were not good enough, and that fighters flew too fast, but there are a dozen ways to fix both those issues, and every change has its side effects. Still, the game is much better balanced and playable that it was on first release, and despite minor niggles, I do think that on the whole it gets better with each patch. (If not, I’m wasting my life!)

In other news I added a flash widget to the GSB website that scrolls through images. It cost me actual real money! I’m no flash expert, so buying a pre-made component was worth it for me. I normally don’t like flash on websites, because it seems a bit gratuitous but…

Fixing the AI orders (again)

Some cunning GSB players noticed that the orders were not working correctly in terms of attacking certain classes of ship. If you deleted the ‘attack fighters’ order, the desired behaviour was that the ship ignored fighters until there were only fighters left.

This bit of code was broken and basically needed re-doing. Now you might think it’s an easy algorithm that goes like this:

Go through each intact enemy ship
Pick the optimum one out of the classes we should shoot at
If you still have no target...
Go through each intact enemy ship
Pick the optimum one ignoring class.

Leaving aside the inefficiency of parsing the 300 enemy ships twice each time, this isn’t as simple as it looks, because a lot of the time a ship will fail to find a target within range. Thats because all of the ships its ordered to fight are across the map. Ideally the ship trundles over and shoots them. So the criteria for actually picking a target differs from the criteria for establishing whether or not there are any valid targets. Plus, the idea that once all the frigates and cruisers are dead, that EVERY TIME I look for a target I have to do a dummy run through with invalid orders is just untidy and slooow slooow…

So I ended up coding a convoluted complex system which (as convoluted complex systems often are) is way faster than that. Basically Fleets keep track of if they have any ships of each class. Whenever new ships show up (survival mode) or a ship dies, the fleet recalculates that data. if the data has changed, it tells each intact ship in the fleet. Those ships then compare this against their orders, and deduce whether or not the orders still stand. If they don’t, they tell all their turret AI’s to ignore class-based orders from now on. This involves practically no overhead during a  typical target-acquisition call (which are very frequent)

That took a lot longer to code, debug and test than it did to type here :D

In other news, I fixed some dodgy server-side code that prevented challenges being deleted. I’m amazed more people did not whine at me that the ‘delete’ button on a challenge basically did sod all. It now works :D