Hi
Im trying to make my own TAS in snes9x and i wonder if there is a way
to manually type in the button in a list, just like a music tracker and then just hit some playbutton and and the game play by it self?
I hope you all understand what i mean :)
To clarify, there are several ways of doing this:
#1: The far most common one is to play through the game in slow motion with recording on (not avi recording, but input recording) and perform the inputs you need. The result is an .smv file, which can be played back as many times as you want, always giving the same result. Remember that you can use savestates while recording, so the emulator itself can be pretty close to the sort of tracker program you want, with the additional advantage that it actually shows you the result of your input at the same time.
#2: If you want to produce an .smv file without playing through the game to produce the inputs, it is possible to create an smv file from scratch. Various tas editors exist, I believe, but I have never used one. In lieu of those, you would have to read the smv specification, and create a program that produces an smv file with the inputs you want. This is probably too cumbersome to be worth it.
#3: A third option is to use LUA-scripts to create the inputs. You would then play the game with recording on, as in the first method, but your LUA script would press the keys, not you. This method also requires programming, but far less than the second option.
From what I have heard so far, I think what you really want is option #1 - the standard way of producing a TAS. But it is hard to know when you explain yourself so tersely.
What i had i mind was to make it more simpler and accurate with just insert some keystrokes, start the game and run those keystrokes, and then modify them as i see fit :)
But now i think the list with input will be some tedious work, so I'll guess I do it the old fashion way :)
Thanks for the quick response!
The thing you have in mind (editing input displayed on a keyroll on the fly) isn't really feasible for TASes because there is no way to instantly jump to say 5:38 in the movie, except by loading a save state. But there can't be a save state if you've changed input in the beginning of the movie. Emulation just isn't fast enough to make it feasible.
function jump-to-frame (N)
emu.speedmode("maximum")
while movie.frame() < N do
emu.frameadvance()
end
emu.speedmode("normal")
end
I guess you'd need to call "movie.load" first, assuming such a thing exists. Which it should, really. How fast you get to the desired frame is a question of CPU power.
It's also interesting to consider how useful such a function would be if you had some quantity of known memory state in hand when it runs. If, for example, you modify a frame near the start of the movie, expecting that it will (or won't) make changes to certain addresses in later frames, you could test your assumptions and possibly avoid desyncs.
Couple that with some kind of interface for modifying the movie— even just a barrel for selecting a frame and some toggle keys— and I'd say the idea is plenty feasible.
Edit: I guess it'd be more useful with the advent of a REPL...