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

Making actual tools

I know that editors and level tools are part-and-parcel of most game development processes. Most games companies have at least one full-time tools programmer, who will work 8 hours a day for a year designing, coding and supporting the tools made to build the game. However, when you are a one-man-band, dedicating that amount of time to tools just isn’t viable.

There are several solutions. You can try and hit the happy medium where you spend enough time to get usable tools, but don’t let it eat too much into your schedule. You can produce really good quality tools that make game production a breeze, then realise you have not got close to finishing a game and you have to go get a day job again… Or you can just hack everything in manually using notepad and excel and worry about it later.

I’ve traditionally chosen the last option. I hate MFC, which is the ‘language’ that tools used to be built in, and I’ve never learned java or C#, which is what people often use now. That means that when I coded the few tools I use (like my particle-engine tool), I hand code them in C++ just like the games GUI. This takes ages.

Until now, I’ve been manually editing text files for the spaceship data. I have a master spreadsheet with lots of the data in, to make balancing easier, but there is a lot of manual staring at paintshop pro and memorizing pixel positions to type into notepad. Clearly this is mental.

So this weekend I made my very first steps towards a proper ‘spaceship-hull-editor’ for the game. This is still a makeshift hacked tool which won’t ship in the game, it’s just a quick tool to make it easier for me to tweak some of the graphics data, such as placing particle emitters for burning ship hulks. It’s a small step in the right direction I guess.

In non-tools news, I’ve been fixing a lot of very minor graphics glitches, the odd disappearing piece of debris or mis-aligned laser blast, or slightly crappy looking tractor beam graphic. The game is looking quite nice. Next week will be geared towards some online-integration, and some general gameplay code.

BBC interview

I had two people from the Spanish BBC website at my house this morning to interview me for a thing on digital piracy. It’s pretty cool to be interviewed at all, but it’s unfortunate that it’s about piracy. It all comes from the ‘talking with pirates’ blog event from last year. I don’t really want to be seen as ‘the piracy guy’. I’d much rather talk about game design, or other issues within the industry. They filmed an interview with me, and took some shaky cam footage of GSB. If it goes on-line I’ll post a link here. Maybe I’ll be dubbed in Spanish?

I saw the new star trek film 2 nights ago, and it was weird seeing tons of spaceship debris and escape pods. it’s like they have been playing my game :D Yet more inspiration to make the GSB visuals look good…

Fixing minor graphical things

It’s the weekend, so rather than working on gamey stuff I’m making the battles look better :D. I’ve been improving the way the big ships explode so the drifting hulks fade in better, and the subsidiary explosions now blast in various directions. Turrets now smoothly track their targets, and there are various other small tweaks like highlight flares when bullet weapons fire.
My last niggly annoyance of the day is bullets, by which I mean laser pulses.
I draw all the bullets in one go, to make it extra fast, which is fine, but to do this I have to draw them AFTER I’ve drawn all the ships.
The thing is, the bullets are quite big, and when they ’emerge’ from a gun turret, they obscure it for the first frame. Ideally, I’d draw the bullet above the ship but below the turret so it would emerge naturally.
I think I’ll code a real horrid hack, which is to mark bullets as ‘n00bs’ for the first few pixels of their existence, and draw the n00bs separate from the main bullets.
That way I keep generally drawing them fast, but I also don’t get any anomalies when you hit pause and catch that 1 in sixty-off chance of seeing the frame where it looks wrong…

This is why game code looks like spaghetti. All those hacks are there for a reason I tell you!

Reflecting beam lasers

My recent design thoughts and today’s tweaks make it clear I needed a way to see visually that lasers were just bouncing off enemy shields and achieving nothing, so I added a sort of ‘bounce’ effect to the lasers (see video below). I didn’t bother doing any fancy maths for the collision reflection, it just skews off at a slightly random angle. Does this look ok? (also there is some quite cool shooting of rockets by a point defence laser going on in the second clip).

Spaceship speed

I’m having balancing issues with some of the existing game mechanics. One of the things that I use to differentiate weapons is their tracking speed. Some smaller weapons track fast but do less damage, and vice versa. Basically the tracking speed is compared to the targets current speed, and this gives some multiplier for the ‘hit chance’.  Obviously big cruisers are slower than small fighters.

So far so lovely.

The problem is that in general, you want your ships to position themselves at a certain optimum range, and pound their enemies from a distance. In the case of the big cruisers, that means move into range, sit there and go zap until you or the enemy dies. The problem is, the minute you sit still, tracking speed becomes irrelevant. This means that when fighting against cruisers, tracking speed is basically no big deal, and the weapon with the highest damage-per-second, range and penetration of armor/shields wins.

The solutions are many and varied:

1) Have an optional ship ai-behavior of ‘keep moving’ where your ship basically spins in circles at a certain range (clunky and difficult to get a reasonable turning circle)

2) Always assume the ship is at max speed for hit purposes (might look silly)

3) Introduce a new mechanic to compensate (maybe ECM resistance?) and ignore tracking speed for weapons aimed at the bigger ships.

4) Just make greater use of balancing the existing mechanics to still make the choices interesting

I’m currently drawn mainly to 3) and 4). Any thoughts?