Our multiplayer code uses Deterministic Lockstep to synchronize clients, this is a method of synchronizing a game from one computer to another by sending only the user inputs that control that game, rather than networking the state of the objects in the game itself.
It means that all players need to simulate every single tick of the game identically. If any computer does something ever-so-slightly different, a desynchronization (desync) occurs. In that case that player will automatically re-download the map from the server in order to get back in sync. Unfortunately making a fully deterministic game is not easy, so you will notice desyncs, especially at the beginning of a new experimental release.
Reporting Desyncs
When a desync occurs, the game generates a desync report. The report contains the game states of server and desynced client and by looking at the differences, we can try to determine what went wrong. Please post them as a bug report in the bug report forum.
The desync bug report should include:
- The desync report, located in the archive folder in the Application directory (%AppData%/Factorio/archive for Windows). The reports look like this: desync-report-2017-04-28_15-46-04.zip. Upload the relevant one to google-drive or Dropbox and post a public link.
- As much context and details as possible, such as what you and other players were doing as the desync occurred, especially if the desync happens often. Finding a way to reproduce the desync, such as "load this save, wait for friend to connect, rotate this inserter and desync occurs" means we can identify the cause and fix it very quickly.
- You can also try to investigate the cause of a desyc yourself in singleplayer by creating a minimal save, using the /toggle-heavy-mode command and then doing the actions which you believe cause a desync; the game will print a message if a desync occurs. If you can successfully reproduce a desync this way it is extremely helpful and will almost always lead to a successful fix. (example)
- In order for the desync-report to be created, it is necessary that after the desync, the desynced client stays connected to the server until the server information is completely downloaded. This takes significantly longer than the normal map download.
- Mods, if written incorrectly can cause desyncs very easily and it is not feasible for the factorio devs to fix bugged mods, therefore desync bug reports of modded servers are to be created in a separate subforum. Those reports must additionally include all mods not available on the mod portal.