Desync Detection Mode not behaving as expected
PraxTube opened this issue · comments
Describe the bug
I would have expected the with_desync_detection_mode
to rollback every second or some specific time interval, however in my case it only rollsback at the very start and then it just stops. I am not sure if this is the intended behaviour, but from what I can understand from the docs it should rollback in intervals?
It's a bit hard to see in the picture below, but the console output indicates no syncing errors even though the two peers are clearly desynced.
To Reproduce
I followed the example as best as I could, essentially
- Add
with_desync_detection_mode
- Add
print_events_system
toUpdate
- Trigger desync on purpose to get error messages (which didn't happen)
It's likely that I forgot something.
I also tried to get desyncs in the example game, but that didn't work.
Expected behavior
I expected for the desync to run continuously. I am also not really sure what the difference between start_synctest_session
and with_desync_detection_mode
is. Shouldn't they both test checksums for equality and report errors?
Desktop
OS: Zorin OS 16.3 x86_64 (Ubuntu 16 based)
Also this isn't really a bug
report, but rather a what the hell is happening, please help me
report, but that label doesn't exist unfortunately.
Usually, GGRS only sends inputs between clients. If your gamestate evolves deterministically with given inputs, this should keep the clients in sync.
The desync detection mode does not force rollbacks, but it sends checksums of gamestates between clients in addition to the inputs. If the checksums don't match, it will notify you through an event. For this, you need to compute a checksum of your gamestate when saving the state.
If you want to force your setup to go through regular save and load actions, I recommend using the SyncTestSession
.
Thanks for the fast reply. I thought my gamestate is deterministic, but that isn't the case. So now I need to figure out what the issue is. What would you recommend how I do this? Should I use desync detecion mode, or SyncTestSession or something else?
I recommend starting by setting up a SyncTestSession. It will rollback a predetermined number of frames every frame, so you can really test if everything is working properly there.
Alright will do that, thank you very much 👍