[Resolved] [2.0.72] Desync on_player_controller_changed when type = controller.character

Desyncs in modded game will be ignored most of the time, until it is clearly proven that the desync is not caused by scripting.
dje4321
Burner Inserter
Burner Inserter
Posts: 6
Joined: Sun Dec 07, 2025 7:58 am
Contact:

[Resolved] [2.0.72] Desync on_player_controller_changed when type = controller.character

Post by dje4321 »

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
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.
Rseding91
Factorio Staff
Factorio Staff
Posts: 16414
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: [2.0.72] Desync on_player_controller_changed when type = controller.character

Post by Rseding91 »

We typically use beyond compare for desync file comparison.
If you want to get ahold of me I'm almost always on Discord.
Rseding91
Factorio Staff
Factorio Staff
Posts: 16414
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: [2.0.72] Desync on_player_controller_changed when type = controller.character

Post by Rseding91 »

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.
If you want to get ahold of me I'm almost always on Discord.
dje4321
Burner Inserter
Burner Inserter
Posts: 6
Joined: Sun Dec 07, 2025 7:58 am
Contact:

Re: [2.0.72] Desync on_player_controller_changed when type = controller.character

Post by dje4321 »

Thank you for the support and help

I will continue to debug this further and provide bug reports to the mod authors in question.
Post Reply

Return to “Desyncs with mods”