Of these tools the desync differ is probably the most interesting one. You can install it (and all the other tools) with the following command on Windows:
> py -m pip install --user --upgrade hornwitser.factorio_tools
Then run it against a desync report with:
> py -m hornwitser.factorio_tools desync path\to\desync-report.zip
This gives an output similar to the sample output below. Which should aid in finding out the cause of the desync, though it might take a long time, and it might output a lot of junk. The pos=number indicates the byte offset in file and ref/des is shorthand for reference-level/desynced-level.
Code: Select all
level-heuristic differs
-----------------------
replace ref[8:9] -> des[8:9]
<player name=arty714> pos=0
<output-console> pos=70
<output-console-item> pos=90
<localised-string> pos=111
<localised-string> pos=133
ref: b'\x02l...nces/game1/temp/currently-playing/expcore/Mini_games.lua:584: A game is already running, please use /stop\x00'
<player name=arty714> pos=0
<output-console> pos=70
<output-console-item> pos=90
<localised-string> pos=111
<localised-string> pos=133
des: b'\x02l...ances/base/temp/currently-playing/expcore/Mini_games.lua:584: A game is already running, please use /stop\x00'
script.dat differs
------------------
parsing desynced-level/script.dat
parsing mp-save-7/script.dat
Path: ['data', 'level', 'dump', 'data', 'tokens', 'value', 7.0, 'value', 'participants', 'value', 1.0, 'value', 'playertarget', 'value']
Reference value: 3.0
Desynced value: 1.0
Path: ['data', 'level', 'dump', 'data', 'tokens', 'value', 7.0, 'value', 'participants', 'value', 2.0, 'value', 'playertarget', 'value']
Reference value: 4.0
Desynced value: 2.0
Path: ['data', 'level', 'dump', 'data', 'tokens', 'value', 10.0, 'value', 'chests', 'value', 1.0, 'value', 1.0, 'value', 'entitytarget', 'value']
Reference value: 1.0
Desynced value: 3.0
Path: ['data', 'level', 'dump', 'data', 'tokens', 'value', 10.0, 'value', 'chests', 'value', 2.0, 'value', 1.0, 'value', 'entitytarget', 'value']
Reference value: 2.0
Desynced value: 4.0
level_with_tags.dat differs
---------------------------
replace ref[13:14] -> des[13:14]
<players> pos=114105240
<output-console> pos=114105295
<output-console-item> pos=114105315
<localised-string> pos=114105338
<localised-string> pos=114105360
ref: b'\x02l...nces/game1/temp/currently-playing/expcore/Mini_games.lua:584: A game is already running, please use /stop\x00'
<players> pos=114105240
<output-console> pos=114105295
<output-console-item> pos=114105315
<localised-string> pos=114105338
<localised-string> pos=114105360
des: b'\x02l...ances/base/temp/currently-playing/expcore/Mini_games.lua:584: A game is already running, please use /stop\x00'