[In this reprinted #altdevblogaday-opinion piece, Uber Entertainment's Forrest Smith follows up his piece on synchronous engines for real-time strategy games like Supreme Commander, answering questions about disconnect and desync recovery.]
This is a follow up to my last post, Synchronous RTS Engines and a Tale of Desyncs which, much to my surprise, was quite popular! It's received numerous user comments in the post itself, on Hacker News, and Reddit. If it generated interesting discussion elsewhere, please let me know as I'd love to see more reader comments.
For Part 2 I have two goals. First, to answer questions that frequently came up in the various comments sections. Second, to share some of the fantastic replies that came from various readers.
Recap
Before all that, let's recap key points from the first post. If you haven't read it yet, I strongly recommend doing so by clicking here. My experience with synchronous engines is from working with the Supreme Commander engine at Gas Powered Games, so that's what I talked about.
- All clients in a Supreme Commander game run fully in sync.
- Multiplayer games are fully peer-to-peer.
- There are two layers, Simulation and User.
- Sim Layer runs at a fixed 10 frames per second.
- Sim Layer includes everything important – physics, ai, movement, etc.
- User Layer runs freely up to 60 frames per second.
- User Layer includes UI, animation, and other strictly visual elements.
- All clients run 100percent identical simulation layers.
- Only input commands are sent over the network.
- The game is fully deterministic to allow each client to update based only on input.
- The name comes from William writing AckAck on the whiteboard because it got the point across.