Archive for December, 2007

2008

Everyone else is doing it, so why not… Here is a post full of stuff definitely going to happen in 2008. If it doesn’t, you’ll forget I ever wrote this. If any of these things actually do, I’ll be sure to link back here so I can look like a genius.

  1. Pirates is finally going to launch. Our pre-order head start begins next week, so as prophetic declarations go, this one is something of a no-brainer. I think we’ll do pretty well, but I’m far to close to the game to be objective. :)
  2. Warhammer Online is going to launch late in the year. Yeah, they’re saying spring but they’re going to slip again. It will be the second “traditional” MMO to crack one million subscribers between the US and Europe, but isn’t going to approach WoW numbers.
  3. Age of Conan is going to ship too. Unfortunately they are going to launch before they’re ready and are going to have a rough first couple of months and disappointing numbers.
  4. NCsoft Austin is going to downsize in a major way. They will have significant layoffs and cancel a bunch of projects. Hopefully none of the folks I know who depend on NCsoft to pay the rent will be affected.
  5. Game journalism will suck in 2008. Mark my words.
  6. Microsoft will announce some sort of marketplace where games developed in XNA Studio can be played without requiring the $100/year Creator Club membership. If they’re smart the game-makers will even be able to charge for their creations. Unfortunately they won’t be able to let go of the “we must have the final say on what games get made” neurosis that platform-holders seem to all have and will strangle their own marketplace to death.
  7. Bioware Austin will finally tell us what they’re working on. My money is on Dog Online– a game where you can only communicate with other players via your sense of smell. Red 5, NC Orange County, Space-Time, King’s Isle, that thing Scott and Sean are on at NC Austin, and 38 Studios will also announce what they’re working on, but the Bioware announcement will generate more buzz than all the rest of them combined.
  8. Somebody is going to put out a game on a social network (via Facebook Platform or Open Social) that makes eleventy billion dollars. they’ll do it by actually taking advantage of the social network’s strengths instead of just using it as a user-acquisition strategy. Lots of talks at GDC and AGDC will bring up this game as the Hot New Thing. Many companies will ignore what’s actually good about the successful game and simply try to use Facebook as part of their user-acquisition strategy. (2009 prediction: Backlash against games on social networks, and maybe against social networks in general.)
  9. Metaplace will launch around mid-year and will start to pick up a little steam by the end of the year. It will take a while to reach critical mass, though, so the Metaplace story will be a lot more interesting in 2009.
  10. 2008 is the year that World of Warcraft’s subscriber base will peak. Some people are saying they’ll hit 10M first, which seems likely. It’s all downhill (slowing) from there.
  11. The failure of the “let’s get a bunch of VC and make a couple MMOs at once with our brand new studio” approach will continue. Perpetual was the big 2007 demonstration, but at least one more will happen in 2008.
  12. Valve will begin work on an MMO using the half-life IP. They won’t tell anyone about it in 2008, of course, but when it finally ships in 2013 it will be awesome.
  13. There will be no significant new products in the AI, Nanotech, or Flying Car industries in 2008.

And speaking of 2008, whatever happened to 2000s two through seven? Have I been living in a cave the past 5 years, or is this just how it feels to get older?

Lag sucks

One thing I’ve gained through the beta process for Pirates is a healthy contempt for the word “lag”. This word is used in many different ways that have basically nothing to do with each other, and every time I hear it I have to ask, “What do you mean?” Even people who know better often end up using it because they’re repeating what players are saying about their trouble.The problem is that lag is used to describe at least three totally different things:

  1. Latency – Most often this is demonstrated to the player by noticeable command lag (I click Fire and it takes 2 seconds to happen) or rubber banding (I run around a corner and it pops me back where I was a few seconds earlier.) The cause of this latency could be in the server, the network around the servers, the internet, the player’s local network, or even in the client. It just means data either isn’t moving quickly enough, or isn’t be processed in a timely manner.
  2. Poor Client Frame Rate – Regular old crappy client performance. This happens when we’re trying to draw too much for the hardware the client is running on to handle. It could also be caused by doing too many other things on the client CPU and slowing the frame rate down. Frame rate problems are very common on low-end hardware.
  3. Hitching - Inconsistent client frame rate, usually including occasional frames that are half a second or more in length. This is caused by processing something slow in the same thread that’s responsible for drawing. In my experience that is usually loading a file. Sometimes this is made worse by the hardware the client is running on, but usually if there’s a hitch on one machine it’s probably there on another to some extent.  As an added bonus, every time you hitch your camera may also go all wonky.

All that these three things have in common is that they are all Serious Problems We Should Fix Before Launch. They differ in the way you diagnose them, by which programmers are likely to work on the problem, and by what kind of information you need to gather from the players who are experiencing the problem. Until you know what kind of lag you’re dealing with, you’re really working blind.

Lag as Latency is the most painful of the three to deal with.  Chances are you never see these problems on your office network, so they mostly turn up “in the wild.”  The problem is that the wild is really wild.  Because a player’s network hardware can contribute so significantly to network latency, you often end up asking for intimate details about the player’s network topology: traceroutes from them to your  data center, make and model of all of their network equipment, packet traces, and maybe even who their ISP is.  On multiple occasions we’ve even had to procure network equipment that matched what the users had to try to reproduce the problem.

The biggest network latency problems we’ve had on Pirates all had to do with a combination of Network Address Translation (NAT) and game data sent over UDP.  Just about everyone runs NAT these days, so these problems could hit anyone. While NAT does a great job of holding its automatic port forwarding open for TCP connections, there is no connection for UDP.  Every hardware vendor seems to have its own idea of how to set up that forwarding, how long to keep it open, and what traffic to demand from the application to extend that time. The specifics really deserve a post all their own, but we’ve seen network code that works fine on one NAT device not work at all on most of them.  We’ve seen code that keeps the port forwarding alive indefinitely on 80% of hardware stop reliably after 10 minutes on the remaining 20%.  About a year after we fixed that we found another piece of hardware that was fortunately relative uncommon stop forwarding UDP packets after just a few minutes. This is a problem that just seems to never end, and I fully expect we will still be sorting out network trouble on some new piece of NAT hardware five years after launch.

Slow frame rates are on the opposite end of the spectrum.  Standard performance tools (like profilers) and tools provided by graphics hardware vendors (like NVPerfHud) do a great job on this kind of problem. Finding the cause of a poor frame rate is relatively easy as a result, and all you typically need from the player is a description of where they were and what they were looking at. A screen shot can often do the trick.

Actually fixing a slow frame rate can be a much bigger deal.  If you have to get the art team involved you are going to waste tens or hundreds of hours of somebody’s time redoing artwork.  Fortunately you can see most of these problems coming long before you’ve built all the assets. That’s why it’s so important to be testing on your min spec the whole way through development.

Hitching is a bit more difficult to track down than a steady state frame rate problem.  There is usually some event that causes it, like a new character coming on screen, or a new part of the environment loading.  We’ve also seen hitching from server updates of health information, Lua garbage collection, and external applications that had nothing to do with our game. The profiler does a poor job of collecting information over a time span as short as half a second, so it’s typically useless at finding hitches.  Call graph analysis can help sometimes, but it tends to suffer from a long sample period too.  Your best bet is to log all events that are going on in the game and try to correlate the hitching with a small number of events.  Then you can instrument the code around those events and find the culprit. It’s a little more difficult to figure out hitches that only happen in the wild, but often if they’re happening to one player they’re happening to all players, so running against (semi-)public test servers can demonstrate the problem.

Once you figure out what’s causing the hitch, fixing it is generally not that hard. If you can intentionally cause that event to happen hundreds of times a second while you run the profiler you’ll find out where the slow code is.  You may need to time-slice an algorithm, move some work to a background thread, or speed up the work itself.  After a couple of years of tracking every hitch down to the Lua garbage collector we eventually tossed Lua out on its ear and fixed that problem.

    And yet all of these problems with all of their myriad sources, diagnostics, and solutions are all just lag to the player. Almost every time you hear a report of lag you are going to ask the following diagnostic questions:

    • What does the in-game frame rate counter show when you see this?
    • What is your ping time when this happens?
    • Does the whole screen freeze? (In our case I usually ask if the ships are still rocking or if the ocean is still moving.  These are really obvious hitch indicators in Pirates.)
    • Is your character popping around?

    The answers to these questions will help you pin down which lag your player has. I’ve also found that there’s a good chance one of your players will be fairly technically savvy and can help you track it down further.  In one case we had a player rearrange his network and hook up a laptop above his router in the network.  With his packet traces from above and below the router we were able to see exactly what was happening and fix the problem.  His name is forever immortalized next to the code fix (and we send him a nice thank you gift.)

    That’s why lag sucks.  It confuses users, customer service, and programmers alike. It’s a pain to diagnose, and often a pain to fix. And you can never really fix it because no matter what you do someone is always going to report that they are still having lag.

    Open Open Beta

    Fileplanet has dropped the subscription requirement on our open beta so Pirates is now open to all. Hopefully we’ll break all our concurrency records again this weekend.  It’s not as good for the marketing-event side of open beta when the servers get overloaded, but it’s very good for the make-launch-stable side of things. :)

    Sorry this has kind of been All PotBS News All The Time of late. We’re working crazy hours to get everything ready for launch and I haven’t had time to breath, let alone blog.  Turns out that launching an MMO is hard.

    We’ve gone gold!

    The DVDs with the bits for the Pirates boxes are off to the printers. Woot!

    Of course with the open beta in full swing and the pre-order head start just 24 days away I don’t have time to post much more than that. :)

    Pirates NDA drops

    We just dropped our NDA with the start of open beta today. Hopefully a billion forums will be abuzz with talk of Pirates today. :)

    This is a pretty big deal around Flying Lab. We’ve been working on the game for more than five years and have been in closed beta for two. Now we’re entering the final stretch before the pre-order head start on January 7th.  (The game “launches” on January 22, but paying customers will gain access on the 7th and get to keep their characters, so that’s our real launch date by every measure that matters.)  It will be nice to have people who have actually played the game get a chance to talk about it.