Halo's developers explain what can go wrong with unlocked framerates in old game ports
Why do some games, from Halo to Dark Souls, have weird bugs at 60 fps and above? We dig into the programming.
Raw mouse input, 144+ fps, and an FOV slider—there are a lot of things that go into a quality PC port, but for shooters, at least, those three vitals top the list. For years, notoriously bad PC ports have locked the framerate to 30 fps or introduced issues with an increase to 60 fps. In Sega's shooter Vanquish, for example, you took more damage at higher framerates. PC gamers are used to these kinds of weird bugs, especially with console ports of old games. But understanding why they happen is trickier. What is it in a game's programming that causes issues like that?
I talked to the developers of Halo: The Master Chief Collection about this very thing when I visited 343 Industries. 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."
The biggest gaming news, reviews and hardware deals
Keep up to date with the most important stories and the best deals, as picked by the PC Gamer team.
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."
Once you read Schnickel's breakdown, bugs like Vanquish's or the faster weapon degradation in Dark Souls 2 make a lot more sense. Game ticks were passing more quickly than the programmer had intended, increasing the effect of a particular system. When those kinds of issues are subtle rather than game-breaking, they're hard to spot.
Wes has been covering games and hardware for more than 10 years, first at tech sites like The Wirecutter and Tested before joining the PC Gamer team in 2014. Wes plays a little bit of everything, but he'll always jump at the chance to cover emulation and Japanese games.
When he's not obsessively optimizing and re-optimizing a tangle of conveyor belts in Satisfactory (it's really becoming a problem), he's probably playing a 20-year-old Final Fantasy or some opaque ASCII roguelike. With a focus on writing and editing features, he seeks out personal stories and in-depth histories from the corners of PC gaming and its niche communities. 50% pizza by volume (deep dish, to be specific).