keylie
He/Him
Editor, Emulator Coder, Expert player (2841)
Joined: 3/17/2013
Posts: 392
Hey, Lately, I'm running more and more into the general issue of multithreading and determinism. A lot of games do render on a separate thread, which makes input handling code running concurrently on different threads. So you need extra synchronization code to make all input code run always in the same order. For now, I've always tried to fix those issues in the more general and game-agnostic way, which lead to some obscure settings. Users can't possibly know which ones to toggle unless it is explicitly written on the game compatibility page or movie submission page. Also, these general fixes are sometimes not very efficient, or don't work properly on slow machines, or just don't work. So I'm thinking that it may be the time to accept that I'm indeed writing game/engine-specific code, and use the knowledge about the game behavior to write the most efficient synchronization code for each game/engine. This would appear on the libTAS UI as a specific menu, or it could be enabled automatically by detecting the game (from the game executable name or hash?). Note that I'm not talking about hacks, I'm not altering the game behavior, but just adding extra synchronization code to ensure determinism. This should also allow existing TASes that have synchronization problems (Celeste, SteamWorld Dig 2) to run without the extra procedure. What do you all think about this?
Joined: 9/12/2014
Posts: 541
Location: Waterford, MI
If its the only way to make it easier to use, then Im all for it. With hacky support in mind, we can probably start treating emulator save states like its libtas making save states. Good example being ppsspp.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Without creating a whole new framework from scratch, I think game specific options is the only solution.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.