Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Warp wrote:
Why are you talking as if the rewinding function would *replace* savestates instead of existing besides them?
No, I'm addressing the point the way you brought it up yourself:
Warp wrote:
Btw, those things would mostly go away if someone finally created a rewinding feature to the emulators
…and my opinion is no, they wouldn't, at least not "mostly" by a long shot — they are to be addressed in a different way, that involves objective-oriented approach. Without addressing this problem, "when to make a savestate" would just be substituted by "how far back to rewind", and so on.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
Soulrivers wrote:
At any keypoint of a movie, I make a "rewind" savestate, manually. This is usually save state 1 in the emulator. So whenever I need to redo something within the period of that state and the current frame, I press shift+8 (usually that's the shortcut for read-only) and I load the "rewind" state. When I think I've optimised a part of the movie, I put a new "rewind" state and keep playing. It really is that easy.
Nothing would stop it from being even easier: That is, completely automatized. No need to manually save "rewind states" when they could be saved by the emulator. Also, it would allow you to backtrack to any frame, not just the frames where you saved.
SXL
Joined: 2/7/2005
Posts: 571
every TAS emulator ought to have those functionalities : - branch editor, to sort your savestates in a 2D order (branches & time) - input editor, where every new input in the past would create a new branch in the previous window some pictures (hey Highness & Jyzero) show some examples : from http://tasvideos.org/forum/viewtopic.php?p=38496#38496 from http://tasvideos.org/forum/viewtopic.php?p=37006#37006 that would prevent any use of the manual load/save state operations.
I never sleep, 'cause sleep is the cousin of death - NAS
Emulator Coder
Joined: 6/8/2005
Posts: 14
For stepping backwards one frame at a time, consider an emulator that makes an automatic save state every second, for the last two minutes (120 states), and keeps track of controller input for every frame of those two minutes. - At any point, you can immediately rewind to any of those previous seconds and then play back everything to present. - To jump to a particular frame in those two minutes, restore the state for that second, then replay 0 to 59 frames. - To step backwards one frame, jump to the previous frame using the above technique. This will get slower the closer you get to the next second, as it will involve up to 59 emulated frames for every step. - To quickly step backwards one frame a time for several frames, restore the most recent save state, then emulate up to the current time and SAVE THE IMAGES for each frame into a buffer. So if you were currently at frame 50 since the last save state and stepped back one frame, you'd build up 49 images for the previous frames. Then stepping back would be immediate, just display the next earlier frame from the buffer. To reduce delay for the first backwards frame step, you could perhaps always save the last 60 graphic images or something. - To eliminate the delay for the image buffer technique when the buffer is exhausted, you can be refilling the buffer for the previous second while the user is stepping through the next. Say the user starts at the 60th frame in the buffer, then steps backwards one frame. Display the 59th and restore the save state for the previous second and generate the first frame in place of the 60th. Then when the user steps back to the 58th frame, run the emulator forwards one frame and put that where the 59th was. Once the user steps back to the first frame in the buffer, you've got it full with the previous 60 frames, no delay. This can be extended to allow rewinding back to the beginning of the movie by having a second level of save states every 30 seconds or so. Then when rewinding before the two-minute set of save states, you'd go back to the closest 30-second state and run until the desired point, making the one-second save states along the way. The main two issues are the speed of the emulator and how big save states are. For example, if an emulator can run at 2x realtime, then the first backwards step could take half a second worst-case (any after that would be instant). This could be reduced by saving states more often; for example saving states every half second would reduce this to 1/4 second. QuickNES (for Windows) implements this technique, though the emulator is insanely fast (about 21x real-time on a 400 MHz machine).
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
blargg wrote:
- To step backwards one frame, jump to the previous frame using the above technique. This will get slower the closer you get to the next second, as it will involve up to 59 emulated frames for every step.
I don't know how fast emulators can emulate and playback a movie file internally (while not refreshing the screen), but I would bet it can be done very fast. Thus I assume that the emulator restoring the last automatic savestate from memory and internally playing back 59 frames should probably happen in a small fraction of a second.
Post subject: Re: Creating a TAS doesn't seem very user friendly
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
Warp wrote:
...those things would mostly go away if someone finally created a rewinding feature to the emulators (ie. like frame advance, but instead of going forward one frame, it goes back one frame).
This is part of why I use ZSNES over SNES9X. Admittedly, it's not frame-by-frame rewinding, but it's VERY handy. (EDIT: Unless I totally misread the Rewind options, you can set in the options how much it rewinds with each press of the Rewind button. Goes as far down as 1/5th of a second, I believe.)
Previous Name: boct1584
Joined: 10/3/2005
Posts: 1332
FWIW, I made a Lua script in snes9x that can rewind however the heck I want it to. The only problem with it is that the current implementation of Lua in that emulator seems to require the frame advance button to be pressed concurrently with the rewind button... one step forward, two steps back. It works, at least. I can upload it later if anyone's interested... though it's not like it's hard to write, or anything. We need moar Lua, clearly.
Emulator Coder
Joined: 6/8/2005
Posts: 236
Location: Madison, Wisconsin
I wouldn't mind using the hard drive as a memory-cache for saving previous frames in the event that you'd need to rewind.