GGPO Version .030 Frameskpping/Rollback issue
Edit (Nov.26.2011): It should be noted that after messing around with my settings- IIRC I just unplugged my router and connected my cable modem directly to my PC’s ethernet port- I lowered my ping number, which improved the frameskipping problem by a noticeable amount. However, the overall point of the below post (that the v.030 of GGPO drops more frames than older versions) remains correct, and it is probably worth documenting somewhere.
Note: The following is written about the current PC client of GGPO, and does not necessarily relate to the versions of the GGPO netcode included in SFIII: 3rd Strike Online Edition, Skullgirls, DBZ: Zenkai Battle Royale, etc.
Note 2: I’m not complaining about a loss- the player in these videos is legitimately better than me at the game. I’m talking about the actual quality of match connections.
The short version: frames get skipped in the current version of GGPO more often, so you can’t always tell what’s going on. See here, where frames of animation are missing- Spider-Man disappears here or “teleports” right before every hit that leads into a combo, and whenever he does a Web Ball while in the air.
YouTube cuts frames anyway, so it may be hard to tell. To download a small video of the game, click here (3.97mb). It may seem much more apparent.
I’ve chatted about this with several people online, but I’ve never seen it documented anywhere. In the newest version of the GGPO client there a greater number of rollbacks and skipped frames (which I think to be the result of small rollbacks). For a somewhat technical explanation of how GGPO works, see Mike Z’s post over at the Skullgirls website. In brief, instead of lagging gameplay and slowing down the time before the players’ inputs register on screen (see: most netplay in fighting games), GGPO lets things go out more quickly, and then synchronizes the sessions of both players, to make sure everything is kosher. This may not be technically correct, but I think it’s probably the shortest way to get the point across.
The problem is, because both sessions are running at full speed, they may not be synchronized the way they should be, and so sometimes GGPO has to make corrections. If Player 1 throws a fireball from across the screen, the data may not have been sent to Player 2 right away. So instead of the game slowing down, or the inputs being delayed, what you’ll have is that Player 1 will see the fireball being thrown, but Player 2 won’t. GGPO will then adjust what Player 2 sees, and immediately import/relay this information and display Player 1’s inputs/game state to him. Under ideal conditions, this is done seamlessly.
Under poor conditions, though, things don’t look quite right. In the above example, Player 2 might see a fireball appear on screen, seemingly instantly; the frames of animation where Player 1 threw it may not have been visible, so all Player 2 will see on his end are the projectile and Player 1’s recovery frames.
This is the type of thing I’m talking about, and to see a long and fairly detailed example, keep on reading.
The top image is captured from input replay and represents the “correct” version of the game, and the lower half represents the match as it was seen by me at the time, and is recorded from my desktop.
I’m going to start with a pretty simple example, which is Wolverine dashing backward, and then dashing forward and attacking.
These two are the same frame, only what I saw (the bottom half) is different from what the game registered. Wolverine is dashing backwards, but that data hasn’t been sent to me just yet, so the next few frames I see are Wolverine walking backwards.
Note that what I see is Wolverine blocking in bottom of the two pictures above, which is substantially different from a backwards dash.
And here is where things actually sync up again. I assume the reason I was seeing Wolverine walk backwards/block is because he was holding backwards after the backwards dash, but the dash input (all 3 punch buttons at the same time) didn’t register.
What’s important to note here is that I can’t see the top halves of these pictures at the time unless they happen to match with the bottom halves; what this means in practical terms, is that what is in the top half of these pictures was invisible to me at the time. What I saw was Wolverine starting to block , and then instantly being in mid air, on falling down from his backwards dash. In this particular example it isn’t a big deal, but that’s not always the case.
Wolverine is now dashing forward. What I’m seeing in the lower half of the picture is him still recovering from his backwards dash.
Still dashing forward… The Wolverine in the top half of the picture that you should pay attention to is the one with the round shadow underneath him, the others are afterimages.
Still dashing forward…
Still dashing forward…
And now they’re synchronized. Again, it is important to note that there are a number of frames that were invisible, and this time it’s worse: from my perspective, Wolverine went from having his back to the corner and moving backward(5a), to coming at me full speed and being very close to me (6a). There is, literally, no way for me to have reacted to him coming at me.
It turns out to be a feint, and Wolverine is dashing backwards- but this is not what I saw happening. Once again, the important Wolverine in top half of the above picture is the one with the shadow beneath
him, this time he’s in mid-air, moving backwards.
So what I see is Wolverine right next to me, but in reality he’s on the other side of the screen. When things synchronize again (not pictured), what I see is things instantly looking like the bottom of frame 3b, to Wolverine at the other end of the screen, moving backwards.
Wolverine has begun attacking, and what you see in the top half of the picture is is standing Short (light kick) animation. Near as I can tell what’s in the bottom half of the picture is the same frame, but I didn’t see the attack. I will see Wolverine continuing to move forward as if he hadn’t hit a button.
Still moving forward… I’m already being touched at this point, but I don’t see it.
Still moving forward…
And now I’m blocking something.
This doesn’t seem to be related to connection speed, as my connection speed is actually better than it was a few months ago, while using the previous version of GGPO. More importantly for gaming purposes, my ping and jitter are pretty good:
Also worth noting that this seems to be a bigger issue in some games than others- Marvel vs Capcom 1 usually doesn’t have too much of a problem, but Street Fighter Alpha 3 was noticeably different after the current version of GGPO was released.
The version of Wolverine in the above images is sped up with the Berserker Rage super move, so the frames dropped are somewhat more exaggerated because of how quickly he moves. However, I’ve seen big differences from one frame to the next in other situations/games as well- see Spider-Man video above.
For videos of some of the above, see below:
+ Video of match replay (all frames visible) – HQ version (1.73mb) – YouTube version
+ Video of live match footage as I saw it while playing (frames skipped) – HQ version (2.4mb) – YouTube version