Halo Reach Co-op and Firefight Lag Explained

People ask me about this issue all the time, so I thought I’d post this. Hopefully some of you will find it helpful.

To be clear, I am not a networking engineer. Everything in this post is based on information provided by Bungie on their website.

Issue: Lag during co-op campaign and firefight.

Halo Reach uses 2 different network models for online play. Co-op and firefight run on a “syncronis” network model. Let’s say you are playing 4-player co-op. One player is the “host”, the other 3 are “clients”. All 4 players load the level, and all 4 players start the mission at the same time. Now, when a “client” presses a button, such as ‘jump’, their xbox sends a signal to the “host” xbox, telling it what the client player is doing. The host box receives these signals from all 3 clients, then calculates every movement, bullet fired, damage done, etc, and sends the updated information out to all the clients, who’s xboxs then reproduce the changes. But, the host will only send out these updates when it has received signals from all 3 clients. It does this to maintain accurate and consistent information across all 4 players (In other words, all 4 players are seeing the same things in the same places at the same time).

This is where the lag comes in: If just one of the players in the game has a bad connection, it slows down their ability to send information to the host, which means the host has to wait longer before it can send out gameplay updates to the other players. So, even if you are a client with a great connection, and the host has a great connection, you can still get major lag if one of the other clients has a slow connection.

This is experienced as a sort of input delay (the game will not instantly react to your button presses).

But the game plays fine in standard multiplayer?
The reason this does not happen in standard multiplayer is that Bungie uses a different network model for standard multiplayer. When playing “Team Slayer” or any other standard multiplayer mode, the host doesn’t wait for a lagging player before it updates the gameplay and sends info to all other clients. So, if I have a slow connection, and I join a multiplayer match, I won’t directly effect the performance of the other players (unless the laggy player is the Host). A player with a good connection might have a hard time shooting a laggy player, because the host won’t have accurate information of where exactly the laggy player is, but they won’t suffer input delay themselves. This creates a less accurate game for all players (since a laggy player will think they are in one spot, while the other players will see them in a different spot) but it keeps things running smoother than the co-op model.

Why not use the standard multiplayer network code for co-op/firefight?

Both co-op campaign and firefight have lots of AI scripting going on. This makes it very important that all players in a co-op or firefight game are 100% in-sync with with each other. If the host didn’t wait for updates from all players before moving the game forward, then you would have constant crashes.

For example: lets say I’m playing firefight. I’m a client, and I have a very laggy connection. I’m shooting at a grunt. On my screen, I see that I’ve shot the grunt in the head. But, because my connection is so slow, the host doesn’t yet know that I’ve hit the grunt in the head. This means that the host box thinks that Grunt is still alive, and is still running it’s AI routine. Suddenly you have a situation where my xbox and the host xbox have 2 different versions of the match being processed (1 version where the grunt is alive, and 1 version where the grunt is dead). This situation = CRASH.

So, to avoid this, the Host will not move the game forward until it receives update signals from all other players. Again, if just 1 of those players has a bad connection, the entire games slows down.

How do I avoid playing with people who have slow connections?
There is no 100% guaranteed way to avoid being matched with a laggy player, but going into the matchmaking network preferences and selecting “Good Connection” is your best bet.

Hope this helps answer some questions!

Nicely put. A lot of info crammed into a small package as to not confuse too much.

If I may add, co-op code makes it so that what 1 player sees, all players see as exactly as it is happening.

MP on the other hand is like playing on a finely tuned simulation of calculated possibilities.
When it’s LAN, the simulation on everyone’s screen is nearly 99.9999% accurate. You could say “what you see is what you get.”
When it’s over XBL, the simulation on everyone’s screen’s accuracy to each other is determined by the connections and is usually about 85-90% accurate to what should be happening. You could say “Meh, it’s the best we can do at this time to make it like LAN.”

Ever noticed in some montages of “killer gameplay” that the dying opponent seems to be doing something completely idiotic to the situation at hand? Quite a lot of times that can be attributed to latency causing the dying player to react to a slightly different chain of visual events from what the winning player saw.

I do feel it’s important to understand the limitations we face because it is the limitations of our hardware that causes a lot of compromises that players ask “why isn’t it so simple?”. Come-on Xbox-Delta.

Yes, good info. Most people don’t know this.

Great CL, thanks for posting this. I’ve been playing a lot of campaign this week, and this clears things up a bit.

<4

> Nicely put. A lot of info crammed into a small package as to not confuse too much.
>
> If I may add, co-op code makes it so that what 1 player sees, all players see as exactly as it is happening.
>
> MP on the other hand is like playing on a finely tuned simulation of calculated possibilities.
> When it’s LAN, the simulation on everyone’s screen is nearly 99.9999% accurate. You could say “what you see is what you get.”
> When it’s over XBL, the simulation on everyone’s screen’s accuracy to each other is determined by the connections and is usually about 85-90% accurate to what should be happening. You could say “Meh, it’s the best we can do at this time to make it like LAN.”
>
> Ever noticed in some montages of “killer gameplay” that the dying opponent seems to be doing something completely idiotic to the situation at hand? Quite a lot of times that can be attributed to latency causing the dying player to react to a slightly different chain of visual events from what the winning player saw.
>
> I do feel it’s important to understand the limitations we face because it is the limitations of our hardware that causes a lot of compromises that players ask “why isn’t it so simple?”. Come-on Xbox-Delta.

All excellent points.

yup, good info indeed!

> yup, good info indeed!

Thanks!

Its the dang p2p!

<4 <343

> Its the dang p2p!
>
> <4 <343

Well, as far as I know, a dedicated server would still need to wait for updates from the clients in order to avoid out-of-synch crashes. For example, games like Section 8 Prejudice have co-op modes that run on dedicated servers, and there are input-delay problems there too. It doesn’t matter if the host is a player or a dedicated server, a “synchronis” network model can cause slow gameplay if just one of the clients has a bad connection.