• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

343 Industries explain what can go wrong with unlocked framerates in old game ports.

IbizaPocholo

NeoGAFs Kent Brockman

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."
 

Alx

Member
Yes and having two different time units in the same software should have raised red flags too. Basing everything on ticks would be bad, but not as bad as mixing ticks & time.
 

psorcerer

Banned
It's not any more complicate to use delta time, using frames is ignorance or laziness

Obviously it's more complicated.
If your physics/animations are not calculated at whole frame time you will get a jerky mess. For 30 fps game it means some animations will jump from 30 to 15 fps.
To make sure you won't get there you need either do 60 hz lock for game loop (best decision, but may be too demanding on resources) or lock to render loop.
 

Clear

CliffyB's Cock Holster
One of the first thing they teach in game programming classes is always to use delta time and never use ticks / game loop iteration. Their shitty programming practices bit them in the ass.

Meh. Its entirely understandable when the code was authored specifically for a piece of fixed spec hardware. The job is to make the thing work on the target platform(s) designated within the allotted time. Its hard to care that much about future developments and changes to the run-time environment when the focus is on the present.

Standards and practices change with the times, and the expectation that console games should play faster and better on successor hardware is a pretty new idea. Why engineer-in more easily facilitation of a situation that likely wasn't even considered probable at the time ?

Obvious in today's landscape it makes sense to do it "properly", but back then... not nearly so much.
 

JAMMA

Last warning for console wars
Don’t give frame interpretation BS for films, converting “24FPS“ films always looks unnatural. Converting 30 to 60 FPS or 60 to 120 looks way more naturally fluid and subtle.

Unlock it, patch the bugs. Capcom pulled this crap on PC ports (Okami comes to mind). What do you pay your porting team for, exactly? So there’s thousands of lines of code to fix because of hit detection problems? Wonderful, that’s what you’re paid for, part of being a team forwarding a port to meet today’s technology. 🤷🏻‍♂️
 
Last edited:

Alx

Member
Meh. Its entirely understandable when the code was authored specifically for a piece of fixed spec hardware. The job is to make the thing work on the target platform(s) designated within the allotted time. Its hard to care that much about future developments and changes to the run-time environment when the focus is on the present.

Standards and practices change with the times, and the expectation that console games should play faster and better on successor hardware is a pretty new idea. Why engineer-in more easily facilitation of a situation that likely wasn't even considered probable at the time ?

Obvious in today's landscape it makes sense to do it "properly", but back then... not nearly so much.

That would be true for old generations, but as soon as multithreading and asynchronous tasks were introduced, having a "clean" time management should have been a golden rule. It's not surprising to learn that it wasn't done properly at that time since few game devs were actually good at parallelizing their code, but that's the moment they were supposed to learn to do it right, and we see now the explanation why.
 
Last edited:

StreetsofBeige

Gold Member
If two different things with two different time clicks makes weird results, then why not get all the dev team to do their programming using the same time click?
 

Spukc

always chasing the next thrill
One of the first thing they teach in game programming classes is always to use delta time and never use ticks / game loop iteration. Their shitty programming practices bit them in the ass.
3rmwx8.jpg
 

ThatGamingDude

I am a virgin
I am one so yes. Thankfully most devs know better these days.
I feel what you're saying overall through out the thread, but yeah, standards and BP changes all the time

Halo was published by Microsoft, and was a launch title
It's Microsoft; they probably strong armed Bungie to do it that way for some arbitrary "Try our feature, exploit our hardware," sort of stuff

I'm not in game dev myself (And want to stay COMPLETELY away from that sector in IT), but I'd imagine that the SDK's provided to devs these days is a lot easier to code for, and maybe less restrictive on the tech used
Offering the feature instead of forcing it

Let's talk about Microsoft and moving shit back in forth from only being able to be done in wizards or only done by ps....
 
Was the class made before or after Halo coming out?
The class thing was just an example to put emphasis on how its a building block today that is beaten in early. devs back in the time did it but those who didnt built less maintanable projects for very little gain
 

JLB

Banned
They still do it on Destiny on current gen and CoD MW and MW2 were 60 FPS on 360 and PS3...

Im a fanboy of 60fps+, and I agree that its a decision I dot like. But I dont think having a 30fps target is a bad thing per se. If not, 95% of Sony studios would be blame for the same reason.
 

Bernkastel

Ask me about my fanboy energy!
I feel what you're saying overall through out the thread, but yeah, standards and BP changes all the time

Halo was published by Microsoft, and was a launch title
It's Microsoft; they probably strong armed Bungie to do it that way for some arbitrary "Try our feature, exploit our hardware," sort of stuff

I'm not in game dev myself (And want to stay COMPLETELY away from that sector in IT), but I'd imagine that the SDK's provided to devs these days is a lot easier to code for, and maybe less restrictive on the tech used
Offering the feature instead of forcing it

Let's talk about Microsoft and moving shit back in forth from only being able to be done in wizards or only done by ps....
Leave it to NeoGaf to find a way to blame Microsoft for everything.
 

Varteras

Gold Member
Leave it to NeoGaf to find a way to blame Microsoft for everything.

Microsoft deserves blame for some stuff but yeah, I feel like there is a little too much effort put into trying to burn them to the ground at every turn. Though I'd honestly say there is plenty of that going around to all the big names.
 

pr0cs

Member
Those people who are critical of the timing design, what sort programming were you doing back in pre 2001? Surely you could have helped bungie design a more forward thinking engine back then amirite?
 

RaySoft

Member
Oh god I miss the simple vertical blank's on the good old Amiga:)

VBInt:
movem.l d0/a0,-(sp)
lea $dff000,a0
btst #5,$1f(a0)
beq.s .notVBInt

bsr AwesomeStuff ;Do your awesome stuff here

moveq #$20,d0
move.w d0,$9c(a0)
move.w d0,$9c(a0)
.notVBInt:
movem.l (sp)+,d0/a0
rte
 

LordOfChaos

Member
I'm pretty sure i used to see something like this on Halo CE, before the new remaster, running on PC. With a 60fps cap it looked like enemy animations were actually at 30.
 

RedVIper

Banned
Didn't a bunch of nerds manage to make Demon souls run at 60fps on a fucking emulator?

I'm sure that if they can do it then a team with hundreds of time their funding and probably higher qualified personnel can do it to..
 

Iamborghini

Member
Didn't a bunch of nerds manage to make Demon souls run at 60fps on a fucking emulator?

I'm sure that if they can do it then a team with hundreds of time their funding and probably higher qualified personnel can do it to..

Without any issue? Seems like the devs coded it with uncaped framerates in mind :messenger_ok:
 
One of the first thing they teach in game programming classes is always to use delta time and never use ticks / game loop iteration. Their shitty programming practices bit them in the ass.

on old game consoles you used ticks because often times the hardware of the system did not do you any favor especially in order/out of order operation and how ram/cache stores data. so you use per tick operation to basically give yourself a breathing room to optimize the code.
 

IntentionalPun

Ask me about my wife's perfect butthole
There ctrl and f keys were apparently broken. (ctr-h in visual studio for advanced search across files)
 
Last edited:

ThatGamingDude

I am a virgin
Completely off-topic. It feels like you have a template of low effort bait posts that you post in every Xbox thread.
....
I mean me poking at Microsoft products, when it's the main product I'm certified for, and have to deal with, would I guess be a template to use to poke at Microsoft in threads related to their products

If game engines didn't start to more heavily use DX# on PC I would have a Linux build for sure; more out of compatibility sake for my hobby than preference

If you'd like to discuss "Completely off-topic," related things, instead of making a post in the thread, I would suggest taking it to a DM as to not self admittedly derail the thread.
 

Stuart360

Member
No. Modders have fixed these issues in the OG halo port. They even added 60fps animation.

Just more excuses from some of the industries most incompetent developers.
No they havent, not many of the graphical problems Gearbox did. And modders have been at it for years. One of the modders even said the game would literally have to be remade from scratch to restore some of the Gearbox fuck ups.
 

Yams

Member
No. Modders have fixed these issues in the OG halo port. They even added 60fps animation.

Just more excuses from some of the industries most incompetent developers.

The article does not read like a set of excuses. The developer is just outlining some of the challenges of working with code written 20 years ago.
 

LOLCats

Banned
Rule of thumb, shitty code dont know how to keep time. See it way too much at work.
 
Last edited:
No they havent, not many of the graphical problems Gearbox did. And modders have been at it for years. One of the modders even said the game would literally have to be remade from scratch to restore some of the Gearbox fuck ups.

I have Halo Ce installed with the fixes for water shaders/bump mapping and jackle shields along with the 60fps animations.

Edit: and even the EAX fix for missing sounds.

The article does not read like a set of excuses. The developer is just outlining some of the challenges of working with code written 20 years ago.

No. Theyre making excuses like they always do and put out a woe is me article hoping people will buy it and it seems to always work.
 
Last edited:

Stuart360

Member
I have Halo Ce installed with the fixes for water shaders/bump mapping and jackle shields along with the 60fps animations.
There are still things they couldnt fix, and many of the graphical fixes they did were not even actual fixes, but new techniques they had to develop themselves to give a similar look. They didnt actual fix the orig code, and like i said, one of the modders themselves said the only way to fix it properly would be to remake the game. Something 343 probably dont have the budget or manpower for, especially with Halo Infinite in its final months of development.
 
There are still things they couldnt fix, and many of the graphical fixes they did were not even actual fixes, but new techniques they had to develop themselves to give a similar look. They didnt actual fix the orig code, and like i said, one of the modders themselves said the only way to fix it properly would be to remake the game. Something 343 probably dont have the budget or manpower for, especially with Halo Infinite in its final months of development.

A fix is a fixed even if its not the same code restored. The end result is all that matters.



"Something 343 probably dont have the budget or manpower for"

Excuse you. How much did they spend on marketing alone for Infinite?
 
Top Bottom