Running GetWorld()->Tick() multiple times per frame to facilitate rollbacks for netplay

So to get my head around it, you’re using GGPO as a way of resolving two different clients having paradoxical states, as opposed to just letting the server win every conflicting decision. Taking Street Fighter as the example again, context is everything and GGPO would give you a way to apply logic to the decision-making when deciding which move won. Surely you could parse that down to just what’s necessary, like you said above: position, velocity and I guess attack.

So could you add this behaviour as a custom message on top of the UE4 networking? The other side to that coin is you’d need to modify the pawn state yourself and fire off the right hit events. Then let UE handle everything else such as catchup blending.

I’d be interested in how they can remove the delay from resolving an outcome of two clients interacting. My impression from SF has always been that it did need some idle buffering frames in each animation to avoid obvious corrections, but they didn’t have the benefit of skeletal blending. In fact, thinking about it from frames-of-animation the way SF does seems to be the clearest way of visualising it, except like someone above said, you’re applying the logic to hitboxes and the pawn state; the animation is pretty much OK to lag behind and allow UE to blend it towards a constantly moving target.