Petition to get Soul Calibur V on GGPO

I'll just reduce my argument to my main point: I think it would be more worthwhile to petition Namco into making a better netcode at all, GGPO shouldn't be the only option. Shooters have found a ton of different solutions to latency problems, fighting games shouldn't be limited to just 2 solutions (one of them being nearly useless, the one which most games use right now)

can you, perhaps, briefly explain what was used in SC4 and also VF5, and why/how GGPO could potentially greatly reduce lag from the netcode of SC4 and emulate VF5 online play? i ask because much of what i hear is that VF5 had equal if not superior netcode to GGPO. we all know that SC4 netcode was terrible, but we don't really know why, or what GGPO will do to make it different.

this question is not directed specifically at you, but to anyone who feels they may have answers. i think it is best if we can build the strongest case possible for why this is, without a doubt, something that will benefit SC5. this thread should be a place to not only hype the idea of SC5+GGPO, but to consider the alternatives and make it clear to supporters exactly why they are signing off on this.

to anyone who can answer these difficult questions for me; *pre-emptive high five* you rock.
I can give a quick explanation for the 2 netcodes (I can't go into detail about VF5, as I know nothing about it).

The type of netcode which most fighters use right now has the benefit of being very easy to implement and it should always stay in sync (same netcode which SC4 used). It works in the way that each client (client being each running version of the game) initially is paused and only processes a frame once it has received player input from all players. Once it starts running the game it should run smoothly, but it always processes old player input. The input lag becomes roughly the same as the ping. This should mean 50-100ms if you play against someone who are in the same country(this is playable, but it's still enough input lag to make it too different from local play), or more than 100-200ms if you play against someone who's in another country (this is where it starts to become close to unplayable).

GGPO works in a different way. Instead of waiting for player input, it'll do a form of client side prediction. Once you do any input, it'll process them and show the effect on screen, and the opponent's inputs will be processed as they received. Whenever there's some kind of desync (for instance, you attack the opponent and he gets hits, but on his screen he was able to block in time), then it'll roll back to a previous frame which was in sync, it'll quickly re-process the previous frames with up to date player input and then resume at the current frame with the new proper state of the game. GGPO also adds a small constant amount of input lag to reduce the chance of desync (I think this is 20ms or less).

GGPO has the downside that you'll need to reserve memory for many previous frames for rollbacks (although this should only be a concern for emulated games) and that you need to be able to re-process frames in the timespan of a single frame (otherwise the game might freeze for a split second whenever it rollbacks).

I may have a few details wrong about GGPO, but that's how it works overall. The upsides are pretty obvious: you'll have far far less input lag. It also works as an overall netcode solution, you shouldn't have to add lots of code for special cases. It's also one of the few netcodes which works with emulators (you're extremely limited when it comes to adding netcode to an emulated game).

As a quick history lesson: the former netcode I mention was very common for all games in the 90's, but then most games were played on LAN at which case you were dealing with so low pings it didn't matter. That kind of netcode is pretty much obsolete now. Outside of fighting games and emulated games, you practically never see it.
 
“BLACKSTAR84” said:
Graphical effects at different times aren't produced out of thin air... the use of the (unmodified) GGPO technique is not possible without restructuring (and adding restrictions) the graphics engine used

This is based on a misconception. GGPO applied to emulated games requires rolling back the entire program state – all RAM, audio buffer, video buffer, hard drive data, etc. This is possible on old programs that are extremely lightweight and would of course be completely infeasible for modern resource-intensive games, exactly for the reasons you describe.

But that is NOT what a modern GGPO implementation would use in reality.

If a game is built from the ground up with netcode based on rollback, then only those variables relevant to the player positions / inputs and other basic game state determinators (camera position, whether equipment was broken, whether certain stage effects had been triggered yet, etc.) would need to be recorded. In other words, the same extremely lightweight data that is used in replay modes. If the game has to roll back to a previous frame, it merely updates those variables with their previous values. At that point the rendering engine would proceed to draw the frame based on the game state exactly as it does for every other frame. Absolutely no graphics ever have to be buffered or restored.

See, the thing is, “graphical effects at different times” are entirely produced “out of thin air.” Each frame is drawn according to the world model built from the key game variables in less than a 60th of a second. Change those variables back to previous ones, and you can render a previous graphical frame in the same (negligible) amount of time, because fundamentally you haven’t actually changed anything about how the software normally operates.

Now, this is a slight simplification. Certain processes such as particle effects may not run entirely by storing variables in the RAM, but be instead the result of dedicated hardware on the graphics chip running its own process. While it would not at all be a problem to tell such hardware to “stop and redo” in case of a rollback, there is no guarantee that you could make that hardware restore a previous state like you could for other variables. So there would be a visual hiccup in which the particle effects (just as a hypothetical example) would be restarted, or even just rudely dropped for lack of a better option, and not perfectly match their previous appearance.

That’s just a theoretical exception however. And any rollback will of course require at least a little bit of a visual hiccup anyway. More importantly, provided the rollback code was programmed in from the start, such obvious discontinuities could in most cases be avoided.
 
@gabedamien: You'd be right about most 2D games, but something like Soul Calibur does have many minor graphical effects which would definitely be stored in memory. Like info for all the dynamic clothing, and the various particle effects when blocking/getting hit. There's also some more rare stuff, like some stages has havok physics on debris as a character is thrown into the ground. Those are elements which could be problematic for rollbacks.

I think the clothing would be the most difficult part as it can move wildly around compared to the character. So if they don't store any info about clothing, it would snap to some rigid position before starting to naturally drop down after a rollback. But well, maybe they'd have enough memory to store that info or find another solution.
 
Back
Top