Emulator Resources / lib TAS / FAQ

The game is very slow!

Using an OpenGL software driver makes the game run very slowly, but it is necessary for being able to use savestates. Indeed, if we use hardware acceleration, we cannot save the state of the GPU inside savestates, so loading savestates often results in a crash. Nethertheless, fast-forward skips most OpenGL rendering functions, so you should get a decent framerate with fast-forward enabled.

Why did my savestates disappear after I restart the game?

Savestates are invalid after restarting the game, because part of the game state is different at each execution. This includes memory layout, processes/threads identifiers, file identifiers, and in general any communication protocol to the outside (X server connection, sockets, etc.). It may be possible to get savestates valid upon game restart, but it would require a lot of work and I don't feel it is worth right now.

The game softlocks at startup/after a short time

They are many reasons why a game would softlock when launching with the tool, but many games softlock because they are waiting in a loop for time to advance (without drawing or sleeping). The best way to check this is to set Runtime > Debug > Uncontrolled time before starting the game. It will disable the deterministic timer and will let the game access to real time. If the game does not softlock anymore, then we are likely witnessing this scenario. However, we cannot keep this setting because it makes input recording/playback highly non-deterministic.

There is a setting which tries to overcome this softlock, under menu Runtime > time tracking. Basically, it increases the time when a specific function, that asks for current time, has been called a certain number of times. Either you find the right function to check, starting by main thread, by trial-and-error until the game does not softlock anymore, or you can look at the debug log by enabling Runtime > Debug Logging > Print Categories > Time Get, and see which function is continuously called by the game.

Checking an item under Runtime > time tracking > main thread affects sync, but it won't lower the determinism of the game execution. Checking an item under Runtime > time tracking > secondary thread, however, may make the game non-deterministic.

If this doesn't solve the softlock, then you gather information about it as explained below

If you encounter a crash or a softlock, can you launch the game with Start and attach gdb, and reach that point. Then on the console you should have a gdb prompt "(gdb) " if the game crashed, or press Ctrl-C if the game softlocked to get one. Then enter "thread apply all bt" and paste the result in the github issue.