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

Crappy windows code

Soo… some people have a bug in GSB where in fullscreen mode, the titlebar of the windows ‘window’ is still there, but invisible, meaning you can accidentally hit the close or miniomize buttons, or worse-still, double click and then ‘maximise’ the already fullscreen window.

I have encountered this a few times in GSB myself. but cannot reproduce it right now. It’s certainly not reliable. And it’s annoying. I would love to fix it. I’m pretty sure its something to do with the windows code that selects either a windows style or windows class.

currently I use:

wcex.style            =    CS_CLASSDC | CS_DBLCLKS;

and

HWND gWnd = CreateWindow(appname,appname,
 WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
 0,0, width, height, GetDesktopWindow(), NULL, hInstance, NULL);

Both chunks of code I haven’t changed in ages. I suspect the code is wrong, but am finding it impossible to find what is ‘correct’. Looking at the directx samples makes me want to cry. In amongst 500,000 pages of incredibly convoluted, confusing, totally over-engineered MFC style bullshit that they call ‘DXUT’, there is a hint that microsoft themselves use just CS_DBLCLKS and WS_OVERLAPPED. The thing is WHY? There is no documentation. In the old days, directx5 used to tell us we need to use WS_TOPMOST or somesuch.

You would imagine that as 95% of people using directx write games, and 90% of them want to, at some point, run fullscreen, that the directx docs would have a line saying “for fullscreen apps, you need to select these options for your window”. No such clues have emerged though.  Another evenings trolling through coding forums no doubt…

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!

World Of Love

I was at this yesterday:

http://indiegamesarcade.com/world-of-love/

Giving a talk about the business side of indie game development. I have my phears that I will be forever known as ‘the piracy guy’ or ‘the business guy’ which would be sad. Even the ‘my powerpoint slides screwed up guy’ would be better than that.

However, I gave a talk on the topic because I know a lot of indie guys struggle financially, and I wish they could afford to be full time, supporting themselves from their games so they get to make more cool games. I hope what I said was helpful, and not too negative. When you look at the hard numbers behind indie gaming, it can seem impossible. If you can’t sell a game every 52 minutes, you will need a day job, basically. (And that means a demo download every 5 minutes, assuming an awesome game, 1 game a year, 100% of the profits, and one person consistantly making popular games without a flop, illness or other eventuality).

Anyway, I met tons of cool people, and shook hands with loads of people I’ve emailed and forum-chatted to but never met. Eskill Steenberg gave an amazing demonstration of how Love was made, which makes my tools look like the amateurish crap that they are! I finally saw a live demo of subversion, and that was fantastic. This may be the first introversion game I like enough to go buy. Plus Terry Cavanagh gave a great presentation of games that made me laugh out loud, which is rare enough.

It was also pretty surreal to end the conference in a karaoke bar singing bon jovi whilst eating chinese/japanese? food. Maybe now people will finally believe me when I say I cannot sing. I accept kierons explanation that I was trying to do ‘Bon Jovi, sung by Bob Dylan’, the best.

I am 100% convinced that waiters in karaoke bars are given special, probably year-long training not to show any facial expression as they enter a cubicle full of drunk english people singing out of tune. Especially if the song is called ‘I touch myself’. All very strange…

Back to work tomorrow methinks.

Better Smoke Clouds

Sooo…

On my list of stuff I think looks not good enough, for me to improve when I am ahead of schdule and ‘treating myself’, is the black smoke clouds left behind when ships explode (mainly cruisers). They always looked a bit poor, and were just a handful of big sprites that rotated and faded in and out.

I’ve spent a good few hours investigating techniques and ideas and ended up with this:

Looks better in motion. Despite a lot of reading about fluid dynamics and mega-particles and other stuff, I ended up just using spinning sprites again, but this time with tons of refinements, in terms of different sizes, generation delays, greater sprite contrasts, and using sine waves to control spin speed degradation, sprite size growth and also now have 2 distinct groups of them in different size distributions.

I also experimented splitting them into layers so ships could fly through the smoke, underneath half of it, but it looked a bit wishy washy so I junked it. There is some extra fillrate involved in doing this, but I don’t think GSB is maxxing out many video cards right now, and this does look better to my eye.

Also, retreating now works 100% in the campaign game. Just need to have a visual retreat countdown timer and some tutorial hints for it now.