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

Campaign AI stuff

I am working on the various chunks of code that determine the strength of AI opponents in the GSB campaign game (currently being developed). The game takes existing challenge fleets, as well as other players campaign-fleets to use as the enemy, in massively-singleplayer style. However, it needs to select an appropriate fleet, in terms of strength, to fight against you, either as a defending fleet when you attack, or an attack on one of your systems.

The simplest method is just to assign a fleet size value to each planet, and let that be the strength there. Simple, but dumb, because nothing prevents the player sitting back and building up a larger fleet. A refinement would be to gradually ramp up a scalar for the enemy fleet sizes over the game, but that would mean it could spiral into insane difficulty, and doesn’t allow for different skill levels.

A system I’m working on is a ‘reactive-arms-race’ style approach. The nearby enemy worlds have their fixed starting values of fleet strength. When battle is joined, the Ai will start to build up larger fleets in nearby systems when it loses, and not bother if it wins. There will be some lag here, to represent building times.

The idea is that once you think you have a slight fleet-size advantage, you need to get all expansionist and start conquering, before the enemy realsies how mighty your fleets are, and builds it’s own countermeasures. If you just sit back and build up, the enemy will be doing the same. I may introduce an additional ‘anti-turtling’ scalar that starts ramping the enemy fleets up even faster if you have gone a long period without expanding your empire.

All this takes ages to code and test, and you never notice it’s effects on the surface. It is important to get this stuff right though (more important than adding more shiny or features) because it’s what drives long term playability.

Why GSB is not like a normal RTS (deliberately)

Have you seen korean starcraft players?

http://kotaku.com/5580080/korean-gamers-are-faster-than-a-speeding-bullet

fast huh?

Although it’s impressive, and kinda funny, it’s also a bit depressing and kinda sad. I like to see the RTS genre as a mostly ‘S’, and not so ‘RT’. If I was 14 years old, I’d think differently, but I’m not. One thing spending your teenage years learning neoclassical heavy metal does, is to teach you that someone with more free time than you is going to be faster than you. Always.

When I was at Elixir, I worked on a game that got canned, which was like speedball. it seemed to be a really strategic game. The player who won was the cleverest, the most strategic thinking. It played a bit like real-time chess. The reaction-time and number-crunching side of it was minimal, it was an ‘outwit-the-enemy’ style game. I liked it.

GSB doesn’t care how fast your reactions are. You can be 55 years old and have arthritis, you can still design a kick-ass fleet, and a cunning challenge.  I know starcraft is a massively popular game, and they know what they are doing, but you can only really design good games if they are games you personally enjoy playing. I can’t compete in FPS games or arcadeish super-fast RTS games, but I can compete happily in GSB. I also like the asynch nature of online challenges, because it eliminates the asshole attitdue of many online RTS players, who drop connections when losing or mock you during in-game chat,

I met the guys from introversion for lunch today. Had a good chat about games and indieness. It’s always refreshing to chat to people who understand what it is you do, and do something similar.

Shield Support Beam

Right, so here we have a brand new module I think I’ll just add to the game. I was thinking about shoe-horning it into the campaign, but that is a bit awkward to do. It’s the first module that affects a ship on your side that isn’t the owning ship. Its….. (drumroll)…

The Shield Support Beam!

Or ‘Remote shield energy projector’ or whatever I finally call it…

Basically it lets a frigate beam-over shield energy to reinforce a failing ship on a nearby friendly cruiser. It’s a frigate-only module, only working to reinforce cruisers, with a max range of 450. Crew use is  8, power use is 18 (high!).

screenshot (its the blue beam thing): I may well tart-up the graphics for it a bit more. Click to enlarge.

The beam looks for nearby friendly ships whose shields are below 80%, and then triggers this beam which empties it’s ‘capacitor’ into the target ship, over a short burst of time. That then reinforces the target shield, back up to it’s normal strength. This is basically a way to temporarily gvie a nearby ship a really fast shield recharge, and is a defence againts those fleets that hurl 100 plasma or 100 missiles at your cruisers and crush them instantly.

I’ve tested it lots, but obviously it remains to be seen how people use this. Obviously you could stick 3 frigates behind every cruiser, in formation and have super-reinforced shields, but that ties up 3 frigates that have to stick by their cruiser, and also chews up 3 sockets and a ton of power. It’s a weapon socket, so that matters. So far, I’ve found it handy to combat plasma spam, but not a totally killer-app.

I’ve also set it to be an empire-only module, initially locked (but cheap to unlock). I like the idea of making any future modules race-specific, to give the races more flavour.

Thoughts?

back to the campaign tomorrow…

Selecting suitable user-generated fleets

I’m hoping that the Gratuitous Space Battles campaign add-on will make use of existing player-designed fleets to give a vast population of potential enemies to fight. Although this system is coded, in-use and working, it needs a lot of tweaking. (I also suspect it might be advisable for me to have this as an option, with a stockpile of ‘cliffski-designed’ fleets available for use instead). My current basic criteria for selection from existing fleets are:

  • Produced relatively recently (no beta or massively old challenges)
  • Has a good enjoyment Rating
  • Has more than x ratings (to ensure its not just a few friends)
  • Is valid (no modded content). The client filters out expansion pack fleets for people without them automagically.

I think, from my early playtesting, that I need a bunch more criteria. I’d like to avoid spammy fleets, or fleets where any ‘tricks’ are used. I think I need to at least add this:

  • All ships have engines
  • If the fleet is larger than X ships, then there is more than 1 type of ship design present, or no design is more than 75% of the hit point worth.
  • The fleet has more than x different weapons modules if larger than Y

The pain with this sort of thing, is although it’s trivial to do this in C++, I have to code all that sort of thing in php as it runs on my server. Effectively, new challenges get processed as they get rated, and may get added to the ‘potential campaign fleets’ list. That means lower productivity, as I’m more a C++ than a php coder, but that’s progress for you.

I’ve got a good few days work done on the campaign stuff, and am dfinitely 100% back into it. It’s still a long way off (I have music for it, but no art yet, for example), but its should be good fun. As long as sales pick up a bit, I hope to continue with improving the campaign after its launch too. There is huge potential for it, if people like it.

Also, I added a retweet me button thing to the blog today, feel free to use it!

Campaign game todo list

Just a bit of a public brain-dump from the campaign stuff I’m working on again.

things to do:

  • Handle situation where your fleet retreats from battle, at the same turn that the AI invaded the retreat destination and conquered it.
  • Better handling of retreating mid-battle, rather than letting your fleet insta-quit the minute you see the enemy.
  • Code to scale the AI so that it attacks less at the start of the game, and puts off a homeworld invasion until much later. Also, maybe some tutorial help hints to advise you not to leave the homeworld undefended.
  • Investigate why the threat level of systems seems to rise too quickly.
  • Give a loyalty boost to any planet where your fleet just repelled an AI attack
  • Add some sort of method for the player to see which other GSB player supplied his opposition fleet, and maybe give feedback on the enjoyment.
  • Overall difficulty balancing code to prevent a cakewalk or being quickly and decisively crushed.
  • Tutorial hints needed on when and how to repair ships
  • Feedback at the end of turns on loyalty and threat changes
  • Better UI to show that the current recruitment and cash earned from systems is being scaled by loyalty

In other news, I’m apparently going to be giving a  20 minute talk at the World Of Love Indie game conference next friday in London. Eeek. Public speaking etc. Scary…

I’ll probably talk about the business side of selling direct on the PC, because not many people have succesful experience of that, so it might be interesting to some people. I hate being known as ‘the biz guy’ as much as ‘the piracy guy’. I’m a game designer and coder really, but there are lots of people who talk about those topics. Ho hum.