This page is basically a synopsis of my professional career. The published commercial projects I’ve worked on are listed below, along with a brief description of the work I did on them.
Please don’t get the impression that I somehow did everything on these projects alone. I may not be writing about them, but I’ve worked with many wonderful programmers, artists, designers, testers, producers, and business people without whom none of these projects would ever have seen the light of day.
Pop Bugs is a cool little free mobile game, which you should definitely play. Like right now, grab an Android device and go play it! (Sorry Apple fans, iOS is on its way.)
I’m one of two full-time programmers working on Pop Bugs. I wrote our game engine from scratch (so that it’s lean and mean) and I wrote all of the supporting tools we use to build the data our artists create into the finished product. I also did a teensy bit of work with the gameplay and UI, mainly putting in some skeleton code which my colleague turned into all the quirky behaviors of the bugs you’ll find when you launch a level and the logic underlying the interface.
Writing the tools and engine together also created many opportunities for optimization. Our artists have made well over 200 MB of source data, yet that all gets packed alongside the engine into a 30 MB APK file, and it loads quickly. That isn’t something that just happens, as if by magic. Researching and implementing better strategies for packing, storing, and then loading our data has been one of my primary and most rewarding responsibilities. That’s also extended to working together with artists in a few key areas to get more optimal source art, though in general I’ve preferred to make the tools smarter and allow our artists to produce content in whatever format they prefer.
And I really can’t say enough good things about the game itself. Pop Bugs is the only game I’ve worked on where I can spend all day running through levels testing for bugs and then still find myself playing it just for fun on my own time. But why are you listening to me ramble on about it here when you could go get the game yourself?!
Baldur’s Gate: Enhanced Edition
Baldur’s Gate: Enhanced Edition is a really really cool update and re-release of a really really cool game.
One of the more interesting things we wanted to do with BG:EE is support high resolution screens and allow a degree of camera zooming. However, for various technical reasons, we couldn’t just scale up all of the source art and call it a day. So we ended up scaling the final rendered image, using a high quality image scaling algorithm, and I’m responsible for writing the shader at the core of that (you can read about some of the optimizations I made to that shader here).
I’m also responsible for a number of enhancements throughout the game (such as hardware cursor support). And I helped to fix a bunch of bugs.
I’m almost solely responsible for coding the game launcher, which is responsible for downloading and updating the game, for the Beamdog release. (I’m referring to the launcher itself. Others wrote the infrastructure it connects to in order to pull down the data.) This has been a bit of an adventure, as BG:EE is a pretty big release, so a lot of work went into making the technology robust enough to handle the demand.
Sonic Office Smash
This is a fun little mobile toy that turns your phone into a sort of sonic stress ball.
I did a fair bit of the programming on this app, focusing mainly in the audio engine (supporting compressed sound clips to get our download size small) and on cleaning up and extending the UI code to iPad resolution.
We took an old game and made it look a lot better, often without access to the original source data. I worked on tools to convert the data that we had into something our artists could work with and then stitch their new art together with the old.
I also ended up rewriting the audio system as we had lost access to the libraries that the old code was built around. In the process I ended up integrating support for newer, better formats and learning a lot about 3D sound.
MDK2 on WiiWare
This was my first foray onto the Wii. To call it a learning experience would be a tremendous understatement. While this game doesn’t look nearly as good as I intended, I’m still immensely proud of what we achieved on this project given the constraints we were under.
For one thing, we had to shrink the game data down to less than a tenth of its original size. I ended up writing a fairly involved set of build tools to strip unused data out of the game assets and compress what remained. A lot of time and effort went into researching the best techniques to accomplish this. Ultimately, we had to sacrifice a lot of the source art’s quality (particularly the textures and the sound) in order to fit the game to the amount of space we were allowed, and we unfortunately didn’t quite have the time we needed to really tweak the art in order to work around those constraints.
Porting the sound and graphics code and working on the data-loading code was interesting, but I’d have to say I’m most proud of my work on the controls. MDK2 is a game that seems to have been made for the Wii remote, and while this version of the game may not look amazing, it’s really fun to play.
The Beamdog Windows Client
This is another of my favorite projects. The Beamdog client is nothing like a game – it’s a massive GUI on top of a data distribution system. It was also my first significant foray into using WPF and working with a designer (designer meaning “a human who produces designs”, not the visual editor that ships with Visual Studio) to create a UI that’s not just functional but which also looks good.
Whereas games are largely linear in their execution (gather input, simulate physics, simulate AI, update sounds, draw frame, repeat), the Beamdog client is anything but. Dealing with a large number of systems that all run at their own speed (pulling game data, fetching product info from the store, waiting for data to save to or load from disk, etc) while the user is clicking about unpredictably and not having everything in a constant state of crashing is quite the challenge. It’s even more challenging given that most of these processes can fail in many ways without warning (network errors, virus scanners locking cache files on disk, etc), and the app has to detect these errors and retry the operation or fall back to some other method without interrupting the user experience.
This is the first project I programmed solo. The engine, the game code, the tools, and the build system that coordinates the process of making the game were all my doing.
This is also the first project I worked on remotely. That put a big focus on making the tools robust and easy to use so that work could be done on the art and levels without the artists constantly stalling to wait for me to make something happen. The size of the game data also made it take a fairly long time to upload new builds to the device, so I maintained an almost fully featured PC build throughout the course of development so that changes to the art could be seen in seconds rather than minutes.
There were of course other technical challenges, such as fitting a huge amount of uncompressible textures (the iPhone’s compressed texture format ruined the clean lines on the art and couldn’t be used) into the iPhone’s tiny allotment of video memory.
And it’s a really fun game – one I’m very proud to have been a part of. If you have an iPhone or iPod Touch and like rhythm games, go check it out!
Saturday Night Fever: Dance
This was my first iPhone app and my first work on a Mac. It’s also the time I was lead programmer. It was a great learning experience and a significant milestone in my career.
Unfortunately, this app broke some time ago with an iOS update and no longer runs, so you can’t really see it in action.
Space Trader, Space Trader: Merchant Marine, Космический торговец, Space Trader: Moon Madness
Hermitworks Entertainment is, alas, no more, so I don’t have nice product pages to link to.
These games were my first real work in game development. Highlights include developing the animated character pipeline (a technology I supported for several years across multiple platforms and projects) and adding support for Cyrillic text to the engine when we did the Russian port, as well as helping with the initial port to the iPhone.