Why do some games, from Halo to Dark Souls, have weird bugs at 60 fps and above? We dig into the programming.
I talked to the developers of Halo: The Master Chief Collection when I visited 343 Industries to see the PC port of Halo: Combat Evolved, which is out today. Engineer Andrew Schnickel has been at 343 Industries for 10 years and gave me some meaty technical explanations of what developers often have to do to change the framerates of older games.
The most basic thing you have to understand is that game code can be written to measure time in fractions of a second or in "game ticks," a more arbitrary measurement set by the developers. In the case of old Halo, and a lot of games, both measurements are used in different parts of the code. This is fine—when you're operating at a fixed framerate, like 30 fps.
"When some code said 'I want this thing to happen over 1/30th of a second' and somebody else said 'I want this to happen over one game tick,' they were equivalent," explained Schnickel. "Now we go up to 60 frames per second, and 1/30th of a second and one game tick, are not the same thing anymore. That broke a number of things: Weapon fire was one area that we found a number of issues; you could see that effects would play too quickly; the mission scripting actually through the campaign, we had a lot of problems with that, a lot of that was tick based rather than time based."
Schnickel said that it's possible to dig through campaign mission scripts line-by-line to try to identify potential issues where the game tick and the fps aren't equivalent, but it's easy to miss things. There are, after all, thousands upon thousands of lines of code. He gave an example for Halo 4, which had issues even being upgraded to 60 fps between the Xbox 360 and Xbox One—there was a sniper jackal on top of a cliff who simply couldn't die, no matter how many times you shot him. A timing issue with the script that controlled him made him immortal. "It takes a lot of careful debugging to find that," he said.
That's the basic problem inherent in doubling a game's framerate from 30 fps to 60 fps: some percentage of the code is suddenly operating at the wrong time scale. But what about uncapping the framerate altogether? For that to work, none of the code can operate on fractions of a second and work the same way on a PC running at, say, 78 fps.
"Where you really do run into problems is the interpolation, and you see that in animations and effects a lot," Schnickel said. "The animations in particular are challenging, because they were just authored for a slower frame rate. If you're familiar with how animation tends to work, you put in key frames, and then you interpolate between those key frames, and the interpolation doesn't always do what you expect it to do."
Schnickel gave an example by moving his arm left-and-right around a can sitting on the table in front of him. Say his movement was a first-person game animation: When it was originally authored for a fixed framerate, the arm's position frame-by-frame would be fixed to ensure it never appeared to pass through the can. But when you interpolate between those hardcoded frames to make up for the higher framerate, all of a sudden you'll have a frame where his arm is unnaturally inside the can. "It's like, 'wait a minute, that looks terrible,'" he said. "We've seen some of that through development, where a weapon will clip through a body or something, and you never saw that at slower rates."
Producer Mike Fahrny pointed out that these kinds of issues can also be hard to test for at the studio, because they're not going to show up on every PC. If you're playing with an uncapped framerate, you'd have to catch a problematic animation at just the wrong moment, at just the wrong framerate, to notice it. "That's the fun part of PC, right, all the different compatibility issues, and all the hardware that you have set up. Some people see this stuff and some people aren't sensitive to it, versus some people that just are."
Some of the interpolated animations in the first beta tested build of Halo: Reach even made some players motion sick. It's wild how a few extra frames of animation can cause that, but somehow it registers to the eye as unnatural and does weird things to your brain. Think of the motion smoothing applied to modern TVs as a similar example of interpolation—some movie directors hate it so much, they've formed an alliance with tech companies to get it turned off.
So the process of unlocking an old game's framerate involves a lot of things: interpolating all the animations to work at different framerates; converting timescales based on fractions of a second and checking for broken scripts; ensuring nothing subjectively looks or feels wrong compared to the original. "Sometimes things won't play exactly the same that they did, but hopefully we minimize that," Schnickel said. "But there's areas where just by necessity we have to do it. Certainly trying to smooth out some of the motion, especially around the camera in some of the first-person animations."