In my previous article about Warcraft I talked about the beginnings of a series that would come to define Blizzard Entertainment and lead it to being one of the best-known and most-loved game companies in the world. But how did Warcraft go from an idea to a full-fledged game? Let me tell you, it was […]
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 […]
The making of Warcraft part 1
Back before the dawn of time, which is to say when PC games were written for the DOS operating system, I got to work on a game called Warcraft. I get to lead a project! While I had developed several PC games, a couple of Mac games, and seven console titles for the Super Nintendo […]
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 […]
Reducing perceived latency
Before Instagram was a billion dollar company, Mike Krieger posted a presentation called Secrets to Lightning Fast Mobile Design about how his team made the Instagram photo-sharing application feel so responsive, which is one of the key reasons their company has garnered so many users so quickly. This slide caught my attention because the same […]
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, […]