If possible, I want this NES Dragon Quest (J) movie to be verified.
This movie proceeds the game just before performing a glitch.
I submitted a FCEUX movie of this game, but according to Bigbass, it is unlikely to sync on a real console.
So, I decided to make another movie on NesHawk. And in the first place, it will be necessary to verify the base movie above.
EDIT: I think this game does not depend on an uninitialized RAM state (although I'm not 100% sure).
Hmm testing this one out and still encountering desyncs. I'm curious if the replay must be started from power-on. I normally start from reset, because I use an everdrive which means I can't boot directly into a game. For a majority of NES games, this is completely fine, but there are some games, like Hydlide for example, that performs different code on boot compared to on reset. (and some games change where the program flow jumps to at reset, depending on how far into the title screen you go.)
You mentioned in the submission thread that the game updates RNG every frame. Now, starting from reset is still consistent between attempts (but different from the submission movie). However, if I don't reset when I start the replay, every attempt is indeed different, often desyncing by running into an NPC, or eventually entering an enemy encounter. What I'm curious about, is if somehow there is an RNG difference between power-on state, and reset state. Or in other words, if there is some part of the game that the reset routine doesn't affect, which results in a different (albeit consistent) result than what is seen in emulator.
It is possible to start a replay from the everdrive menu, but it's a bit finicky and my replay device isn't designed to do that, at this time. A couple years ago, that's how I managed to verify Hydlide. I'd rather see someone else attempt this, ideally with either a reprogrammable cart or the original game.
Thank you again for the verification!
I have read a large portion of the game code, and I believe this game does not distinguish power/reset in the logic.
But I found a strange quirk. I tried inserting a reset frame at the beginning of my movie, and the game takes an inconsistent time to accept the first input:
In the 1st picture (the original movie), I did not insert a reset. And I wait for 1 frame to manipulate the RNG at frame 56.
In the 2nd picture, I inserted 1 blank frame at the beginning, and reset at frame 0. This syncs (the same as the original movie).
In the 3rd picture, I inserted 3 blank frame at the beginning, and reset at frame 2. This desyncs.
In the 3rd picture, I expected the game to accept the first input at frame 59, but it actually does so at frame 60.
This affects the RNG and the movie desyncs. But, if I insert an extra blank frame at frame 60, it syncs.
I don't know why the game behaves this way. I tested some other games (e.g. SMB1), but they do not show such a behavior.
Does the desync you mentioned still occur even if you insert/remove a blank frame at the beginning of the movie?
(I made such movies: inserted a frame, removed a frame)
If so, it might be impossible to make a verifiable movie on NesHawk...
For now, I'm considering to make another movie on SubNesHawk, but it might take some time.
That could just be a quirk of the emulator. The initial boot sequence as seen from a TASing perspective isn't necessarily correct (although NESHawk I think gets it more correct than FCEUX). For example, there are games where you can have exactly the same inputs between FCEUX and NESHawk, but save 2 frames in NESHawk because the number of "lag" frames at the start is different. This was discussed as part of Final Fantasy's stair glitch branch.
Furthermore, the experiments you show here don't represent what's happening when I reset the console to begin the replay. The initial reset could happen at any point after the game has started (it's impractical to start the replay within the first 5 frames of the game). It would be as if you inserted potentially hundreds of blank frames at the start of the TAS. Like I said, normally this doesn't matter, and I'm not sure it matters in this game either, since starting from reset always produces consistent results, albeit different from what the emulator expected. Additionally, even if I could start the replay at the same frame the emulator thinks is the start, the reset you're adding to the TAS inputs wouldn't actually be used until the first input poll. This is just due to a limitation of the replay device, as the only way to stay in sync with "lag" frames, is to monitor the composite video output of the console and watch for the VSYNC pulse (which may not be the same way the emulator tracks frames.)
Thank you for the detailed description.
Now I understand that it is not a problem about the amount of blank frames at the beginning.
The only reason I can guess is that this game sometimes polls input multiple times in a frame (especially when the game is paused).
I will try resyncing my movie on SubNesHawk when I have time.
EDIT:
I guess that the reason is the input polling loop in the title scene. In this loop, the game continues to poll input without waiting for VBLANK (you can confirm this with SubNesHawk). And I waited for a frame in the title scene, in order to manipulate the RNG.
Now I believe that I have to at least use SubNesHawk to make a verifiable movie.
Sorry to bother you again, but could you verify this NES Dragon Quest (J) movie (recorded on SubNesHawk) ?
This is just a resync of this NesHawk movie. If this syncs, it will look like this video:
Link to video
I expect this to sync at least until 5:38 in the video above.
No worries, it's not a bother. So good news and bad news. The replay works a lot farther than before, and when it's working, all of the NPCs are always where they are expected to be (which indicates the RNG is the same). But it desyncs during the glitch (approx. 05:53 in your video). As usual for my attempts, the replay was started from reset at the intro screen.
I've uploaded a recording here for comparison (unlisted, and I apologize for the wiring mess and no input displays):
Link to video(Please note, the camera is recording at 30 FPS, not 60, so anything that would be visible for only 1 frame, may not appear in the recording)
The replay works a lot farther than before, and when it's working, all of the NPCs are always where they are expected to be (which indicates the RNG is the same). But it desyncs during the glitch (approx. 05:53 in your video).
Thank you again!
It seems that the movie syncs perfectly before performing the glitch. This will mean we can make a (non-glitched) verifiable movie on SubNesHawk.
For the glitch, I guess that NesHawk's emulation might be still incomplete for some edge cases.
Especially, in the movie, the game reads text script commands from the PPU write-only registers.
I wish to see a console verification of this movie: #8581: Pankaj's NES Batman in 09:11.86
This game as a huge history of optimization, and now for the first time we got a BizHawk movie file, unlike all the previous ones that were done on FCEUX.
I wish to see a console verification of this movie: #8581: Pankaj's NES Batman in 09:11.86
This game as a huge history of optimization, and now for the first time we got a BizHawk movie file, unlike all the previous ones that were done on FCEUX.