KØR.

2010, May 31st 2:17 AM

This game had a lot of firsts. It was my most visually ambitious game yet. It was my first use of actual perspective. And it was my first serious attempt at making art without resorting to 2d sprites – the only sprites in the game are the black structure at the beginning, the minigame icons, and one simple sprite used for the explosion graphics.

What Worked

Honestly, all of the above worked.

The game does look good – I think the explosions particularly turned out well. I spent a good chunk of time on "small things" like screenshakes and a gradually changing background. Things that nobody really mentions, but that help the game tremendously. So, full marks for art.

The game design itself also worked as well as I was hoping. The game design didn't really change from the first day to the end – I knew where I was going with it, and I went there, and everything was good. I didn't have concrete plans for the bosses from the very beginning, but they came together in an hour or two each once I sat down to work on them.

What Didn't Work

I made some decisions early on about the monster graphics that ended up constraining my design a bit more than I'd really intended. Namely, I just assumed I'd be sticking with right angles for everything, and, later, when I found myself wanting more complex layouts, I couldn't do it easily. I'm not sure this would have been easily solvable, however. I could have changed it moderately simply, but it would have been Difficult to do the actual graphics design without that constraint, as my character design was limited to text input.

Originally I had plans for how to produce more organic-behaving monsters – still built out of right angles, but with the individual parts given a little more freedom relative to each other. I ended up not implementing this due to a lack of time. I was also running into issues with render speed, which that would have made even worse. I'm not sure what the actual render speed bottleneck was, though I suspect it's heavily based around my continued use of immediate mode OpenGL. Solving this will require me to finish my Lua OpenGL layer first.

Speaking of graphics, I decided to use framebuffer objects to do the bloom effect. It turns out that framebuffer objects are problematical, as many graphics cards don't support them, and I actually reduced my userbase rather unfortunately with them. The "standard solution" appears to be rendering to the screen, then copying that to textures. Unfortunately that is difficult with my current render framework. I'll have to come up with a solution for this in the future, as I'd now like to avoid FBOs.

More graphics issues: I did the complex texture effects entirely with shaders. It turns out that shaders don't antialias well, and I was having horrible aliasing issues. Turning up the back render resolution fixed that issue. An effective 64x antialiasing looked goddamn gorgeous. It also ran like crap on every system I could get my hands on, besides my main computer, so I turned it back to 4x and crossed my fingers that it was an acceptable tradeoff. I'm not convinced it was a great tradeoff. The only alternatives were to completely redesign rendering in terms of multiple textures or to try simulating anti-aliasing inside the shader itself – the latter didn't go well, and the former would have taken a lot of time. I'm not sure what else I could have done better here, but I'll keep it in mind as a stumbling block.

I spent about six hours trying to get perspective working properly, but I kind of expected that.

I also ran into some problems writing the monster AI – I had hacks upon hacks upon hacks, and that, as well, became a significant bottleneck. I've since written some chunks of code to provide a more powerful and general AI layer, which should prevent that from happening in the future.

Despite all the work done on making the Linux version work well, I had one giant critical error that – as near as I can tell – broke it on all NVidia cards. Whoops! Guess I shouldn't have relied on friends and VMWare. That's fixed now though, and the incoming Linux error reports flatly stopped after fixing that bug. This was kind of expected, though, new platforms are always a little flaky until you do a serious test.

The Bottom Line

I know I just spent like 3/4 of this post talking about fuckups, but the fact is that I think the game was pretty successful. I got everything done I wanted to, and the game worked out as well as I'd wanted. I don't have anything major to say about the game design itself.

I'm trying a few new public-relations things, despite it feeling a little bit scummy. I went and posted a bunch of stories on Reddit and got a huge pile of comments and readers, so I feel like that worked out well. I was kind of hazy about whether this moved into "spammer" territory or not, but considering the generally positive feedback, I figure people aren't objecting to the content. Oddly, I simultaneously feel like I'm getting fewer non-Reddit comments on this game than I'd expected, though maybe I've been spoiled by the feedback on Robert Recurring and Nieuwe Aarde. (So if I'd posted RR or NA heavily on Reddit, how much feedback would I have gotten?)

The hits I'm getting for "mandible" are finally overcoming the hits I'm getting for "hard disk double boiling".

In summary: k0r worked out great. I learned a lot from it, and I learned a lot about what I fucked up badly. Time to move on to the next project!

KØR.

2010, May 21st 4:00 PM

I decided to spend a little more time on graphics this time around. Here's the result.

Windows (.zip version available)
Mac OSX (10.5 or higher)
Linux (read notes below)

A few major things to be aware of.

First, this game makes more extensive use of your video card than any I've written before. As such, if you've got old hardware or bad video drivers, you may have trouble running it. Sorry! It should tell you if anything goes wrong. I did fix a bug causing it to crash if you had no audio output, so that might make a few of you happy.

Second, I now support OSX 10.5. At least, I think I do. Let me know if there's problems.

Third, I now support Linux. At least, I think I do. There will be problems. I know for a fact that it does not natively run on any 64-bit Linux distribution. I've heard there's a way to fix this, but I don't know what it is yet (besides "make a 64-bit build" which won't be happening for a while.) The sound layer also seems to be a bit flaky – there is sound, but you might not get any. I may be rewriting the sound layer in the near future. I'm also hoping to add .deb and .rpm packages in the future.

It's been tested successfully on Ubuntu 10.04, Ubuntu 8.04, Kubuntu 10.04, Fedora 12, and Debian 5.0.4. Success, in this context, means "it either ran properly, or complained about a lack of video card capabilities." It's been tested unsuccessfully on Ubuntu 64 10.04. It's also crashed on a friend's system running Debian 6.0 test. Why? Couldn't really say! I'd absolutely love any data points or debugging assistance you can provide.

Obviously, I haven't said much about the game. That's because you should be playing the game and not listening to me ramble about it.

Nieuwe Aarde Postmortem

2010, May 3rd 5:22 PM

So. Nieuwe Aarde, that game I made for Ludum Dare in 48 hours.

This is going to be one of the toughest postmortems I've written.

What Worked

Well, first of all, it's fun. I'm getting a lot of commentary saying that they enjoyed figuring it out and that they think it's an enjoyable game overall. That's cool. I seem to have done a good job with the base game mechanics and the interface, I'm having very few people tell me that they simply couldn't figure it out.

The art, while not spectacular, is servicable and nonconfusing. The game feel is consistent. The tooltips work absolutely great for explaining the concepts.

I also appear to have nailed the difficulty. I've had a few complaints that it's way too easy, and a few complaints that it's way too hard, but the bulk seems to fall into the categories of "it's tough, but I beat it" and "it's tough, and I didn't beat it, but I think I could have if I'd put more time into it."

For doing it within 48 hours, it turned out great. Compare it to my earlier games – I spent a third as much time on this one, and I think it turned out better. My tools are maturing like you wouldn't believe and I'm just getting faster and more skilled at this whole thing.

So, in summary, I made a good game.

What Didn't Work

The problem is that I didn't make the game I wanted to.

The original goal was Desktop Dungeons meets Seafarers of Catan. Desktop Dungeons is a clever small-scale dungeon crawler which is designed so that almost every single move is critically important. Sure, you can get a nice lead, but that lead can be whittled down rapidly by bad luck. Doing "as well as you can" is critical, every step of the way, and each time you click it had better be the right click.

Nieuwe Aarde doesn't succeed in that. You'll spend a large part of the game clicking "Work" over and over, for example. Clicking a few too many times? Totally okay! Building the wrong thing entirely? You can probably recover! There's very little that has to be timed exactly, and the game design itself isn't conducive to the sort of miniature puzzle where you're trying to scrape out the last little possible iota of advantage.

I still think it may be possible, but if I want to do it, I'm going to have to start from basics again.

The Bottom Line

I made a fun game, but I made the wrong game. I'm not really sure whether I want to call this a success or not.

On the other hand, I made a fun game. If this is failure, I wouldn't mind failing more often.