My theory is that savestates start to diverge after a restore. There may be some non-functional data, like a timer or something that doesn't deterministically follow from a savestate restore.
To test this, put in code to dump a new uncompressed serialization each frame. Do some savestate restores and compare the data of the dumps frame by frame to see if/when they diverge. Once found, review the memory snapshot code to find the culprit.
Netplay works but will stutter frequently.
My theory is that savestates start to diverge after a restore. There may be some non-functional data, like a timer or something that doesn't deterministically follow from a savestate restore.
To test this, put in code to dump a new uncompressed serialization each frame. Do some savestate restores and compare the data of the dumps frame by frame to see if/when they diverge. Once found, review the memory snapshot code to find the culprit.