User File #75291642453080158

Upload All User Files

#75291642453080158 - Super Mario Bros. 3 "Game End Glitch" in 0:00:00.399

smb3-prg1-24f_100th_Coin.bk2
In 00:00.25 (15 frames), 13882 rerecords
10 comments, 186 downloads
Uploaded 11/3/2021 6:19 PM by OnehundredthCoin (see all 12)
I'm going to make a much better writeup of this, but for now I'm just uploading the .bk2
This should beat the current TAS by 23 frames.
Keep in mind this run was made in version 2.3.2 with the SubNesHawk core. I believe this version has a bug with IRQ timing? I don't know all the details, but it might not work on later versions of the emulator. This should not affect the run on console, so I've been told.
DJ_Incendration
on 11/4/2021 4:19 AM
Isn't this 15 frames?
DJ_Incendration
on 11/4/2021 6:40 PM
Are you going to submit this for publication?
DJ_Incendration
on 11/4/2021 6:45 PM
This TAS seems to work on 2.6.3.
OnehundredthCoin
on 11/4/2021 9:43 PM
Quoting DJ Incendration
Are you going to submit this for publication?
I'm trying to take a few more frames off before I submit it, though I do plan on submitting this.
OnehundredthCoin
on 11/4/2021 9:46 PM
Quoting DJ Incendration
Isn't this 15 frames?
I included lag frames from the moment the console turns on. From turning on the console, it's 24 frames. Only including controller latches, it's 15 frames.
OnehundredthCoin
on 11/4/2021 9:48 PM
Quoting DJ Incendration
This TAS seems to work on 2.6.3.
Thanks for testing it there! I'm trying to make some improvements and decided to just download 2.6.3 while testing some more things.
DJ_Incendration
on 11/5/2021 12:35 AM
Is it ok if I post a video of this version on YouTube?
OnehundredthCoin
on 11/5/2021 5:58 AM
Quoting DJ Incendration
Is it ok if I post a video of this version on YouTube?
I would prefer if you didn't. I'm in the process of making a really detailed video about how this run works. I'm also still trying to find ways to improve it, and I mostly submitted it here on TasVideos so someone on the discord could grab the file if they wish to console verify it.
DJ_Incendration
on 11/6/2021 4:24 PM
Quoting OnehundredthCoin
Quoting DJ Incendration
Is it ok if I post a video of this version on YouTube?
I would prefer if you didn't. I'm in the process of making a really detailed video about how this run works. I'm also still trying to find ways to improve it, and I mostly submitted it here on TasVideos so someone on the discord could grab the file if they wish to console verify it.
Ok. So, how did you find this improvement? How would I make a similar TAS?
OnehundredthCoin
on 11/6/2021 6:40 PM
Quoting DJ Incendration
Ok. So, how did you find this improvement? How would I make a similar TAS?
Reading through the notes on the current submission: http://tasvideos.org/6466S.html They mention the key goals are to execute $B85A while address $100 has a value of $20. Their method is to end up writing JSR $8FE1, which ends up satisfying all the requirements, as that chunk of code sets up address $100 and jumps to $B85A. However, there is a surprising amount of effort required to write JSR 8FE1, which is why their run takes as long as it does.
My method was to instead use address $15, which increments by 1 every frame, to write JSR xx1E, where xx is whatever buttons I'm holding on controller 1, and $1E is the value of address $16, which it should always be. I found a place I could jump to at address F81E. This place writes JSR $0020, which would let me return to the zero page, and since this JSR instruction is sitting at xx1E, it writes (1E + 2) to the stack, which is $20. If the stack pointer is in the correct place when all that goes down, that satisfies the address $100 requiring a value of $20 problem. After that point, I just need to jump to $B85A, which can be written with nothing more than button presses.
Though this method does have some drawbacks, it would take 32 frames for address $15 to hold a value of $20 to write JSR. to solve that, I run ASL <$15 twice when $15 has a value of $07. That sets it to $1C, giving me only 4 frames after that point to have the stack pointer ready for the JSR to F81E. I write LDX #08 so I can store X at a specific point to make sure the code gets executed as I want, then I transfer X to the stack pointer. I need the stack pointer to be 7, so I just push A to the stack pointer, then it all unfolds setting $100 to a value of $20.
as for "How would I make a similar TAS?" Check out the SubNesHawk core! This kind of run requires extensive knowledge of 6502 Assembly, and you should definitely read the notes for the current submission, which I linked above.