Advise on More Efficient / Lockstep Multiplayer?

Has anybody attempted to write a Lockstep-based Multiplayer system? I’m hitting some real narks of the way typical UE games are done.

My game is essentially very large maps, with a lot of units, shooting a lot of projectile-based bullets, and I mean a lot. Replicated Movement & Variables just aren’t going to cut it, there’s going to be so much latency with only a few actors in the level that It’s barely worth bothering with. Think Planetside 2 if you need inspiration, just with smaller maps.

I just want the most efficient networking possible, with smooth gameplay for all those playing. The way I understand Lockstep, is that it remains efficient because it bundles all commands of the clients and then sends them out in one go, everybody simulates the same data and the Server then checks and updates the clients in case they go out of sync.

Question is, has anybody done this yet? I understand that it’s quite a big change to the regular Server/Client architecture, but I’m running into so many issues using the regular networking that I think it’s best I adopt this approach early.

Hm, someone on my Skype Group has the same problem doing an RTS game. Because you don’t want to replicate all arrows over the net, but just the command the client gave the units.
And then let the units shoot the arrows on the other clients without synching the real position.

I guess the problem is that the Unreal Engine is just not suited for this. P2P networking is still on the roadmap of UE4 under “wishlist” and since the UE4 network system is far from P2P,
i don’t think it will ever come.

So you would need to step back from UE4 Networking and write your own lockstep network system. Or at least i guess that. I’m far from being good in this, but i just wanted to leave this
answer so that you know that others also struggle with this.

Maybe you can find a solution. If he doesn’t find this thread i will link it to him. Maybe you can talk about that :smiley:

Lockstep isn’t a good idea because if things get out of sync there is no real solution but to eject the client or send a full world state.

Honestly? Just use the server as a relay. Client sends an RPC to the server, server responds with a multicast RPC to everyone. You’ll have some serious hacking/exploit issues to deal with, but it’ll give you what you want in the short term.

I guess what I need is a hybrid. Since the game is a mix of both FPS/dogfighting etc with RTS elements, it’d make sense to make some of the RTS elements work in Lockstep while the FPS element of the game plays like UT or ShooterGame (which is what I’m doing right now).

I just finished a system that does a mix of CSHD and SSHD, the server deals damage whereas the clients only simulate locally. The problem is that as soon as there’s more than ten-twenty actors replicating movement, it’s far too bloody expensive. For projectile-based weapons it’s just unuseable.

UT uses a lot of projectiles but they get around it by only sending the initial replication, and the rest is handled locally. That’s fine until something effects the ordnance on the Client side and it all goes out of sync again. I just feel like there should be a much faster way to simulate this.

Deterministic Lockstep as mention here looks extremely powerful (there are several examples on the page).