View Page Source

Back to Page
Revision (current)
Last Updated by Randomno on 7/6/2023 4:09 PM

! 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

! I can't use savestates/other tools

Disable Wayland. On Ubuntu, this can be done on the password screen in the lower right corner. Select Ubuntu on Xorg.


<how to on WSL?>

! How do I report a crash/softlock/problem?

You can open an [|issue] with the following information:
* Which game did you use? Which version? Steam or DRM-free?
* Which version or commit number of libTAS?
* What happens?
* Does libTAS reports errors on the console?
* Does the game reports something on the console?
* 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.