The
exact Lix algo is slightly different from what Icho describes; the fundamental idea is correct. The performance improvement is huge.
There are three pairs of savestates. Savestates are complete snapshots, not pointers into the replay as in NL. In each pair, for a fixed
c, one savestate is taken every 2
n *
c physics updates, the other is taken every (2
n + 1) *
c physics updates. The first pair has
c = 10, the second
c = 50, the third
c = 200. These values were chosen to combat networking lag. The pair for 200 updates catches even unplayable lags of over 10 seconds.
In singleplayer, this makes for a performance hit once in a while, after you have gone back so many times to exhaust all pairs. The resulting pause is
comparable to longer than what you have in NL. While computing that long, the pairs are overwritten all the time again. This makes additional backstepping extremely fast, even after the single performance hit.
The values for
c are chosen for networking, they are not optimal for singleplayer, and produce the above-mentioned work spike. It can be leveraged slightly with a fourth pair at
c = 1000 or higher, which would correspond to saving less than once per minute.
-- Simon