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

Even More Gratuitous than before (1.19) + Rezzed

Sooo… because making decent mac & linux ports, and translating into French German and Spanish takes so long…I’ve put back my target release date for GSB2 to …

April 16th

Which is a pain, but on the plus side it does mean that I have more time to be careful about stuff like final mission and hull balancing, optimizing and polishing and general improvements. Plus it means I’ll have steam trading cards on launch day. I’m also hoping for a simultaneous Steam/Humble/GoG launch.

With that on the horizon, today is patch day to version 1.19. what has changed I hear you cry? Here are the highlights:

1) New more helpful text displays instead of ‘no effect’ in battle.
4) Improved tabbed interface with more data for the end-battle stats.
9) Simplified system for quickly and simply posting a ship design as a steam workshop submission added after saving a ship design.

(and obviously lots of minor tweaks & fixes).

I’m hoping the one-click posting of ship designs will work, and be cool. It *might* not work for anyone but me until the game is officially steam-launched, not sure TBH.

In other news, tomorrow I head off here:

london

That’s London. Hopefully there will be less cybermen and more gamers as I will be at REZZED showing off both Gratuitous Space Battles and Big Pharma, with the help of Tim from Twice Circled. COME TRY OUR GAMES. With any luck GSB2 will have dual monitors. Plus if you have a youtube channel and want some content, come interview us. We are photogenic and literally ooze charisma. We have boxes of leaflets (mine are printed wrongly because I’m a dork, so they seem to read backwards or in some funny order. I am too busy to care),

stuff

and boxes of badges. The GSB2 ones printed weirdly, again, I’m stupid, but the Big Pharma ones are cool. Tim *may* have jelly beans.

So please come along on Thursday Friday or Saturday and enjoy the show! Also I have a new phone. I may do some exciting live-tweeting from the show floor!!!!111oneoneone.

 

 

GDC thoughts from 2015

Ahhh…the indie life, so summed up by sitting here in the first class British Airways lounge at the airport eating unlimited free m&ms. (I don’t fly first class, but I looked very British, and there was no hot water for tea…so they bumped me up).

Another year, another GDC. Let me muse on what I have learned. Because of the way my mind works, lets put the lessons in list form…

1) GDC is big. Bigger than ever I suspect. There are a lot of developers out there. If ever you start to worry about all those releases of new games on steam, wait until you physically see all those developers in one city. There is a LOT of competition out there. A crazy amount. My personal theory is that at least 20% of the indie devs at the show are burning through savings and losing money. For ones doing mobile games, I’d guess 50%. There are too many games, not enough *paying* players, especially on mobile.

2) GDC and its ilk are still a bit of a stressful nightmare if you are shy and introverted or don’t know many other developers yet. By any objective standard I failed at networking. I met 2 journalists for interviews, that’s it. I didn’t hustle, I didn’t introduce myself to loads of people, I totally forgot peoples names, I didn’t tell anyone about my game. I did drink lots of wine and ate sushi, so that was good.

3) Giving talks is great, but you feel like jumping under a bus just before you speak. The good thing is people then know who you are and have something to say to you, which fixes 2) slightly.

4) Big companies have more money than they can count and are throwing it at attempts to hire new developers. This is strange, as to me it is the flipside of the struggling smaller devs. There seem to be huge companies earning crazy money, and lots of indies eating noodles, and maybe just a handful in-between the two. The phrase ‘get big or go home’ comes to mind, alongside ‘arggghhhhh’.

5) I am so behind on graphics tech. I went to some directx12 talks and Vulkan (GL) talks and didn’t understand half the terminology, let lone what was being revealed. I should probably jump from dx9 to 12, or to vulkan eventually. Still, I prefer being l33t at DX9 than a n00b at dx12. The talks really made me want to jump into optimizing and expanding on the GSB2 tech once it’s had its initial release.

6) There is a limit to how many m&ms a man can eat before feeling sick, and it really does sneak up on you.

GDC 2015: Day three. tiredness and happiness

So…I’ve given my two mini-talks, at the indie soapbox and the AAA to indie thing, plus a podcast thing. I only have one official meeting to go, and thats me done for GDC 2015. So here are some early thoughts and memories.

I was SO nervous before the soapbox. I was dreading it. I really wished I hadn’t agreed to it. It felt mega stressful, but it looks like it went really well. I did worry about it being badly misinterpreted and taken the wrong way, but it seems not to be the case, which is a relief. The fact that the talks ‘went well‘ means I feel justified in coming to GDC. I guess it is good for PR, and I can make a ‘business case’ to myself for being here.

One of the best things about GDC is meeting up with people you know online but hardly ever see. I won’t namecheck people, but there are a bunch of cool, nice, talented developers who I only ever see at GDC or similar events and its great to shake hands again, have a coffee or a meal or a drink and chat to people who do what I do.

My hearing in large groups of people is *so bad* combined with what I suspect is a very mild case of face-blindness, that I worry that I spend a lot of time apologizing to people I don’t recognize combined with a lot of intense tom-cruise style staring at people as they talk (mostly as I’m lip-reading). I suspect some people think I am much stranger/arrogant/forgetful/grumpy than I actually am, because they only know me from loud parties at industry events…

GDC is HUGE. There are literally *whole buildings* full of talks, events, people and booths that I didn’t even know existed until today, and they are packed to the rafters with *other game developers*, which just freaks me out. We are not a bunch of nerds typing and being ignored any more, there is clearly a LOT of money in games, And some companies are obviously growing like mad, Wargaming.net had a big booth which more or less screamed “PLEASE WORK FOR US” in an attempt to match headcount to ambition and revenue. Crazy times.

On the flipside, no way can the industry support so many indie devs with prices so low and sales so all-consuming. I’m curious to know what percentage of attendees are burning through savings with no break-even point on the horizon. Terrifying.

And holy crap I’m tired. If you are the worlds biggest ‘glitch mob’ fan (whoever that is), hate me now, because I have tickets to the glitch mob thing, but I’m on a hotel bed typing instead. Sorry!

GDC day one (well day one half)

Gah…

The first time I attended GDC I wrote an article about how it can be good *if* you are a sociable networking type, and it can probably suck if you aren’t, and if you are randomly one or the other (like me), then it can be a mixed bag.

That kinda hits home right now. I’ve been to two talks, and they were ok, and chatted to a few people at the show, but not many, and I am just not someone who is going to introduce themselves to strangers. To quote mr darcy…

“I certainly have not the talent which some people possess, of conversing easily with those I have never seen before.”

Of course that’s just one of many ways in which I am like Mr Darcy. But anyway… I’m really glad I’ve arranged to go along to some indie meal tonight, because I know at least *one* person there, and if I sit down and order food I”ll *have* to talk to people, which is probably what I should be doing, and with any luck I can tag along with someone who goes to the other party afterwards. Maybe I should drink some wine :D

I find it quite difficult to write about stuff like this, which is kind of why I do it. I’m sure there are hundreds of blog posts and tweets right now from happy outgoing game developers about how cool it is to hook up with so many like-minded individuals, and thats awesome, I just realize I’m the shy, slightly awkward british dude sat in his hotel room networking with nobody, typing and eating some pretty gross cheese snacks and wishing there was a bloody kettle.

 

multithreading sound engine bug…

I have a bug thats driving me nuts. I use some middleware as a sound engine. its the ONLY middleware I use, and its bugging me. theoretically its easy to use, but I have a situation that it seems incapable of coping with.

With this middleware, I can play a sound, and request a pointer to track it. I can use that pointer later to adjust volume, or stop the sound, or query if its finished. For various reasons, I need to keep my own list of what sounds are currently playing. Thus I have a list of ‘current playing sounds’.

The middleware gives me a callback which triggers when a sound ends. This is handy, as I can then loop through the current playing sounds and remove it, keeping that list up to date. The sound engine runs in its own thread, so that callback triggers in a different thread to the main game.

This is where it goes wrong (but only on fast speed). I decide from the main game, to stop a sound. I firstly check that the sound exists within the current playing sounds. It does, so I access the sound pointer and tell it to stop. But wait! in-between those two events, the sound has expired naturally (in another thread) and the pointer has become invalid. CRASH.

using critical sections just produces race conditions, because stopping the sound has to happen in the same thread as the callback, and there are likely several sounds generating callbacks in the same frame (on fast speed) as the one I’m trying to stop, and it reaches a deadlock. It’s a real pain.

One solution is to make all such sounds loop (and thus never expire naturally, and rely on me killing them, which should work ok) and I thus never hit this problem. Another is to just not stop them prematurely (looks weird). I have currently hacked it, but I suspect the 1.18 build still has this issue manifesting itself as a 4x speed lots of beam-lasers crash.

Another solution is to tell the sound engine to run single threaded but that seems horrendously hacky.

I may have to try the always-loop solution. One day I’ll write my own sound engine again.