Playing a modded space-age multiplayer modpack and ran into an issue where the server will desync me anytime my character controller is transferred to a character controller specifically
Examples
Enter map -> Safe
Exiting map -> Desync
Setting Controller to remote, god, or spectator -> Safe
Setting Controller to character with /c game.player.set_controller(type = defines.controllers.character, character = game.player.selected}) -> Desync
Saving a local copy of the map and self hosting a server is unable to trigger the desync for deeper investigations. /toggle-heavy-mode does return a failed check however, I am unable to find resources on how to properly parse either the desync report or the heavy-mode dumps. I have attached the desync report and there is a link at the bottom for the failed heavy-mode dump files.
running /c game.force_crc() when connected to the desyncing server will not return any failed CRC checks
One possible cause I am suspecting is that the latency is too great for the game to handle. There are several failed heartbeat messages in the log file before the desync occurs. The latency is fairly high at ~180ms (Central US -> UK) however it has not been an issue before even when it was spiking pass 600+ms of latency so I am very hesitant to say that it is the issue.
heartbeat sequence number (4351407) outside latency window [4351433, 4352633)
Unzipping all the mod files and grepping through them for "on_player_controller" events shows there are 3-5 possible suspect mods
VehicleSnap (Never been an issue before)
ToolbarsMod (Highly suspected, Does advanced inventory code to merge all the different locations together (Logistics, Trash, Personal, etc) for displaying the total count of available items
Maraxsis (Not suspected atm. Used for swimming and diving controls)
Rabbasca (Potentially suspected for bunnyhop feature)
Subsurfaces (Slight Suspect for conditional space-exploration interface)
I dont have any diff tools that will accept either the line length, or the total size of the heavy mode output files to identify the root cause of the desync
Any information or guidance on how to either replicate locally, parse the desync reports, or provide further explanation for what might be happening is deeply appreciated.
https://drive.google.com/drive/folders/ ... ZO-bE1TQwo
[Resolved] [2.0.72] Desync on_player_controller_changed when type = controller.character
[Resolved] [2.0.72] Desync on_player_controller_changed when type = controller.character
- Attachments
-
- server.zip
- Local Save of the server where desync can be triggered consistently by toggling the map button when connected to the server
- (25.52 MiB) Downloaded 7 times
-
- mod-settings.dat.txt
- Mod Settings File (remove .txt)
- (41.94 KiB) Downloaded 6 times
-
- mod-list.json
- Mod List
- (14 KiB) Downloaded 6 times
-
- desync-report-2025-12-24_09-55-47.zip
- Desync Report
- (141.2 MiB) Downloaded 6 times
Last edited by dje4321 on Wed Dec 24, 2025 5:52 pm, edited 1 time in total.
Re: [2.0.72] Desync on_player_controller_changed when type = controller.character
We typically use beyond compare for desync file comparison.
If you want to get ahold of me I'm almost always on Discord.
Re: [2.0.72] Desync on_player_controller_changed when type = controller.character
I looked into this and there are 2 mods at fault:
1. Linox is storing data outside of the storage variable and so every time it's loaded it's re-running it's "init" logic. This is the cause of toggle-heavy-mode instantly failing when you try to test locally.
2. Maraxsis is storing data outside of the storage variable and so every time save/load happens it's reset to the default state (the modifiers for the light radius and swim speed.) This is the cause of the runtime desync when switching to/from remote view. The mod uses the modifiers to determine if it should or shouldn't show the light and the modifiers are changed as a result of not being properly stored in the storage variable and so not being saved/loaded.
1. Linox is storing data outside of the storage variable and so every time it's loaded it's re-running it's "init" logic. This is the cause of toggle-heavy-mode instantly failing when you try to test locally.
2. Maraxsis is storing data outside of the storage variable and so every time save/load happens it's reset to the default state (the modifiers for the light radius and swim speed.) This is the cause of the runtime desync when switching to/from remote view. The mod uses the modifiers to determine if it should or shouldn't show the light and the modifiers are changed as a result of not being properly stored in the storage variable and so not being saved/loaded.
If you want to get ahold of me I'm almost always on Discord.
Re: [2.0.72] Desync on_player_controller_changed when type = controller.character
Thank you for the support and help
I will continue to debug this further and provide bug reports to the mod authors in question.
I will continue to debug this further and provide bug reports to the mod authors in question.

