Game design, game programming and more

Whose bug is this anyway?!?

At a certain point in every programmer’s career we each find a bug that seems impossible because the code is right, dammit! So it must be the operating system, the tools or the computer that’s causing the problem. Right?!? Today’s story is about some of those bugs I’ve discovered in my career. This bug is […]

Avoiding game crashes related to linked lists

In this post I’m going to talk about linked lists, a seemingly trivial subject that many programmers — even good ones — seem to get terribly wrong! Then I’m going to share techniques (with source code) to make your game engine code simpler, faster, more memory efficient and more reliable. Wow! This post is part […]

Tough times on the road to Starcraft

I’ve been writing about the early development of Warcraft, but a recent blog post I read prompted me to start scribbling furiously, and the result is this three-part, twenty-plus page article about the development of StarCraft, along with my thoughts about writing more reliable game code. I’ll be posting the latter parts over the next […]

Debugging running server applications

So you’ve written an awesome online game that works perfectly in the test environment, but when real users are playing the game server doesn’t work properly. Now what?!? I was reading an article by Mike Perham called Debugging with Thread Dumps and wanted to share a related technique from the development of Guild Wars that […]

Marketing yourself as a programmer

A number of readers asked questions about programming careers, both about getting into game-development as well as staying employed in software engineering. I started writing a comment to JM about age-discrimination but it turned into this blog post about getting a great software engineering job. JM asked: How did you manage to stay in this […]

Scaling Guild Wars for massive concurrency

TL;DR: Server-side game recording is awesome for performing scalability testing, as well as reproducing game bugs and enabling players to replay their game experiences. How to load-test game servers In anticipation of the launch of Guild Wars 2 in August I thought it would be interesting to talk about some of the techniques we used […]

Detect client disconnects using named pipes in C#

TL;DR: Solved – after several failed attempts I discovered how to detect client disconnects when using named pipes in C# — the article below includes relevant code snippets from my CSNamedPipes GitHub project. In my spare time — of which there’s not much since I have four kids — I’ve been helping someone solve a […]

Error handling using forever-loop

One of the biggest hassles in programming is handling error conditions. It’s also one of the most important parts to get right because improperly handled errors lead to security defects and general unhappiness of your users. Error-handling code sucks because it complicates the flow of the code that does real work. Consequently, most programming articles […]

Building Linux virtual machines on Windows

TL;DR: Want to build Linux virtual machines to run on your Windows computer? Check out linux-vm, which contains everything you’ll need. Edit: The original scripts (“build-linux-vm”) no longer work. I’ve rewritten the project and created a new GitHub repository (“linux-vm”) that *does* work, and changed the links in this article to point to the new […]

Choosing a game network library

Since I’ve been developing online games since 1991, many folks have asked me to recommend a 3rd-party network library for their game project. Unfortunately, I can’t! At least I can’t recommend one from personal experience because the projects I’ve worked on — Warcraft, Diablo, Starcraft, battle.net and Guild Wars – were all built on proprietary, […]