Submission #2975: andymac, MUGG's GB Super Mario Land 2 - 6 Golden Coins "glitched" in 02:28.08

Console Game Boy Emulator VBA
Game Version USA/Europe v1.0 Frame Count 8885
ROM Filename Super Mario Land 2 - 6 Golden Coins (UE) (V1.0) [!].gb Frame Rate 60
Branch glitched Rerecord Count 6832
Unknown Authors andymac, MUGG
Game Super Mario Land 2: 6 Golden Coins
Submitted by andymac on 1/10/2011 8:57:40 AM

Submission Comments
Okay, I was definitely not expecting this.
This movie aims to get to the final credits in the smallest amount of time. It does this, through major glitching in 2 minutes and 28 seconds. It's *almost* short enough to be played with my old movie and still be shorter than Soulrivers' movie. Unfortunately, it's not quite. Maybe next time. (it is now) The game title is misleading, and Mario doesn't even see one of these "golden coins", instead Mario just says "Fuck it." goes straight into the depths of hell and summons the credits.
This is a 651 frame improvement to the cancelled movie. Improvements come from a new strategy to get to the garbage data with a mushroom, and some small, minor optimizations.
Last time, I thanked MUGG right at the start. This time, it's not quite enough. Because he found the glitch itself and helped me enormously with route planning and other stuff, I'm listing him as a coauthor. Unfortunately, none of his input is in the final movie, but he still put in enough effort to be listed as an author.

General comments

I'm not really sure whether or not this movie should obsolete the old one. Although they are technically both any%, they are sufficiently different enough to warrant separate publications until a 100% run comes along (Also, the old any% is pretty similar to a 100% anyway).
So here's how it's done. You need to manipulate the byte at address 0xA2D5 to 0x60 from 0x00 in order to set the credits as the next level. Then, the next time you go into a level, the credits will roll. The end!
In Super Mario Land 2, every block represents a byte in memory. Normally, the level is stored in the 0xC000 - 0xDFFF range, but if we go out of bounds we can see other parts of memory as if they were a level, albeit a very glitchy looking one. Basically, I have to bury mario deep enough into the garbage up until the point where I can jump and crush the block that represents 0xA2D5. Once that's done, I quit, and restart the level, and hey! credits roll!

Detailed comments

introductory stage

Here I was battling between two different strategies. I could either run straight through the level, or I could slow down a bit and collect 30 coins. 30 coins? let's talk about that later.
I use a speed trick which requires mario to repeatedly hop through the whole level. Mario gets 1 pixel boost every time. I mention this trick in the comments for my last run, so I'll just copy it here:
The "new" pixel trick
This idea came about when I was trying to prove that the maximum time possibly saved using the pixel trick would be 1 pixel every 8 frames. The problem boiled down to whether or not you could change the number at A200 from D0 to CC in exactly four "moves" using only +4, -4 and -C, OR +8, -8 and +0. This is quite obviously impossible, as no matter how many times you apply +8, -8 and +0, you will never change D0 to CC, and if using +4, -4 and -C, you can only reach CC from D0 in odd moves. This seemed like case closed to me until I realise that if I could use all of +4, -4, -C +8, -8 and +0, the problem was gone.
Although the above paragraph makes little sense, let me try to explain. D0 and CC represent different 8 frame oscillations. If I were to be able to change between D0 and CC in exactly 4 frames, then I could save 2 pixels per 8 frames. On land, I can add or subtract 4, or subtract C from D0 once per frame. In the air, I can add or subtract 8, or keep the value the same once per frame depending on what buttons I had pressed. Normally, It would be a fair assumption that it would be impossible to be on land and in the air at the same time, so it would be fair to say that I couldn't use +4, -4, or -C along with any of +8, -8 or +0. This is of course false. If I decide to jump during the period of time where I am changing between D0 and CC, then I have the opportunity to use all of +-4, +-8, -C, and +0 within that window of time. Similarly, landing on the ground presents a similar opportunity. This would mean that I could save an entire pixel every time I jumped, much like the moonwalking technique described above
This would logically mean that I would necessarily be jumping around as much as possible all the time. Perhaps in the future a run with this technique can be used, but for now, I enjoy the relative freedom of using a slightly outmoded version.
I must admit, I use this trick ONCE in the run: in pumpkin zone 1 near the end, it allows me to land on an odd numbered frame. However, this was just luck, and I had no real idea what had happened. I actually discovered that it could save time much later on.
Twice I abstain from doing this trick in this level because it caused more lag than time saved.

Macro Zone 1

Thanks for MrGrunz for hypothesizing that this could work. If you die on the same frame you go down a pipe, then you can use the pipe glitch without completing the level first. Normally, you would complete the level to enable the use of start/select and then use start/select to exit while in the pipe. But this is pretty cool. You can't do this in pumpkin zone, so I do it here.

Pumpkin Zone 1

Wheee! I just fall to a block that I manipulate to be an exit by changing Mario's horizontal position on screen. Why don't I bury myself just yet? Because I need at least big Mario to crush the credits block in the depths of the garbage.

Pumkin Zone 1 pipe glitch setup

Now there are two ways to get a powerup before the garbage data. Option 1 is shown in the movie. Complete pumpkin zone using the pipe glitch, and then get a mushroom when you set it up again, or you can get 30 coins in the intro level and buy a powerup between macro zone 1 and pumpkin zone. This would mean you wouldn't have to do the pipe glitch twice. However, when I tested it, the second method saved about 90 frames, or a bit more if you entered into Mario zone instead of pumpkin zone, but the first method saved 10 seconds! Because me and MUGG thought it would be slower to do the pipe glitch twice, we almost missed this route, even though it seems inherently more obvious to start off with.
But getting the mushroom without slowing down is pretty cool.

Pumkin Zone 1 garbage

I'd like to note that due to the stop-start nature of this level, and the weird, timer based acceleration, sometimes I have no choice but to lose or gain frames. sometimes you accelerate slower or faster, and usually, it's slower to manipulate it than to get what you've been given. I also lose some frames because I don;t have a fireflower, so i can't do some things that I normally could.
Route planning was the major difficulty here. I have an accurate map for the first 64 rows, but for the next 100, I'm on my own. The route for the first 64 rows is designed to stay as close as possible to the left, Because it's faster to go left, and let the game's horizontal position overflow than it is to go right and get to 0xA2D5 directly like in mugg's testrun. The game has a tendency to make mario move right, because that's the way mario is ejected once inside a block.
The first 64 rows were pretty simple. I had a map, so I could just make some theories and test them. The number of routes is pretty limited so it was easy to test. There is also no weird camera movement, and the blocks shown are actually what they look like, unlike the next 64 rows. There are also very little programming errors to abuse here, apart from a weird behaviour that if you fireball a fire block, you can't fall downwards unless mario jumps. I couldn't use this in this run because I don't have a fireflower when I go through the garbage
The next 64 rows represent ROM that is bank-switchable. That means that if I perform certain behaviors, I can completely change the level layout. One behavior frequently used is B + ^, which changes the bank number, which can be used to fall through some floors or insert solid objects in the way of marios path while in the "pipe" animation, so that he will continue to be ejected. It means mario can fall through floors because I switch to a level layout where there is no floor, and then switch back to the original layout.
The basic strategy here is to go to the left until Mario is over 0xA2D5 using pipes, because going left in a pipe is faster than running (2 pixels per frame compared to 1.625 which is the speed of running with the pixel trick), and then falling to the end. The last pipe I found was excellent for this purpose. It goes left for as long as you want it to, (it is so long it can almost take Mario back to where he started!) and has many places Mario can exit using B + ^. it is also situated directly above a large recess, so Mario can fall almost straight to 0xA2D5, with a few stops along the way. I think I found a good route for these rows. Too far to the right, and you have to go even further to the right to get to 0xA2D5, Otherwise, you would have to go as far left as I did anyway in order to get down to 0xA2D5. Overall, even though I didn't have a map for this part, I think there is the possibility of 1 or 2 potential improvements, and minor ones at that (I don't know of any improvements, I'm just saying, they could be there).
The last few rows of garbage are pretty simple This part of RAM represents graphics of blocks. Break a few blocks and you're at 0xA2D5.
Well, hope you enjoyed the run!

Nach: Judging.
Flygon: Added YouTube module.

Nach: Just great, I need a debugger, hex editor, and dev manual to follow what went on in this game. I don't know about these 6 Golden Coins (not that there's any Gold at all that can be seen), I'm not even sure if there's much of a land here either. Too confusing to follow, therefore, I have no choice but to accept this run.

Mister Epic: Using Flygon's stuff for publication.

Last Edited by TASVideoAgent on 8/18/2012 9:06:50 PM
Page History Latest diff List Referrers