As it will happen eventually, destroying all my previous work for this game, have fun watching even less of this game.

Game objectives

  • Emulator used: lsnes rr2-β21
  • Aims for fastest time
  • Uses game-breaking glitches
  • Achieves credits early

Comments

Go ahead and watch the TAS first, it doesn't really take that long.
This is basically the reason why I cancelled the Kirby Super Star submission. You can maybe see why I prefer the previous movie over this one. But first...

What happens this time?

Let's start at the basics. In SMW there are sprites which can change the status of Mario called powerups (such as mushrooms, flowers, stars and so on). It's easy enough for the game to just run a routine to change it as soon as Mario touches a sprite which is listed as a powerup. Now the problem comes when Yoshi eats a sprite, because if it is a powerup, it should be applied to Mario. The game checks if the sprite has a specific property that says the game if it should give Mario a powerup when it is being eaten. Interestingly enough, chucks have this property! Normally, this isn't a problem because you can't actually eat chucks because they have another property which ensures that the sprite won't be caught by Yoshi's tongue (it goes right through), making it impossible to get it on Yoshi's tongue and eat it... or is it?

Item Swap

This glitch is also used in the warps run in YI2 to get the goal tape to replace the shell on Yoshi's tongue, getting the level end earlier or in YI1 to replace a sprite on Yoshi's tongue with a chuck so that Yoshi can... eat it!
This is what I'm doing, too. I replace a sprite on Yoshi's tongue with a chuck. How do I do that? Well, it is possible to get a coin by touching it, but it is also possible to get a coin on Yoshi's tongue. Now just do both things at the same time (see pictures on the right) and Yoshi's tongue will hold a nonexistent sprite or simply nothing. All the game now knows is that Yoshi's tongue holds a sprite in a specific slot and if in that moment a sprite such as a chuck wants to spawn in that slot, its position will be overwritten since it's now on Yoshi's tongue. Yoshi is now able to eat the chuck which is apparently a powerup to the game.

Eating a chuck

Since the chuck powerup isn't intended by the developers and accidentally in the game, the code doesn't account for it and incorrectly indexes the sprite to put in the item box (which is a lakitu cloud) and also gets the subroutine location wrong to jump afterwards. Instead of jumping to a routine to change Mario's status, it jumps to $014A13... which is Open Bus.

Open Bus

Open Bus is an area in the SNES which isn't mapped to a location like WRAM or ROM, which means no such device answers the request from the console to get the next instruction to execute. This means that the console will just execute whatever value was the last one on data bus.
The code just jumped to $014A13 so the last value on data bus is 0x01.
data businstructioninformation
0x01ORA ($01,x)X is 0x09, $0A holds 0x0107, $0107 holds 0x17, A turns to 0x17 and data bus is 0x17
0x17ORA ($17),Y$17 is interesting because $17 and $18 are SMW's controller data, so this is where I can kinda manipulate the outcome
This is the reason why I pressed X and the next frame AXL just before the glitch started so that $17 is 0xE0 and $18 is 0xA0. The code manages to change the SNES to emulation mode so now it can survive BRKs easily, as the vector changed. Then it managed to reach $4219 which are controller registers.

Controller Registers

These are the last 5 frames of input:
             1-1              1-2              2-1              2-2
F. 0 0|....u.l.AXL.....|BY..u.lr...R....|.Ys..d..AXLR0.23|................
F. 0 0|...Su...A.L.0..3|BY..u.lr...R....|.Ys..d..AX.R0...|BYsSu...A.......
F. 0 0|..sSud.rA....123|BY..u.lr...R....|.Ys..d......0.23|BYsSu...A.......
F. 0 0|....u...A.L.0..3|BY..u.lr...R....|.Ys..d..A.L.0.23|BYsSu...A.......
F. 0 0|BY...dl.A...01.3|B........XLR..2.|..s........R..23|BYsSu...A.......
or in bytes ($4218 - $421F):
E0 0A FB 64 10 CB 00 00
A9 18 D8 64 10 CB 80 F8
87 3D 0B 64 10 CB 80 F8
A9 08 AB 64 10 CB 80 F8
8D C6 13 20 72 80 80 F8
One thing to notice is that "64 10 CB" and "80 F8" occur often. "64 10 CB" is executed as STZ $10 : WAI which STores Zero to $10 and then WAits for an Interrupt. That effectively advances one frame and lets Auto-Joypad Read finish so that we have new input. Then it executes "80 F8" of the next frame (which is why there isn't one in the first frame). "80 F8" means BRA $F8 or BRAnch -8 bytes (or simply 8 bytes back), so we reach $4218 once again and can execute more code.
(The 0xE0 in the first frame isn't actually executed since we start at $4219, which is good because we needed that for the Open Bus part)
byteinstructioninformation
0AASL Aused for clearing carry
FBXCEto recover to native mode after emulation mode to safely let NMI execute
A9 18LDA #$18load 0x18 into A for the game mode later
D8CLDclear decimal mode flag to avoid the game getting confused with calculations
87 3DSTA ($3D)store A to whatever long address is in $3D, which happens to be $000100 which is the game mode
0BPHDpush direct page register so that I have 00's on the stack for later
A9 08LDA #$08load 0x08 into A for $13C6 later
ABPLBpull data bank which is now 00 thanks to the PHD before
8D C6 13STA $13C6store A to $13C6 to complete all necessary steps
20 72 80JSR $8072jump to the main game routine and free the game from any further gameplay

Suggested Screenshot

Special Thanks to:

  • Ilari for explaining Open Bus to me
  • Pat for not being able to chuck-glitch

Nach: Accepting as improvement to existing run.
Ilari: processing


1 2
5 6
Joined: 2/21/2008
Posts: 255
True wrote:
And when replaying this run, we get disappointed because it doesn't verify. Controller or not it won't verify, so don't cry harder than usual. Just in case of an implementation error (which I doubt - only the first data frame plays, and plays correctly as verified by logic analyzer), I will test this on my old device when the conversion boards come in...should be sometime this week. What happens after this is I get one more clock and the console controller polling is dead. Screen is black. Music plays. I am sad. Masterjun is probably happy. Masterjun, would it be possible to make a movie with the old glitch, and have some open bus reads done with screen printout to see what's going on? Or is this too much work? :)
Wasn't an earlier version of this run verified live on Good Games Done Fast or something like that?
"The guy was fatally injured and wants to be covered by God's tears (rain) before he dies. God is too busy to bother because it wastes frames." Frames 16:26
Editor, Player (69)
Joined: 1/18/2008
Posts: 663
There is no published "earlier version of this run." If you mean previous runs exploiting the game or in this category, then yes, there have been previous published runs and runs otherwise posted online, and I have verified at least one of them with my new hardware to confirm the hardware works as expected. My old bot is the one that replayed the AGDQ demo at AGDQ.
true on twitch - lsnes windows builds 20230425 - the date this site is buried
Editor, Player (69)
Joined: 1/18/2008
Posts: 663
I tried verifying this run with my old device which has proven to verify other runs and again it does not verify with the same results. I spoke with Masterjun about this and he may or may not be working on a test program to verify the behavior of the bus when doing open bus reads. My guess at this point is that the bus is terminated, so reads are returning a fixed value, and this property is causing the verification issue. It also would mean that the emulator is inaccurate, which would mean what for this run? :)
true on twitch - lsnes windows builds 20230425 - the date this site is buried
Joined: 4/3/2006
Posts: 269
Wow! Voting yes after watching it. This is the shortest SMW run I've watched. In terms of entertaining, I always prefer the complete all-exits as quickly as possible run over any other run for the SMW game. In terms of fastest speed for completing the game, I think this one is the best so far. It contains so many things that's accomplished and compressed down to a few seconds of real-time, it's impossible to know what's going without reading the submission text. And even after reading the submission text, it still amazes me how this was discovered -- looks like a lot of detective work and experimentation to get it to the final product we get to watch and enjoy. Is this the fastest completion (see the ending) game in the series of all SMB games? Looking forward to see SMB, SMB2, SMB3 finished under a minute...
Joined: 12/19/2007
Posts: 40
What is all this talk about changing something? There's exactly one game on this site that is affected by whether or not the extra button presses count. This one. We thus have no policy on whether these extra buttons are allowed. Up+Down and Left+Right do not count. They are possible on a real controller. You just have to press really hard. That's not intended, but no one is arguing that the extra buttons shouldn't be allowed because they are unintended. The argument is that they are not possible for a perfect player playing perfectly with no speed restrictions. Now, whether this is true, I don't know. I know you can't with a standard SNES controller. I know you can't with the SNES mouse, since the mouse cannot do every pin combination. (For one thing, one pin is always active to indicate that it is the SNES Mouse). I think it's unlikely to be possible with the SuperScope, since I believe it also has a pin that is always on. The one that is most promising is the Multitap. I don't know how it works, but the most obvious way would be for it to use all the pins. If so, since Multitap support exists in the emulators used on this site, it should be possible to use that to handle the extra pin inputs. If you can do that, you've proven it can be done. And then there's no longer any debate. If you can't, then the question becomes "What is a TAS?" The explanation I've always seen given is the one I mentioned above: that of a perfect player playing perfectly with no speed restrictions. IF so, then I agree that, if it's not possible with an official SNES peripheral (whether Nintendo or third party), it doesn't count. And, if it is hosted on this site, the description needs to indicate that it is using a nonstandard controller. Heck, if it's using anything other than the SNES Controller, I'd say you should mention it. (Currently it doesn't even mention the Multitap, which I know is required.) Even if you disagree with me on everything else, why wouldn't you want to mention that you used a special controller? Doesn't that make it cooler?
Eszik
He/Him
Joined: 2/9/2014
Posts: 163
While what you're saying is interesting, what's the point of making a 2-month old debate revive?
I problably made mistakes, sorry for my bad English, I'm French :v
Guga
He/Him
Joined: 1/17/2012
Posts: 838
Location: Chile
Well, he is free to do it, not like it's necroposting.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4044
Eszik wrote:
While what you're saying is interesting, what's the point of making a 2-month old debate revive?
Why not? Debates don't have a use-by date. And the TAS is still unobsoleted and published, so it's still relevant to talk about it.
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Skilled player (1742)
Joined: 9/17/2009
Posts: 4984
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
True wrote:
I tried verifying this run with my old device which has proven to verify other runs and again it does not verify with the same results. I spoke with Masterjun about this and he may or may not be working on a test program to verify the behavior of the bus when doing open bus reads. My guess at this point is that the bus is terminated, so reads are returning a fixed value, and this property is causing the verification issue. It also would mean that the emulator is inaccurate, which would mean what for this run? :)
How did it go?
ALAKTORN
He/Him
Former player
Joined: 10/19/2009
Posts: 2527
Location: Italy
jlun2 wrote:
True wrote:
I tried verifying this run with my old device which has proven to verify other runs and again it does not verify with the same results. I spoke with Masterjun about this and he may or may not be working on a test program to verify the behavior of the bus when doing open bus reads. My guess at this point is that the bus is terminated, so reads are returning a fixed value, and this property is causing the verification issue. It also would mean that the emulator is inaccurate, which would mean what for this run? :)
How did it go?
Yeah, how did it go?
Masterjun
He/Him
Site Developer, Skilled player (1988)
Joined: 10/12/2010
Posts: 1185
Location: Germany
True and I planned on doing stuff, but we didn't get to it yet.
Warning: Might glitch to credits I will finish this ACE soon as possible (or will I?)
Joined: 2/21/2008
Posts: 255
Can we annoy the author of bsnes if his "accurate" emulator doesn't accurately emulate the transistor logic of the controller ports? Something says my post lines are too short, so I shall recall my childhood in the frozen tundra of Madagascar. It was a good decades. We had just defeated the Japanese and gained independence. Little did we know, independence was just the start of our struggles. Now that we were sovereign, we could not depend on out samurai robot overlords. Long story short, we all died.
"The guy was fatally injured and wants to be covered by God's tears (rain) before he dies. God is too busy to bother because it wastes frames." Frames 16:26
Active player (437)
Joined: 4/21/2004
Posts: 3517
Location: Stockholm, Sweden
xnamkcor wrote:
Can we annoy the author of bsnes if his "accurate" emulator doesn't accurately emulate the transistor logic of the controller ports? Something says my post lines are too short, so I shall recall my childhood in the frozen tundra of Madagascar. It was a good decades. We had just defeated the Japanese and gained independence. Little did we know, independence was just the start of our struggles. Now that we were sovereign, we could not depend on out samurai robot overlords. Long story short, we all died.
You're.... a... special fella aren't you? :)
Nitrogenesis wrote:
Guys I come from the DidyKnogRacist communite, and you are all wrong, tihs is the run of the mileniun and everyone who says otherwise dosnt know any bater! I found this run vary ease to masturbate too!!!! Don't fuck with me, I know this game so that mean I'm always right!StupedfackincommunityTASVideoz!!!!!!
Arc wrote:
I enjoyed this movie in which hands firmly gripping a shaft lead to balls deep in multiple holes.
natt wrote:
I don't want to get involved in this discussion, but as a point of fact C# is literally the first goddamn thing on that fucking page you linked did you even fucking read it
Cooljay wrote:
Mayor Haggar and Cody are such nice people for the community. Metro City's hospitals reached an all time new record of incoming patients due to their great efforts :P
1 2
5 6