I put up a new article, in more detail on how GSB was made and what was involved. You can read it here.

Recently, in between working on patch 1.31 and the mysterious second add-on for Gratuitous Space Battles, I’ve been looking at some technical issues people are suddenly having with Kudos 2, Democracy 2 and Some of my other games. Suddenly, without me patching or changing anything, people started complaining about vertex buffer crashes. At first, it seemed to be Windows 7, or Windows 64 related, at which point one naturally assumed that the geniuses at Microsoft have ballsed up yet another operating system, but then the odd vista or even XP user had similar issues. Then it suddenly clicks that new nvidia drivers were released, and everyone having crash problems had an nvidia card.

I use vertex buffers differently in GSB than I do in my other games. I was using them in a slightly unusual way before. A way that is perfectly legit, that directx says is fine, where the video card returns no error message and says its all fine, and working great. Everything is good in the world.

And then suddenly, a few weeks ago, with their new drivers, some brainiac at nvidia has obviously thought ‘sod it, who cares. If they don’t use a VB in the way WE at nvidia like to use it, who cares it it breaks?’. And thus bug-ridden drivers are released. I have absolutely no doubt that the latest trilinear bump-depth-shadow-pixelling demos in directx11 look just superl33t at GDC with the amazing nvidia code. Just a pity that they couldn’t be assed to check if all the older applications still run isn’t it? Especially given that the entire modular COM design of directx is specifically designed to ensure 100% backwards compatibility.

Nvidia are still in a cold-war mentality arms race where they think all people want are features. It’s the same as Microsoft. “Give them new features!” “Shiny things!”. When Vista came out it was promoetd on the basis of the new flip-view. Have you ever used it? Me neither. Fuck features. I don’t want features. My mobile phone doesn’t even have a camera on it. My home phone doesn’t have an answering machine on it. Features do not get my money. Reliability and Performance gets my money.

If Windows 7 was advertised purely as “Vista, but more reliable, and quicker”, I’d buy it today. When I buy a video card I only care about how compatible it is. The performance difference these days between equal priced cards is so small they even need to blow up screenshots and use arrows pointing at pixels which show the difference. Who cares?

Worst of all, this obsession with tomorrows new feature rather than yesterdays compatibility is putting two pressures on pc game developers like me:

#1 take time away from making new PC games to actually go back and re-code old ones to work around nvidias latest ideas.

#2 Seriously think long term about doing browser games or console games, where this isn’t such a problem.

I’d hate to have to do either :(

7 Responses to “The fallacy of features. New and not improved.”

  1. Cap'n Lee says:

    reminds me of the feature wars that happened between browsers in the 90s


    because the browsers were battling for market share, they started adding features and tinsel when they should have been making the browser more reliable and with fewer security flaws. It took a long time before this got resolved with browsers.

  2. mmalex says:

    well, it is better on console, but no longer perfect now that we are in the internet age of updates. here’s a tale of woe: as part of every console/directx, you get a SIMD vector math library, normally implemented in header files for speed. one day, we recompiled littlebigplanet against the latest sdk. except that we didn’t even consciously know we were doing it, the sdk headers had just been updated in source control by someone, assuming that it would make no difference. suddenly QA reported odd REALLY SUBTLE things like not being quite able to complete a given level (that hadn’t changed), or physics was a bit odd (on a level that hadn’t changed). we rolled back to our original shipping gold-disc code revision, recompiled. still not working. we spent AGES scouring our code / build process / source control setup trying to find out how we’d broken it, without changing any code or data. then someone thought to check if the sdk had changed – it had, but the release notes mentioned nothing that could explain it….
    after MANY hours, we noticed that silently, the optimised inline assembler for 4×4 matrix invert in the standard SDK header files, had been re-optimised to be faster by 1 clock cycle – without any documentation to mention it. (hey it’s just a multiply add instead of a multiply followed by an add, right? and it’s faster!)
    it was also different enough in precision to make our physics engine minutely different – butterfly effect took over and very, very rarely levels built to behave one way, started behaving another. (doors got stuck, pistons changed their friction behaviour…) our solution? we now patch every new sdk header back to the old implementation.
    so, even in console world, all is not completely stable…

    oh and windows 7 IS faster and more stable… at least than xp pro. I skipped vista, but win7 halved our compile time, due to better disk handling.

  3. koloth says:

    While I understand your viewpoint, I’d just like to point out that if you “odd use” of vertex buffers is out of spec, then you have no one but yourself to blame, even if it has always worked in the past. I’m sure they do check to see that their driver updates do not break proper functioning of the vertex buffer, but there is no way that they can check to see that every oddball hack that developers have used will still work (particularly amongst the independent games).

    Of course, if your use was completely legit then of course ignore everything I say. However if it isn’t, you should reexamine who you are blaming.

  4. CountVlad says:

    I understand what Koloth is saying about them not being able to take every possible permutation of code into account, but I do think it is a general philosophy now in the gaming industry that the customer should take the steps to make sure their computer is compatible with the software, not that the software should be compatible with the computer.
    I love Windows Vista (not many people say that, huh?) but one of the things that REALLY annoyed me when I first got it was that it wasn’t backwards-compatible with loads of quite a lot of old software. I managed to eventually find user-made patches and other software to get around most of the problems, but there is no way I should have had to do that!
    They should do what many Wireless Network Routers do (yes, I know it’s a bit of an odd example, but I was struggling to find one. lol.) where the router will support an “N” class network but also support previous technologies all the way back to a “G” class network (really old and slow).

    Just my two pennies.

  5. cliffski says:

    I think the worst thing about your matrix code example is the lack of documentation. I haven’t found anything from nvidia saying “yup, we changed what’s permissible in terms of vertex buffer lock strategies’. But somewhere, there is someone who made that compromise in a driver rewrite and didn’t mention it to anyone.
    Bit scary to hear you still get this crap on consoles :(

  6. foo says:


    I have a mildly negative comment, a kudo and a question.

    The comment is a ‘cup of tea’ issue. It’s why GSB is not my cup of tea, even though I have enjoyed a number of similar games.

    There is too little interaction. If it’s just setting up a battle line and letting the movie play out, and there isn’t any place for the player to react to decisions made by the enemy, that doesn’t seem like a very fun game to me. And I’ve played a LOT.

    Perhaps it would be good to have a turn mode, where battles are split up into turns.

    There was a game that did this, for the Apple II, but for the life of me I can’t remember the name. You had several ships, and each turn consisted of a certain number of rounds. You would issue orders for every round of a given turn, and then that turn would play out. It was very interesting and enjoyable. The model in GSB just doesn’t do it for me the way that game did, 25 years ago. Very original, ballsy decision in this marketplace, but it just isn’t interactive enough, and I’m 100% sure it’s costing you sales. I would buy a game like this one IN AN INSTANT if it had more interactivity during the battles.

    Why? Because it’s original, somewhat unusual, and pulls no punches with regards to the fact that violence is the entire raison-d’etre of the game. There’s no mucking about with characters we don’t care about or any of that bullshit. Just explosions going off all the time. Great job, and good on you for making a success of it.

    Lastly, what sort of GUI toolkit did you use for this? I’m very interested in that since GUIs are the final piece that’s lacking in my own games.

    Rock on!

  7. Karl Katzke says:

    #2 Seriously think long term about doing browser games or console games, where this isn’t such a problem.

    I hate to sound like a fanboy, I really do, but … one of the reasons that OS X (iPhone, Mac, etc.) development is so popular these days is that the hardware is limited and the OS itself has a well-maintained obsolescence arc. One of the issues with Windows/PC (and Droid, if we’re talking about hardware) is feature compatibility checking and the difference between different hardware, driver, OS patch levels, OSes, and manufacturers. Imagine if you only had a few versions of hardware and a limited scope of OS versions and patch levels to test against … and the vendor (Apple) has tested heavily to ensure compatibility within the platform.

    Now, for those good reasons, there’s three hundred thousand BAD reasons to target the platform. But while you’re stewing over your driver issues, I’m gonna go play Airport Mania through again. They released the same game for the mac desktop and the iPhone, and I’ve bought both…