December 29, 2006

The Pirate's Plank

Okay, let's talk about the number one issue that has come across on the tech support forums and E-mails for "SiN Episodes: Emergence," the Radek office trap.

Issue: Player trapped after Radek leaves office
Severity: 1
Repro Steps: There are two ways that this could happen with the initial release of the game.
  1. The player is on a very slow machine, and does not watch Radek go through the door. (28 reports)
  2. The player made a massive mess in the crane control room, and Radek has to teleport past some debris. (11 reports)
Cause: If Radek was either unable to cross through the doorway or unable to find a path to his final pathnode, he would teleport from the doorway to his final pathnode, skipping the trigger that he had to pass through to trigger the appearance of Elexis.

We didn't see that behavior at all during testing. Even with less than .1% of our customers at the time experiencing it, we still went through and got it fixed in the first update over Steam.

After that update, we were still getting reports of this behavior. Obviously it shouldn't happen, because the trigger was grown to encompass Radek's final pathnode, so there was absolutely no way that the Elexis trigger brush wouldn't be tripped.

We managed to track down a copy of the warez version of the game, and used that to isolate out the problem. In this case, the same behavior as above was still happening, but the cause was changing because of how the warez morons decided to crack the game.

The last four months of testing on the game were spent using an internal Steam server. The reason that we were testing over Steam was that Source and Steam act differently when shown loose files as opposed to files inside GCF's. When a file is inside a GCF, it is considered an official release. When it's a loose file, it is considered a mod. The warez morons unpacked the files from the GCF's and modified a DLL file. As a result, it triggered the behavior change in the engine.

Here's what happened. "SiN Episodes" loaded up SE1_U4Lab02 and tried to load the pathnode file. The pathnode file was missing some file system metadata, so the engine thought that the pathnode file was out-of-date. The engine loaded the pathnode file, but then created a new "quick" pathnode file. The "quick" pathnode file is there so that map authors can quickly test their maps before building the full pathnode file. Because of how the map was constructed (dynamic bridge, sealed doors, etc.), the "quick" pathnode file had no link between Radek's start point and his end point.

As a result, if someone using the warez version plays the level and does not die, Radek uses the "out-of-date" pathnode file and completes his path, but is still subject to the previously mentioned potential causes. However, if the player exits the game after loading the level or restarts, or dies on the level and reloads, or starts a new game after getting to U4Lab02 once, Radek will never trigger the Elexis portion of the cutscene, and the player will be trapped.

In this case, a bug was introduced by the pirates because it was causing a codepath to be executed with the production data that would never be executed with production data.

On the upside, because of how the savegame files work, we could tell by looking at the savegame whether or not the player was using a legitimate copy of the game. On the downside, the vast majority of the people I spoke with who were asking for support for this issue knew that they were using a pirated version of the game...they just didn't care.

And with that, I weep for the future of the PC games industry. People felt that they were entitled to support, even for a copy of the game that they didn't buy. Once a sense of entitlement falls on a crowd, no amount of education will change their ways.

No comments: