Halo community update reveals the story behind Halo 2's strangest bug

Halo 2: Anniversary
Halo 2: Anniversary (Image credit: Microsoft)

What you need to know

  • Developer 343 Industries has released a new blog post that reveals the story behind Halo 2's teleporting projectile bug on PC.
  • The issue was related to interpolation code, and was caused by a rogue -1 value in the code.
  • The post also contains some cool insight into the process of bringing Halo games to PC, as well as a reminder that Halo 3 flighting is coming soon.

Halo developer 343 Industries has released a new community update blog post that goes into detail about the complicated and nuanced process of porting all of the mainline pre-Xbox One era Halo games to the PC platform. Among the various topics discussed is the infamous teleporting projectiles bug that launched with Halo 2: Anniversary on PC and plagued Halo 2 Classic multiplayer for over a week before finally being patched by a hotfix. This bug would, bizarrely, cause rockets and grenades to teleport from the position they were fired or thrown to into other players across the map, usually resulting in kills and teammate betrayals alike.

As it turns out, the reason this bug occurred was because of an issue with the game's interpolation code (this smoothes out movement of players, vehicles, and projectiles) and a subsequent problem that caused players to have an incorrect user index of -1. This index value ended up wrecking havoc on Halo 2 Classic multiplayer.

Here's the detailed breakdown by the developers:

"The issue was related to interpolation code that was added in fairly late and is only compiled in PC builds, and unintentionally the dedicated server build. Xbox builds do not compile the interpolation code. One change for interpolation was in a function that gets the camera position of a biped. Players control bipeds. At most, there are four local players, or 'users'. This function was tweaked so that it would update and read from the interpolation data for the user controlling that biped. However, it was not handling the case where the user controlling the biped did not exist on that machine. So, the user index for non-local bipeds would be -1, which then caused entirely different memory in the interpolation state to be written to and read from. Well, this is further complicated by the fact that this same code path is used by the function that creates a weapon's projectiles. Because to do that, the game needs to know where the player's camera was aiming. When it comes to the host and remote players, the same code path is still taken but using the predicted weapon fire state of the remote player. Not all weapons are fired in the same predictive manner, which is why some weapons would inflict damage, while other weapons would not.

The fix here was one, not compile the code for the dedicated server, but also two, guard against cases where the user index was -1."

The evil code in question.

Source: 343 Industries This string of code is responsible for all of the chaos, according to 343. (Image credit: Source: 343 Industries)

This issue was complex, but I found reading about it to be quite interesting. It gives some valuable insight into the weird and wacky challenges that developing games can pose, which is something that players don't often get. If you're fascinated by this stuff, I recommend checking out the full blog post, as there are numerous other development topics in it that are discussed at length. The post also reminds players that Halo 3 PC flighting is set to start in the first half of June, so make sure you sign up for the Halo Insider Program if you want to participate.

Halo 2: Anniversary is available on Steam and the Windows 10 Store for $10, while the Master Chief Collection in full can be purchased for $40.

Brendan Lowry

Brendan Lowry is a Windows Central writer and Oakland University graduate with a burning passion for video games, of which he's been an avid fan since childhood. You'll find him doing reviews, editorials, and general coverage on everything Xbox and PC. Follow him on Twitter.