TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #6507: Bloopiero & Cyorter's VBoy Virtual Boy Wario Land in 17:27.33

Console: Virtual Boy
Game name: Virtual Boy Wario Land
Game version: JPN/USA
ROM filename: Virtual Boy Wario Land (JU).vb
Branch:
Emulator: BizHawk 2.3
Movie length: 17:27.33
FrameCount: 52653
Re-record count: 97078
Author's real name: Justin Kastler & César
Author's nickname: Bloopiero & Cyorter
Submitter: Cyorter
Submitted at: 2019-09-04 02:56:56
Text last edited at: 2019-09-12 00:49:18
Text last edited by: Spikestuff
Download: Download (26097 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
To quote Wikipedia, “Virtual Boy Wario Land is a platforming video game.” It continues the tradition of previous Wario Land games, following the antihero on his quest for riches as he becomes trapped in a series of 14 underground caves and is forced to find his way back aboveground.

Game objectives:

  • Aims for shortest input
  • Uses glitches to save time
  • Attempts to entertain (at least a little)
  • Genre: Platform

Encode:


(Link to video)

After a year of continual work, and almost 100k rerecords, we’re proud to present the new Virtual Boy Wario Land TAS! This is an improvement over adelikat's 2010 TAS of 3631 frames, or 1:12.22 seconds. A portion of this (240 frames) is from collecting fewer coins throughout the run to shorten the end-game countdown, but the vast majority is due to a much higher level of optimization and faster movement techniques used in nearly every room in the game. This run was made on a newer emulator than the published run, but all loads were timed to be the same between TASes, and lag doesn't exist in this game. Once BizHawk got Virtual Boy support, many TASes made with VBjin got improved on the newer core, and VBoy Wario Land is now no exception. However, with some creative Python, Cyorter converted the movie file into a syncable VBjin one, for XP and 32-bit users. You can download it here.

RAM Addresses

All addresses are WRAM and Little-Endian.
Address Type Name
1026 u16 X Position
1005 s8 X Speed
1028 u16 Y Position (inverted)
102A s16 Y Speed
8864 u16 Lv10 Framerule
B988 u16 Total Coins
018D u8 Boss Hitstate

Why are we avoiding so many coins?

Some viewers may be confused on why we collect so many fewer coins than adelikat. After all, this is Wario we’re talking about - the canonically greediest Mario character! When using TASVideos timing, this run doesn't end on the last hit on the final boss. Instead of getting every item and seeing the true ending as an All Treasures run would do, beating the game normally gives a different ending depending on the number of coins you collect. The ending you get doesn't really matter for our purposes, but the problem here is the coin countdown: it, as the name implies, counts down the coins you’ve collected throughout the game, so racking up thousands throughout the run wasted a large chunk of time, as seen in adelikat’s TAS. We discovered that starting with 499 coins or less will cause the display to decrease at a rate of 1 coin per frame, and above that, the rate increases by one for every 250 extra. To put it simply, starting at 500 will take the same amount of time as starting at 250 or 1000, but 502 will take one less frame than 252, and the same number as 1002.

It wasn't until quite late in the TAS that we fully understood this system. Although we were very conflicted on this for a long time, especially since focusing on input length instead of IGT or RTA timing would require redoing tedious parts of the run, after getting advice from the community, we ended up switching. We have to go visibly slower to circumvent several coins, but we hope that viewers will understand. The8bitbeast actually did the exact same thing in his recent Toto World 3 TAS, and he didn't seem to get any flak for it, so we're not overly concerned about this, but we still thought we should mention it.

Per Stage Comments

We’re not going to describe every single frame save in this section, since a metric ton of them just come from precise position management and better TASing tools, but we’ll comment on some of the more notable and interesting improvements. Most of the coin saves are pretty self-explanatory, since adelikat wasn't even trying to avoid them in his TAS, so they're usually not worth mentioning.

Timesaves

Stage Frames Saved Seconds Saved Coins Collected
Intro 8 0.159 0
Stage 1 20 0.397 1
Stage 2 55 1.094 0
Stage 3 262 5.211 11
Stage 4 5 0.099 0
Stage 5 58 1.153 0
Stage 6 373 7.419 12
Stage 7 269 5.350 12
Stage 8 3 0.059 0
Stage 9 662 13.17 0
Stage 10 1330 26.46 0
Stage 11 135 2.685 8
Stage 12 7 0.139 0
Stage 13 195 3.878 0
Stage 14 9 0.179 0
Ending 240 4.773 0
Total 3631 72.22 44

Intro

♫ We got rhythm, we got rhythm ♫ 8 frames saved from… menuing. Very exciting, we know.

Stage 1

We discovered a trick where instead of taking 4 frames to reach max running speed after the fade in, it’s possible to accelerate in a single frame by jumping and immediately flattening out, saving 2 frames. Unfortunately, this trick is mostly useless, since you can dash immediately after going through loading zones almost everywhere else in the game. This is also the only time in the run where dashing isn't any faster than running, due to the lack of powerups, so it adds a tiny bit of variety to the movement.

On the second screen, we were able to hit the question block and the block in front of it at the same time, saving 9 frames by allowing us to jump into the powerup on the earliest possible frame. It’s a bit confusing that adelikat didn’t figure out this was possible, since he uses the exact same trick 10 seconds later just to look cool.

Also introduced here is one of the major recurring tricks in the run. Sometimes, jumping into the corner of floating blocks (any kind) boosts us 1-3 pixels forward, depending on Wario’s specific position. This trick was carried over into many Mario series games, and, in fact, learning about how this worked in NSMB was Bloopiero’s original inspiration for this run (https://youtu.be/vFR3yyyoU6U). You can see us use this on the first block in the game, as well as a few other places after picking up Bull Wario.

Better positioning when grabbing the powerup saves a few frames, but others were removed through another recurring trick, although this one a lot less prominent than corner boosting. Keys run on a framerule: not for when you can grab them, but for when the little cutscene ends. By jumping right before grabbing the key, we maintain our speed for a few extra frames, but the cutscene ends up finishing at the same time, since we’re on the same cycle. You’ll see this pop up again in future levels if you keep your eyes open for it, but this is the time it’s most noticeable. In this instance, 4 frames are shaved off.

Stage 2

A few corner boosts in the first section, but nothing major was changed from the old TAS in the beginning of this stage (we won’t mention corner boosts a ton after this point unless they're special, since they pop up in every level, but you can spot them yourself if you try).

Once inside the pipe, we use a control option that adelikat often seemed completely unaware of: by holding the L or R trigger in midair when you’re not dashing, Wario’s max speed increases from 2 to 4. This saves an easy 8 frames here.

We found that hitting the key block with a ground pound is the optimal way to activate it as early as possible, saving 26 frames (if you didn't know, ground pounds in this game don't get rid of all your horizontal momentum like they do in mainline Mario). This was definitely the part of this relatively simple stage that got the most revisions, and in the end, we were surprised that we didn't think of this sooner.

Jumping immediately before hitting the key allows faster downward acceleration towards the spring blocks, saving an additional 20 frames. Using them as early as possible is important, since Wario’s movement speed is halved when he’s in the background. These blocks aren't seen much in the any% run, but we do use an interesting property of theirs. For some reason, if you activate them on the seam between the two blocks, you’ll get a pseudo-corner boost off of them. This is made more confusing by the fact that it boosts you 4 units, more than is possible with any other block at this speed, but we're not complaining.

Stage 3

This is the stage where we first started working together! This is also the stage that gave us the most trouble, and is easily the source of thousands of our rerecords, as we came back here many, many times throughout the run (this game isn’t all that sync-friendly due to weird position calculation, but it’s not completely impossible to change old sections). The swimming physics system is unnecessarily complex in this game, and it gave us a lot of trouble later on in the run as well.

What’s probably the intended method of going fast in water is just holding down the triggers for the whole time, and understandably, that’s what adelikat did here. For some amount of time, Wario swims at 4 speed, and then slows down to 2 for a small period, and this cycle repeats over time. However, there are two ways to reset to the fastest swim: one, releasing the triggers and re-pressing them a frame later, which makes Wario lose speed for 3 frames at a time; and two, hitting your head against the bottom of tile, which resets his speed for only 2 frames. Obviously, the latter method is preferred, but it’s not always possible.

When it comes to vertical swimming, the base speed is 4, and it slows down to 3 after 5 frames, continually dropping from there. Pressing A immediately before this switch occurs causes the slowdown to only last for 1 frame.

Now, these base systems might not seem all that complicated at first, but there are so many additional mechanics in play that it’s incredibly difficult to describe how infuriating keeping track of them is. Because holding the triggers only allows you to swim fast for a specific amount of time (which runs on a framerule that changes even if you’re not moving), you have to start holding them at certain frames before moving horizontally from a standstill; the vertical slowdown is on an independent framerule that restarts when you hit your head against a tile, meaning that doing so at a specific time before starting to move up past a corner occasionally lets you have 1 less frame of slow movement on the way - and this also sometimes applies to downwards movement, meaning that it’s often optimal to hit block at a lower y pixel than normal, so as not to have it push you downwards an extra 3 pixels; when entering a pipe, every 4 frames, the game will freeze Wario for 2 frames before placing him in the entrance animation, so wasting a frame can occasionally avoid this; and all of this isn’t even mentioning the effect of non-pipe warps and currents on the system. We’re leaving out a lot of info in this description so that we don’t end up rambling on about how confusing it all is for another 5 pages, especially since it involves the interplay of multiple systems and often requires brute force testing to tell when it's worth it to sacrifice time on one to improve another, but suffice it to say that the water movement here is very optimized compared to the previous run, saving over 250 frames in this one level alone.

On the last screen, after jumping off of the first ladder, a ground pound allows you to slightly clip up onto the floor and start further left. Additionally, ground pounding to reduce Wario’s vertical speed when going up ladders might not sound like the best idea, but we use it to be able to grab them with fewer frames of movement at minimum vertical speed, which is often optimal depending on the ladder’s height.

Stage 4

We tried to make the miniboss battle interesting to watch, but it’s fairly standard without any powerups to spice it up. There is a corner boost off of the stalactite at the beginning, saving a frame. It’s important to make sure Wario is directly above the miniboss a few moments before it exits its damage animation, or else it'll try to fly towards him and have to slowly shuffle back to the center. This holds true for all of the future minibosses as well.

The Dinosaur Fish (is that really the best name they could come up with?) battle had some attempts to make a rhythmical freerun, but this game doesn’t exactly have boss design that’s conducive to entertainment. 4 frames are saved from having the boss hitstate RAM watch - it’s sometimes impossible to tell if he’s been hit during the first 2 frames of his animation, so there's not much adelikat could've done here. No coins are collected in the coin shower, of course.

Stage 5

This stage is very ladder-oriented, so we use the ground pounding strat we mentioned earlier extensively. Hitting the question block as late as possible also shortens the distance you fall before grabbing the ladder next to it, with these combined making this room 26 frames faster overall. The coins lining the ladders are avoided, although it’s a very close shave for some of them. We use different movement on the way to the next room that saves a few units, but it ends up tying the old strat anyways.

In the next room, optimizing the horizontal ladder movement by stopping to regrab twice instead of 3 times saved 12 frames, although it makes reaching the end pipe without landing on the ladder tiles look a bit... clunky.

Using a precise trick to break only the one block instead of two next to the key allows for a 15 frame faster strat, along with an extra 4 from being able to reach the pipe sooner. A corner boost sadly isn’t possible in midair here without losing too much vertical speed to reach the high floor, or else it’d save a frame.

Stage 6

We avoid slowing down here when jumping from block to block by doing a midair jump as Eagle Wario, which involves turning around, jumping, and dashjumping backward within 4-7 frames (no idea why that number is inconsistent, but we could say the same for a lot of things in this game). You'll see this used a few times later on as well. We also discovered that mashing A against the current maintains max speed here, and releasing the trigger for a frame still saves time here despite the weird speed values. 114 frames saved overall!

From here we begin walljumping - a common old-school Mario glitch - which is performed in this game by falling against a wall, turning around while keeping your speed towards it, and hovering forwards on a specific frame. This gives you two frames to jump while the game thinks you’re on solid ground, but realistically there's only one, because optimal walljumping has to press A the frame before that window. Because you decelerate from max to min vertical speed so quickly in this game, we have to walljump frequently for the best results.

7 frames are saved entering the pipe using a new walljump strategy - it’s faster to break the top block on the way in instead of out - and grabbing the key as far to the right as possible also saves an additional frame. Going back to the pipe, a whopping 148 frames are cut off using an enemy bounce into the walljump, along with a unique 7-unit corner boost coming out of the door (made possible by the low starting speed).

From the second pipe to the third, 131 frames are saved from better walljumping technique and some creative movement choices. Finally, 25 frames are saved in the ending water section through better height management and the previously mentioned tech (don’t even get us started on how to optimize water movement through currents).

Stage 7

By entering the first door in a precise location while the Big Blob is shrinking and before the Torny moves him into the air (Nintendo really pushed themselves in the naming department, eh?), we avoid having to wait for Torny to move away from the door and save 132 frames.

Instead of attacking the Mastah Mosquito like in the old TAS, Wario adopts a pacifist mindset and uses the free space between him and the ledge to save 12 frames. We unfortunately get a 3 pixel corner boost backwards because of this, making it a frame slower, but there’s no way to avoid it.

And now we reach the final water section of the game! Very exciting, at least for us. We reach the key 31 frames faster than adelikat (it’s actually possible to grab it 2 frames earlier than this, but it wastes time because of the cutscene framerule), and save a few more on the way out. We tested the jump to leave the water using a lot of different movement options, but surprisingly, losing all your speed for 3 frames to walljump ended up being the fastest, due to it letting us start a dash off of the ledge a few frames earlier. 86 frames total saved here. We also avoid a lot of coins on the way out, which is tricky with the way they're laid out here.

Stage 8

This stage was the least changed, and the least improved, from the old TAS. Not much to talk about here besides the cool freerun with Eagle Wario’s new moveset.

Stage 9

Apart from Stage 10, this level easily has the most timesave in the run, but a lot of it just comes down to one simple trick. Normally, when you throw a watermelon onto a spring, it’ll fly into the background and land on a button, causing the big watermelon blocking your path to flash and despawn. However, if during the time that the watermelon is in midair, you backtrack to a point where the button is loaded but the big watermelon is not, that despawn happens instantly, letting you move on several seconds faster. Backtracking here serves a dual purpose, though - as seen in the old TAS, it’s normally impossible to hit the button on the first cycle. But by unloading that button while the watermelon is flying back, we’re able to reset it to its starting position by re-entering its radius a moment later, allowing us to skip a cycle and save another ~10 seconds. Both of these tricks also apply to the lever with the key, and save an additional ~5 seconds, although it relies on much tighter positioning.

Worth noting is that the order the watermelons are hung in is RNG, so we had to manipulate them beforehand. An easier version of the skips are possible in RTA runs, but it requires perfect luck, so the WR doesn't include it.

Stage 10

The corner boost in the first room is only possible while flattened. While this is true in one or two other places, this is the only one where it saves any time. Again, we have no idea why this is possible in so few places, but we’ll take what we can get.

As we mentioned, this is the largest timesave area in the whole game. This stage starts with a framerule of 30 in-game seconds running, governing when the key will pop out of its clock. We tried our best to get to the key room in the first cycle (19:30 remaining on the timer), but we had a lot of trouble until we showed the Wario Speedrunning discord server our WIP. Dangerless, a prominent runner of the game, showed us a skip that he had been working on a few years earlier, but was never pulled off in real-time. In the battle with the Face Ball (the magnificent naming conventions continue), we defeat him using a… Little Face Ball, and then quickly leave the room. When we re-enter, the death cutscene is skipped and the door instantly opens, similar to the watermelon trick from the last stage. Although this doesn't seem much faster in real time, the framerule is static while going through loading zones, and these extra few seconds allow us to just barely make it to the key room in time! In fact, because we get to the room with a few moments to spare, we even have enough time to get into the perfect position when grabbing the key. Normally, saving a cycle here would be 30 seconds faster, but the extra loading zones cut it down to only ~26.

In the next room, we avoid another 20-coin, sacrificing a frame of gameplay but saving time overall. We also got rid of 15 frames heading from the key to the end of the stage, in part by using the weird 4-unit boost off of the spring blocks again.

Stage 11

23 frames are saved on the first screen with some clever movement. On the third screen, by jumping and flattening out 2 frames before hitting the enemy, we can get past it without wasting as much time, although you still have to slowly hover for a bit to make it onto the block. Another 39 frames saved.

Expert walljumping saves 61 frames on the way to the key, and an additional 3 frames are cut during the fall back down. A new strategy to avoid the Fire Octopuses, along with some small optimizations, saves 9 frames in the last room.

Stage 12

The Tank and Operator battle is as exciting as ever (do we even need to make fun of these names any more?), as is the coin shower freerun. We got lucky here, and the boss used the explosive disc attack without us needing to manipulate anything, making a 4 frame save easy in addition to 3 from using RAM watch.

Stage 13

The Thorn-Balls are manipulable by changing your movement in previous stages, but their pattern is set as soon as you enter the level, so we found one that wouldn't block us anywhere.

We take advantage of walljumping in the key room, saving 38 frames. In the following 3 rooms, 41, 4, and 42 frames respectively were saved, in the first and third rooms by dashing immediately after hitting the first block, causing Wario to bounce slightly upwards off of the second so that he briefly touches the pipe, allowing him to enter it, and in the second room through general optimization. In the third Thorn-Ball room, we use some precise jumps to accelerate downwards faster and enter the door 22 frames earlier. Ending off the level, some more skillful walljumping cuts off another 31. Onto the final boss!

Stage 14

Despite being the epic finale to this run, the Demon Head (no comment) goes down without much of a fight. We can hit it as soon as it appears on screen during its descent, so it never even has a chance to attack us for most of the battle. 9 frames saved… somehow.

Ending

After the demon is downed, we finally get to reap the rewards of all those coins we avoided throughout the run! With only 44 collected across the entire game, this countdown is over in the blink of an eye compared to the old one. 240 frames are saved here, a satisfying final save for a TAS with so many hours spent on minuscule optimizations and singular frames. Thanks for sticking with us through this rambling, unfocused essay!

Unused Techniques

  • L+R - although pressing L and R together is useful in two or three places, where it maintains speed when jumping onto a ledge without dashing first, or sliding into a small gap while turning around, what was never useful in this route is the fact that holding it while moving off of a ledge allows you to hover that direction in midair indefinitely. Unfortunately, it’s impossible to keep dashing speed using this, and there are no gaps too wide to cross with faster methods.

  • Position Corruption - a strange glitch we accidentally discovered that corrupts Wario’s position and messes with the sprite loading process. It's done by constantly spamming Sea Dragon Wario’s flame and jumping at certain times and positions. The specifics of how it works are mysterious, and there's no consistency or predictability to it whatsoever (what a shock), but it’d likely save a lot of time in All Treasures, where you would actually use that powerup. This glitch is potentially very powerful - we confirmed through hacking that the elevators to the next stage are always there behind the lock, so being able to clip into them would save huge amounts of time in both AT and Any% (although we haven't been able to pull off this glitch in any rooms as small as the ones with the elevators in them, likely due to how little is loaded in them). We’ll test this more if we work on the AT TAS, but any help understanding how it works or how to trigger it would be greatly appreciated.

Potential Improvements

When you spend so long on a TAS like this, it can become hard to tell where potential improvements could come from. But in our opinion, there are two main things worth looking at for any future TASers of this game, besides just precise optimization. The first one is pretty self-explanatory - although we couldn't find ways to avoid any more coins without wasting time, it's definitely possible some clever movement could be discovered for a few of them.

The other is much less concrete - collision in this game is WACK. We only mentioned it once or twice in the per stage comments to avoid going onto even more tangents than we already did, but there's no consistency to be found here. You can be on the exact same unit on the exact same frame, but depending on when you entered the stage, or what movement you did beforehand, or even whether you're flattened out or have a powerup, you might collide with a tile, or lose speed from an enemy, or collect a coin, or any number of other things that wouldn't have happened otherwise. In a small number of cases, some of Wario’s moves can even act differently depending on whether you're facing left or right, but only in specific rooms. Now, you might be asking yourself, “doesn't this sound exactly like subpixels?” And it does. But after combing through RAM watch in search of anything that could possibly be a subpixel value affecting these outcomes, we came up with nothing. Obviously looking through the code would be ideal, but we weren't up to the task of doing that this time around. If anybody can learn the ins and outs of this game’s quirks, it would almost certainly save a decent number of frames.

Also, although we talked about it a few paragraphs ago, it's worth mentioning again that position corruption would be a huge timesave if we could clip through elevator doors; but as we said, it doesn't seem to be possible from our testing. Analysis of the game’s code might also help someone figure this out.

Special Thanks

  • Adelikat, for providing a baseline and creating most of the route we used throughout the run.
  • EZGames69, for the high-quality encode.
  • Trebor Almasy and TerraEsperZ, for their informative maps of the game.
  • Dangerless and vlackSR, for discovering the cutscene skip in Level 10, and their words of encouragement.
  • RabidYoshiPie, for alerting us to the existence and method of corner boosting, inspiring us to look into further improvements.

Potential screenshots: Frame 49125, 49127
adelikat: Judging
adelikat: Accepting for publication as an improvement to the published movie. Based on votes and viewer response, I am accepting this to the Moons tier.

Spikestuff: Publishing.


Similar submissions (by title and categories where applicable):