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.
When a desync occurs, the game generates a desync report. This report contains the game state from the server and the 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: You will find it in the archive folder in the Application directory (%AppData%/Factorio/archive for Windows). There you will find files that look like this: desync-report-2017-04-28_15-46-04.zip. Take the relevant one and upload to a 3rd party hosting service like google-drive, Dropbox, WeTransfer and share the 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 the complete .ziped mods folder.