Halo Networking: An Interview with Chris Butcher

A New Network for Halo 2

Chris Butcher continues:

"So the thing about that is, because the client sends the server their actions and the server sends them back to the client you have to have a round trip between the client and the server. That works fine in the local area networks. The latency is probably two or three milliseconds between boxes. You know, if you use the XB Connect Software where you can have a PC that tunnels traffic from your Xbox over the Internet, you can actually make it work between people over the Internet. But our experience is that because you're a client, you have to wait for the round trip from your server for your action to do anything. All of your movement or your shooting lags by some amount. What we want to avoid with 'Halo 2' is designing a network model that is really susceptible to that.

So moving to 'Halo 2'... rather than sending your actions from machine to machine, what we have to do is we still have a client and server, but rather than the client waiting for the server to tell it exactly what should happen with a turn, the client is predicting the entire world. It is simulating the world exactly as it thinks things should happen, so that will be perfectly in sync with the server. The things the client doesn't know about are other sources of input, like the other players in the game.

So when you take that model you can predict yourself perfectly, so you can run and jump and get in elevators and all those things you can predict what the player on the client box is doing fine. Where the differences come in is when your interacting with other people in the world. The client predicts that the other player is moving left because the last information from the server said that, but if they moved right at this time, there could be a slight difference.

So these are the kind of artifacts of the network model. It's that when you interact with a collective source of input from some other machine, you'll see strangeness that doesn't match what your predicted world was on your machine. So the way that we go about doing that is we still need a client server/model but the client sends the server not only information about these are the button pushes that I am doing, but it's at one higher level, it's information about where I am in the world and what I am doing at that moment. So rather than saying that I adjust my joy stick force 23 degrees, it would just say I am in the Warthog, I am here and I am driving in this direction.

You also send a stream of events to the server saying this is what I think is happening in my world. Like I think I am throwing a grenade, I think I sniped that guy, I think I hit him in the head. Then what happens is the server processes these streams from every machine -- it's all their versions of events. And what's happening is the server is also running it's simulation itself. The difference is, it's not predicted; it is the authority. It is responsible for all of the stuff that happens in the game."