EN

Final Fight: Double Impact – GGPO Netcode

Apr 16, 2010 // Mr2nique

As some of you know, one of the best new things we brought to Final Fight: Double Impact has to be the ability to play online with your buddies (or any complete stranger who is brave enough to lend his hand or sword to your cause). The quality of this netcode was very important for us, for if it worked right, it would be seamless, lag free, and basically…perfect, just like being on the same arcade unit. Anything less than perfection could shatter that arcade experience.

So for FFDI, for the first time, we joined forces with GGPO, one of the ultimate arcade style game netcodes on the planet. It’s creator, an EVO Founder and middleware-master, Tony Cannon, was kind enough to lend us a few words regarding a bit of his experience on the title. Click more for the entire read.

A while back Capcom invited me to their San Mateo Headquarters to check out the networking code in Final Fight: Double Impact.  Final Fight is the first console title from Capcom to use GGPO, and I jumped at the chance to see it in action and provide some tips on how to improve things before the title (shipped).
 

The test setup used a network emulator to introduce latency and packet loss between two consoles.  This was very similar to the setup Backbone had in place to test Super Turbo HD Remix when I went last year.  As part of that testing, I recommend that Capcom add a setting to configure the number of frames to delay inputs by to minimize the effect of rollbacks.  Final Fight: Double Impact has the same setting.
 
We started off playing Final Fight on the Playstation 3 with 0, 120, and 200 milliseconds of introduced latency at the default of 3 frames of input delay.  These correspond roughly to the approximate latencies you’ll feel when playing people in your same neighborhood (~0), the same country (~120), and anywhere in the developed world (~200), respectively.  The game performed like a champ in all 3 scenarios.   Over the years I’ve developed a lot of little tricks to try to detect how the rollback code is compensating for network lag.  These include trying to play my character on my opponent’s screen, the “waggle test” of moving very quickly left to right to try induce prediction errors which affect the game’s screen scrolling algorithms, etc.   I’m happy to report that the game passed all of these tests with flying colors.  During a normal game, you shouldn’t notice any glitching at all using the default settings unless you’re playing someone who’s literally at the opposite side of the planet, and even then the glitches are very minor.
 
The XBox 360 version of Final Fight performed just as well.  At this point I was really happy with what I was seeing, but also feeling a bit irrelevant.  I was expecting to find an engine that needed a little tuning up, but their engine was already running like a well oiled machine!  I wanted to see how far I could push the emulator and the networking code before they fell over and asked the guys to crank the input delay all the way down to 0 frames and increase the latency.  The game still ran like a champ, and kept passing all my tests until we got up to 400 ms of latency with 5% packet loss.  That is way worse than anything you’re going to find on XBox Live or PSN, even if you’re on a shared home network.  400 ms of latency is approximately 9 frames of rollback for every mis-predicted input.  That’s a lot of extra computation, and I was impressed that the Capcom emulator held up that long before giving up the ghost and desyncing.  Major props.
 
Finally, I couldn’t go home without playing some Magic Sword.  The performance here was a little bit different for two reasons.  Magic Sword is quite a bit faster than Final Fight, so you’ll begin noticing the effect of rollbacks sooner.  It turns out that’s ok, though, since he screen scrolling in Magic Sword is almost exclusively to the right or the left depending on the level.  This limits the rollback effects to tiny sprite corrections rather than the whole screen lurching, which is good.  Bottom line: the game still played great at all the reasonable latencies we tried.  The performance of both Magic Sword and Final Fight exceeded my high expectations.
 
I came into Capcom expected to give advice on how to tune things to perform better, but I frankly had nothing to add.  I was super impressed with the jobs they’ve done.  If real world testing performs as well as the tests in the lab, Final Fight: Double Impact will truly be the first online action game on any console playable world-wide.  I’d like to thank Seth, Derek, Christian, Gary, and the crew over at Capcom for having me over to check things out, and everyone else at Capcom who’s helped to make this collaboration a success.   Here’s hoping to more GGPO titles in the future!