Mario vs. Donkey Kong any% TAS (v3) by Chef Stef
This TAS aims to complete the standard set of levels in Mario vs. Donkey Kong, reaching the credits as quickly as possible. This is an any% run; 100% is possible by collecting all presents and getting a high score for each level, but this goal is ignored in favor of finishing with the fastest time.
Improvement over existing runs
This TAS beats the published run by 27577 frames (about 7.5 minutes) due to many new strategies, more precision, and reduced lag from using a different emulator. It also beats my cancelled improvement by 18381 frames (about 5 minutes).
I'd like to give special thanks to EightBitGuy, who put together a very nice run of this game but only got through world 5. He came up with many new strategies for levels that I ultimately used in this TAS. It's a shame he never finished and submitted his run. This TAS beats his earlier unsubmitted run by 9163 frames (about 2.5 minutes) and his incomplete WIP run by about 3750 frames in comparable sections.
Lag Reduction
Unlike previous submissions, this one uses Bizhawk 1.11.1 with the VBA-Next core instead of VBA. It turns out that VBA-Next emulates more out-of-level lag but much less in-level lag. This added up to about 1800 frames of lag savings over the whole run (subtract this from the numbers in the previous section to get the "real" improvement total). While the lag difference didn't influence my choice of emulator I personally like the result - it makes the laggier levels much more fast-paced and fun to watch.
Shut up, Mario!
Mario has some rather loud voice acting in this game. While watching this you may find yourself wondering how many more YIPPPEEEEEEs and WAA-HAAAAAs you can stand. Never fear, for there's a solution! Simply enablethis Lua script and Mario's voice will be muted for the duration of the run! Turning Mario's sounds off will desync the actual submission so use this modified movie for syncing with the script turned on.
Moves, Mechanics, Tricks, and Glitches
Moves
Besides jumping, Mario has a few extra moves in his arsenal in this game.
- Handstand - Done by jumping while crouched down. In this state, Mario walks on his hands and can deflect certain falling objects (such as bricks) with his feet. Since Mario walks more slowly on his hands, it's usually faster to just avoid the falling objects. However, this move is an important lead-in to the double jump and somersault.
- High Jump / Somersault - Jumping from handstand gives Mario a higher jump than normal. Doing another jump immediately after landing will make Mario do a somersault. The somersault is the highest and farthest of Mario's jumps but has the longest setup time, so it's usually used when nothing else will reach. Mario moves faster than usual during the second jump and somersault (287 and 327 speed, respectively) so if forced to wait it sometimes makes sense to prep a somersault in the meantime.
- Backflip - One of the most-used moves in the TAS. When Mario turns around, he spends some time pivoting on one foot. Jumping during this pivot will make him do a backflip. It's super fast, goes almost as high as the somersault, and can be executed on the spot from almost anywhere.
Mechanics
- Hammer Attacks - Some levels have hammers Mario can pick up and use to attack enemies. There are a few startup frames, and despite enemies moving faster Mario himself doesn't actually move any faster while the hammer is active, so it usually loses time to use them. They're used only when unavoidable or when manipulating specific enemy positions.
- Falling - Mario is quite fragile in this game and will flounder around on the ground when falling from higher than 5 blocks or so, wasting a huge amount of time. When falling from too high (closer to 10 blocks) Mario will simply die. To avoid this I have to land on intermediate platforms or cancel the fall with a spring, which looks sub-optimal but is unfortunately necessary.
- Running vs. Jumping - Mario moves at 272 speed while running flat on the ground and 259 speed in the air after a normal jump, which would make jumping seem slower. However, Mario gets a 1-frame boost of 518 speed at the apex of his jump and a 1-frame boost of 544 speed on the second frame after landing on the ground. Over a single jump window this averages to about 274.5 speed, or around half a pixel of extra distance. This means it's optimal to jump repeatedly but land for at least two frames on the ground between jumps.
- Standing Jumps - Mario takes 5 frames to accelerate to full running speed when starting from a standstill. Doing a standing jump instead will boost Mario to full speed immediately, saving a few frames each time.
- Midair Turnaround - Mario is surprisingly hard to control in midair. Mario can turn around after the apex of his jump but loses almost all of his momentum. Alternatively, if jumping to a lower position there's a 1-frame window where turning around will make Mario fall backwards. This is the optimal way to fall when going around an edge to a lower platform.
- Ladder Mechanics - Once grabbing a ladder it's optimal to jump up the ladder and grab it again on the first possible frame. Near the top of the ladder (around 30 frames before actually reaching the top) there's a 6-frame window where Mario jumps from the ladder much higher than usual. Jumping on the first frame of this window is optimal when trying to land on top as soon as possible; jumping on the last frame is optimal when trying to get the most horizontal distance out of the jump.
- Ascending Ropes - While on a rope Mario can climb up directly (extremely slow) or grab an adjacent rope and climb both (faster). The fastest method is to jump upwards and catch the rope repeatedly, which is heavily used throughout the run. The two normal climbing methods are still used rarely when jumping would take too long or very precise positioning is needed.
- Jumping From Ropes - Mario normally starts out from the center of a rope when jumping. However, pulling away from the rope for two frames will make Mario start some distance away from the rope instead, saving 1-2 frames.
- Jumping From Conveyors - Mario is normally slowed to half speed in the air when jumping from conveyors. However, buffering a jump before Mario has landed on the conveyor will preserve his forward momentum.
Major Tricks / Glitches
- Midair Jumping - After throwing an object, Mario's ground flag is set for the duration of his throwing animation. Due to a bug this also happens when throwing objects during a midair fall or when running off a ledge. This lets Mario jump in midair, which is useful for ascending walls or crossing pits that would otherwise be too large. For spiked pits it's possible to repeatedly land on the thrown object, pick it up, and jump again to repeat the cycle.
- Keyclimbing - With the right positioning and timing it's possible to lodge the key into a wall and jump on it. This is extremely useful for climbing walls that are otherwise too tall to jump over.
- Handstand-Levitating - Performing a handstand and alternating left and right every frame at the apex of the jump starts levitating Mario into the air at 9 speed. Mario can gain arbitrary height from this trick but it's so slow that it never saves time to do so. I did find a use for the trick in 4-6b, where it lets Mario press against a donut block from the underside to skip most of the level. I also use it occasionally to mess around while waiting.
- DK Barrel Reuse - In DK levels, hitting Donkey Kong with an object on the first frame it leaves Mario's hands will register the hit without consuming the object. This lets me repeatedly use the same object to wipe out Donkey Kong without having to wait things out normally. This is used in the world 1, 3, 4, and final boss battles to save a large amount of time.
- Jumping Through Projectiles - Mario is immune to certain projectiles while moving upward. This is convenient when trying to bypass obstacles without slowing down.
- Autofiring Past Ropes - Mario auto-snaps onto ropes when jumping into them, which is useful for rope-boosting (see below) but often leaves Mario in a bad position. Autofiring A, B or Up conveniently cancels the auto-snap. This is useful in many places to jump without having to grab inconvenient ropes.
- Resetting After Boss Battles - After beating Donkey Kong there's a long sequence introducing the next world. Resetting after the battle instead saves 550 frames (9 seconds) each time.
Movement Tricks
- Ceiling-Boosting - Hitting a ceiling during a jump gives Mario 518 speed for one extra frame, usually saving a frame each time.
- Conveyor-Boosting - Similar to ceiling-boosting, Mario gains an extra 256 speed each time his head hits a ceiling when riding a conveyor through a 1-block tall passage. Ducking every other frame is optimal.
- Enemy-Boosting - Clipping the edge of an enemy will boost Mario towards the center of that enemy, saving 1-5 frames.
- Rope-Boosting - Mario auto-snaps onto ropes, boosting him forward by 1-5 pixels depending on the jump positioning. This is used constantly in levels with ropes to gain quick distance while jumping. Note that Mario has a cooldown period between rope-grabs so it doesn't save time to grab multiple ropes right next to each other.
- "Planting" Moves - Mario needs to stop for 1 frame before certain actions can be performed (turning around, descending ladders, starting a handstand, etc). Conveniently, Mario stops in place for 1 frame after landing a jump. This means one frame can be saved by planting a jump onto the spot where the next move is needed. For example, jumping onto the top of a ladder to descend it saves 1 frame over just walking up to it.
- Duck-Turning - Mario takes about 8 frames to turn around from a stop, and about 18 while running. Ducking first will make Mario turn around in just 4 frames. This is used constantly through the TAS as a quick setup for other actions, such as backflipping in the other direction.
- Wire-Scooting - Mario can scoot sideways while grabbing a wire. Scooting just after grabbing the wire delays a wire-jump by 1 frame but lets Mario traverse some extra horizontal distance. This is useful when it's important to cover horizontal distance in addition to making the wire jump.
Other tricks
- Switch-Clipping - Falling on the very edge of a switch will make Mario clip it for one frame before falling. Turning around during that frame will cause Mario to land on the floor instead while still pressing the switch. It's only useful when getting Mario on the floor as soon as possible is important (such as level 6-1b, where it sets up a quicker jump onto the 1-block platform towards the shyguy). This trick only works when clipping the right side of a switch.
- Edge-Avoiding - Similar to switch-clipping, except performed on an edge. This lets Mario land on a lower level slightly earlier than otherwise possible. I only use it once, in 6-6b, where it lets Mario land on the bomb one frame earlier.
- Edge-Clipping - While holding an item, jumping precisely onto an edge causes Mario to clip it. It's possible to turn around during the clip, which sends Mario the opposite direction under the platform. This lets Mario switch direction under a platform much faster than usual. It's used in various places across the TAS, such as the end of 1-2a.
- Spring-Clipping - Falling onto a spring with the right subpixel positioning will cause Mario to bounce off 3 frames faster. Falling onto springs isn't used very often so the trick only appears in 5-6b. I also discovered that it's possible to clip a spring from the ground with the same technique as switch-clipping and edge-avoiding - this causes Mario to bounce off the spring from near ground level. I couldn't find a spot where this saved time so it's unused in this TAS.
Improvements
Nearly every level has been improved, so I won't bother going into the changes level-by-level. Instead, I'll call out any levels with unusual strategies, anecdotes, or interesting non-improvements. Frame counts don't include out-of-level improvements such as resetting after boss battles.
World 1 - Mario Toy Company
1341 frames saved in this world.
- 1-2b: The walking flames are the only randomized enemies in the game, and their movements vary quite a bit depending on the starting frame for the level.
- 1-3a: Unusually, this level has a section with a low ceiling where it's possible to zoom along with ceiling boosts.
- 1-4b: The wire-jump is frame-perfect - any longer and Mario would get zapped by the electricity.
- 1-6a: Brick projectiles can't be neutralized by jumping so the right timing is needed to bypass them. Luckily I saved enough time in the upper section to avoid having to wait for the bricks this time around.
- 1-MM: The mini-Mario levels were probably the hardest to optimize in the TAS because the mini mechanics are extremely opaque. Jumping too much or with the wrong timing causes the minis to stop and look at Mario. Minis will also generally follow Mario but some specific sequences such as backflipping at a precise spot will make them run forward on their own for a short distance. This is exploited as much as possible to guide the minis through the levels while taking Mario to the next area.
- 1-DK: One trash can is used to destroy Donkey Kong from start to finish, saving lots of time.
World 2 - Donkey Kong Jungle
2496 frames saved in this world.
- 2-1b: A backflip is just high enough to get over the spiked wall, skipping most of the level.
- 2-4b: Backflipping to land on the platform at the start has a 0-frame margin of error, which is perfect because it saves a lot of time to make it up there so early.
- 2-5a: This is probably the most impressive use of keyclimbing in the run - it's used to scale the huge wall without having to wait for the platform cycle.
- 2-DK: Hits on Donkey Kong are buffered so I can queue up the next hit while he's still recovering from the previous one. It looks like the fruit misses but it still counts as a hit!
World 3 - Fire Mountain
2919 frames saved in this world.
- 3-4a: By using the levitation trick on the right frame it's possible to glitch through the red blocks underneath the key door with the pounder. Unfortunately it's much slower than just going around normally. Keyclimbing over the red wall saves a lot of time.
- 3-6a: Most of the level is spent waiting for the lava to descend so I set up lots of dangerous maneuvers and close calls in the meantime.
- 3-MM: In the top section, backflipping at the right time makes the mini run forward on its own.
- 3-DK: Once again Donkey Kong is wiped out with just one barrel. I leave the barrel on the platform for the last hit just for fun.
World 4 - Spooky House
4851 frames saved in this world.
- 4-2a: Keyclimbing saves a good amount of time here.
- 4-6a: This was the only level where the levitation trick saved time. Using it here lets Mario press against the donut block from the underside and get to the yellow switch much earlier, saving around 20 seconds.
- 4-DK: There's a window where the shyguys can be picked up from the ground without harming Mario. Once again I use just one shyguy to finish off Donkey Kong.
World 5 - Mystic Forest
6012 frames saved in this world.
- 5-2b: It turns out it's possible to clear the gaps without bringing the other monkey down, saving a huge amount of time.
- 5-3a: Another level with a huge improvement, this time from taking the key directly up the conveyors, skipping the whole puzzle.
- 5-3b: This level had the most waiting time due to the bombs so I was hopeful that the levitation trick could be used - unfortunately it still wastes way too much time. I also discovered that it's possible to activate the last bomb slightly sooner for a savings of 6 frames, but the setup requires collecting all 3 presents (which forces you to play a long minigame at the end of the level) so the strategy is only viable in a 100% run. This is the only level in the run where out-of-level time had to be prioritized over in-level time.
- 5-4a: Another level featuring keyclimbing. It sure looks inefficient to bring the key along over the top but it actually saves several seconds to do so.
- 5-5b: This was the only level where spring-clipping was useful (it's one of the very few levels where Mario falls on a spring). It's used on the second spring going down.
- 5-DK: Unfortunately the bombs explode the moment they hit Donkey Kong so it's not possible to recycle them like in other DK levels.
World 6 - Twilight City
5262 frames saved in this world.
- 6-1a: I experimented with alternate strategies here but the laser cycle ultimately prevented any significant time from being saved.
- 6-3a: Bringing the key over the spikes is tricky but saves a lot of time.
- 6-6b: There's unfortunately not enough time to bring the lower bomb over to the wall, so some time is spent waiting for the upper bombs. I play around a bit while waiting for the bombs to explode.
- 6-MM: There's a complicated sequence of moves used to manipulate the minis precisely throughout the whole level. First, one mini is guided to the left laser section, where the camera is manipulated to take the mini offscreen just as the lasers kill it. Dead minis can still collect letters as they're falling so this mini collects the second letter (the mini is manipulated to turn right so that when dying it falls in the right direction). While on the ladder, the minis are manipulated to stay on the spiked area. Once Mario picks up the trash can, one mini is left on the spikes and manipulated to die on the first possible frame, giving the remaining minis invincibility through the lasers at the end. Finally, the whole sequence is timed to give the minis invincibility as early as possible so they'll start following Mario sooner (after bouncing from a spring they'll run away until invincibility wears off). Mario's movements look erratic but everything has a purpose!
- 6-DK: Unlike most boss battles there's a lot of delay between hits so I have some fun while waiting around. After a hit, if the switches are still aimed at Donkey Kong after he'll stop to press the switch before tossing another bomb, so I make sure to press the switch an extra time after each hit to avoid this.
Final Battle
1650 frames saved in this level. It turns out the big barrels can be reused here too! I exploit the trick one more time to finish off Donkey Kong with just the first barrel, saving around 25 seconds.
Enjoy the show!
Samsara: It's-a me, Judgio.
Samsara: Excellent work with the improvements, Chef Stef! Very well-coordinated level strategies, lots of neat speed tricks, and a large improvement over all other known runs to boot. It was quite an entertaining watch (the playaround sections in 3-6a and the final battle being highlights for me), and the audience response is unanimously positive this time around, so I'm accepting this as an improvement to the published run and promoting it to Moons.
Now, with this done, the only question left is... when's GB Donkey Kong? (2020 EDIT: oh there it is)
Spikestuff: Oh hey, Chrono Trigger got rejected. Yaaaaay