Article on core network structures for games
My dev blog
Ronimo Games (my game dev company)
Awesomenauts (2D MOBA for Steam/PS4/PS3/360)
Swords & Soldiers (2D RTS for Wii/PS3/Steam/mobile)
Swords & Soldiers 2 (WiiU)
Proun (abstract racing game for PC/iOS/3DS)
Cello Fortress (live performance game controlled by cello)
In fact, well-known deterministic-based games like Starcraft generally use client/server rather than peer-to-peer.
You may also want to break out the two different phases: "Setup / matchmaking" and "actual game."
It's often the case that you need a hosted server of some sort for the matchmaking (and NAT punch-through) part, even if you then let the players run the game servers.
Would deterministic lockstep in combination with client/server not add additional latency? Each client needs to know the inputs of all clients to perform a step, so doing this client/server means sending to the server and then having the server send to the other clients.
By the way, how do games handle determinism in combination with hiding the complete gamestate from cheaters? Do they synch units that come into view and then lockstep those, and only send the commands needed for what each user can actually see?
I was only talking about the gameplay synching here. Matchmaking is indeed a completely different topic, having completely different requirements. I intend to write about matchmaking as well in the future, as we have gone through several implementations on a bunch of different platforms now. :)
My dev blog
Ronimo Games (my game dev company)
Awesomenauts (2D MOBA for Steam/PS4/PS3/360)
Swords & Soldiers (2D RTS for Wii/PS3/Steam/mobile)
Swords & Soldiers 2 (WiiU)
Proun (abstract racing game for PC/iOS/3DS)
Cello Fortress (live performance game controlled by cello)
Would deterministic lockstep in combination with client/server not add additional latency
Yes, Client/Server adds one additional hop of latency compared to peer-to-peer. This is true no matter what the game simulation approach. For most games, it turns out that this additional step is not actually as important as everything else that goes into a networked game, though.
how do games handle determinism in combination with hiding the complete gamestate from cheaters? Do they synch units that come into view and then lockstep those, and only send the commands needed for what each user can actually see?
There are many cases where "partial lockstep" ends up failing. (In fact, I helped build such as system, with client simulate-ahead to hide latency, in the very early 2000's.) Typical games do not only do partial lock-step, but instead use other mechanisms to catch cheaters.