We have some TASes where the one and same input is fed to two or more games, and it completes them all (in the best of cases it completes them all at the same time.)
Suddenly this crazy idea came to my mind: What if we had one single input that completed the same game in different ways? Yeah, sounds silly, but hear me out.
Some games may have alternate routes or alternate playable characters. Wouldn't it be cool if the same input could be used to complete the game with eg. two different characters? These two completions could be encoded side-by-side, like with the multiple-games version.
Of course for this to work something would have to be done to allow the same input to deviate at the beginning of the game, else it would be technically impossible. Perhaps one of the completions could start from reset, while the other starts from a savestate (that has been taken from as early in the startup of the game as is possible, but allows the input to deviate. In other words, the savestate does as little as possible; its only goal is to allow the input to be offset in time by just a few frames or so.)
(While starting from a savestate is technically speaking against the rules, I think it would be perfectly justifiable to exceptionally allow it in this case, especially since the savestate is doing nothing more than "offsetting" the input by some frames.)
Joined: 8/14/2009
Posts: 4089
Location: The Netherlands
I've actually done some things like this a few years ago.
Did a dual TAS of Rockman 2 and Mega Man 2, finishing Air Man's stage in one and Metal Man's stage in the other. It's a shame I don't have the WIP anymore though, so I don't have anything to show. But it was interesting.
I think the easiest and most hassle-free way to "desync" the two runs is to use two different versions of the same game, that vary in e.g. faster openings or lag in one version. (That's what I used for Rockman 2/Mega Man 2).
The problem with having one of the movies anchored from a savestate is that you then have two different input files, which goes against the principle of "one run beats two games".
http://www.youtube.com/Noxxa
<dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects.
<Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits
<adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
Or what if the input file was X frames late on one of the emulators? It's the same input, except you started one console a frame late - horrors, a desync! - but wait, it still works!
Joined: 8/14/2009
Posts: 4089
Location: The Netherlands
That is technically still different input.
http://www.youtube.com/Noxxa
<dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects.
<Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits
<adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
I think it can be argued that if the only difference between two input files is that one has a savestate and the other does not, they can be considered the same input for the purposes of this kind of run.
Mothrayas pretty much nails it. You can't have the same input play the same game two different ways. Otherwise this site couldn't exist as every game would be desync-prone. Slight variations are needed, but then it's not really the *same* game now is it?
What if you play the same game with the same input file on two different emulators that handle lag and other magical things that would allow a desync between emulators differently.
Different lag in the title screen would allow you to choose different starting characters or starting levels or whatnot.
What if you play the same game with the same input file on two different emulators that handle lag and other magical things that would allow a desync between emulators differently.
A cute concept, but one which relies on deliberately bad emulation, which this site has striven to quash from the outset.
Mothrayas pretty much nails it. You can't have the same input play the same game two different ways. Otherwise this site couldn't exist as every game would be desync-prone. Slight variations are needed, but then it's not really the *same* game now is it?
What stops it being played back from reset and from a savestate?
Same input, different emu startup state?
On NES there are at least three different cpu/ppu sync combinations. Do any emulators allow you to specify that in the movie file?
(REALLY far fetched)
What about programming a simple RNG using arbitrary code execution with just two options: Say option a teleports you to place a in the game, option b to place b. The input after the code execution manages to finish both scenarios.
Is this feasible or would the movie file always determine which side the RNG choses?
Joined: 8/14/2009
Posts: 4089
Location: The Netherlands
Phallosvogel wrote:
(REALLY far fetched)
What about programming a simple RNG using arbitrary code execution with just two options: Say option a teleports you to place a in the game, option b to place b. The input after the code execution manages to finish both scenarios.
Is this feasible or would the movie file always determine which side the RNG choses?
For any sync-stable emulator, the movie would always get the same result from the RNG. This is because it isn't possible to generate truly random numbers on a deterministic system (such as a deterministic, sync-stable emulator). The RNG would always generate the same "random" numbers.
However, it may be feasible if a system uses a real-time clock but the emulator doesn't initialize it (some old versions of VBA-rr come to mind, where system date had to be set to sync a run), to use that value for randomness. Then this could be possible.
http://www.youtube.com/Noxxa
<dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects.
<Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits
<adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
I though of something similar recently: How to make console verifiable TASes of SNES games with tight timing dependencies, such as Super Metroid. Ilari has shown that a typical Super Metroid TAS will desync if the ratio of the two oscillator frequencies changes by a tiny fraction, much less than the actual stability of real hardware oscillators. So this sounds like it would doom a Super Metroid TAS (or similar) to always desync on console.
However, it might be possible to make a less timing sensitive TAS using the same techinques as for multi-game TASes, treating a set of different oscillator frequencies as individual games. Hopefully, if one makes a TAS that syncs with 10 different such ratios, then it will be robust enough to sync for other small frequency variations. A data point in favor of this is that Ilari found the desyncs to tend to happen certain problem spots in the game (which would be more and more frequent (but still discrete unless I misunderstood) as the timing difference grows).
What about using two similar-but-different versions of the same game? Different languages, for instance, or even different versions. (What about a 100% of an early version of a game, at the same time as an any% of a later version of the same game that has some critical glitches fixed?)
Paired versions of Pokémon seem like an obvious choice. You could even link them!
How about Pokémon Red&Blue, complete pokédex in both (via trading), using the same input file for either game?
i think this submision could help the discutions as the RNG is affected by firmware modifcations,
now, if you change the RNG and that ingame would just swap 2 unimportant tiles on a cube, or even easier - just swap the colors - it would effectively with the same input render two different movies just by changing the name in the firmware
If the same game is designed to run on NTSC and PAL versions of the console, then it ought to be possible to make a TAS that beats the game on both consoles (rather than desync in one of them, as usual.)
This would also probably allow the TAS to deviate in the other console (and eg. select another playable character).
Find a game where the Japanese intro screen lasts a few frames longer / shorter than the US one (or take PAL if you must). I agree it would be kind of cool to see.
The reason we don't see more "multiple games at once" runs is because no emulator that I know of has built in tools to create those runs. I remember modding Gens years ago (even though it had been above my level of competence at the time), so I could run multiple instances in sync, but then lost the code halfway through.
Warp, you are a professional coder and want to see runs of that kind. Why not add such a feature to an emulator of your choice? (Bizhawk?)
It shouldn't even be that difficult, right?
Have a special emulation mode where:
1) Instances of the emulator that are open are able to find/see each other.
2) Input is shared between them.
3) Each is only able to advance to the next frame when all emulators are ready (have agreed to use the same input for the next frame).
4) Save state files must add an additional pre- or post-fix so they don't overlap.
Of course you might be able to think of an even better way to implement it.
It probably could be done with LUA scripts (since they can use dlls, so everything is possible), but if it was actually part of the emulator's menu, I think more people would find and use that feature.
Somehow, I expect to be met with disagreement.
Joined: 8/14/2009
Posts: 4089
Location: The Netherlands
Warp wrote:
If the same game is designed to run on NTSC and PAL versions of the console, then it ought to be possible to make a TAS that beats the game on both consoles (rather than desync in one of them, as usual.)
This would also probably allow the TAS to deviate in the other console (and eg. select another playable character).
Depending on the console (if it runs at 50FPS on PAL) it'd certainly be possible to run both with one input file. But then, on screen the inputs would desync really fast, as one console goes through the input stream significantly faster than the other one.
For example, running both NTSC and PAL versions of Super Mario Bros., if you press A after 300 frames, you jump after 5 seconds in NTSC-SMB, and after 6 seconds in PAL-SMB. And that desync just gets much worse as time goes on.
http://www.youtube.com/Noxxa
<dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects.
<Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits
<adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
I didn't say it would be easy, but I think it would be perfectly possible. You just have to time the keypresses so that they will work with both, in the exact same way as it's done with different games.