My motivation behind my
Cheetahmen II submission was to show bring up this issue and show off the potential it has for TASing, and the potential ramifications it has on the site.
For those unaware of the situation, hardware RAM is in an undetermined state on power-on (meaning it is unknown as to whether it is 0 or 1). Most any game is programmed to not assume, and set the desired value before using it. However, some games fail to do this due to bad programming or a small oversight in a particular situation.
This causes indeterminacy, which is experienced by anyone trying to get a
TAS to sync using a bot. Another example of this discussion is regarding Blades of Steel. The opening movie is different due to the fact that the rng is seeded by unitialized RAM.
Up to now, we have just used the "default" state that an emulator chooses to intialize RAM. The emulators we rerecord on have a defined default state, however some emulators should use to use a random value when initializing to simulate the indetermancy of hardware. This is at odds with syncability so we prefer emulators not do this, and would mod them if necessary to avoid it.
However, there isn't necessarily a logical default state. For instance, some games break if the nes is all 0's. As such the FCE emulator a LONG time ago used the pattern 0000FFFF00000FFFF because it gave good compatibility (popular games that requrie a non 0 pattern work, and only a handful of very obscure pirated games are known to fail from it).
By convention FCEU, FCEU-rr, and FCEUX still use the core from this emulator to this day so we have had the convention of it being the basis for TASing. NESHawk also adopted this pattern because it was easy to choose that vs trying to do some other scheme. However, these decisions are based on emulation considerations not TASing.
With my cheetahmen II submission I show another alternative. We can have our cake and eat it too. We can have determinism by an emulator having a default state. We can exploit randomndess by having a movie FEED a particular (valid) state into the core to use as its power-on state.
This allows us to do things like get a more favorable RNG state. An example of this is potentially Friday the 13th for NES. I've did some experiments and it looks like the RNG is using unitialized RAM. It may be possible to get a RNG state that could improve the current TAS.
In more complex scenarios we may be able to do amazing things to a SNES game. We could have an entire program sitting in unitialized memory, and through memory corruption techniques maybe we could get the game to start executing at this point and completely take over the game (hypothetical, and unlikely, but certainly interesting).
However, this is a potentially controversial decision. While I favor the idea (and vote yes on this poll), I think we should decide, as a community, what to do in terms of site policy.