hi.
Introduction
Shantae: Risky's Revenge is the belated 2010 sequel to the relatively obscure 2002 metroidvania Shantae for the Game Boy Color. It features a bevy of technical improvements over the original alongside gorgeous pixel artwork, at the cost of being rather short.
TASing this game only recently became possible due to advancements in melonDS's DSi emulation. The same steps done in this submission for formatting the firmware were done here, so refer to that for more information.
Run Details
- Emulator used: Bizhawk 2.8.0/melonDS 0.9.3
- DSi Mode: True
- Use Real BIOS: True
- Firmware Start-Up: Manual Boot
- Aims for fastest time
- Takes damage to save time
- Heavy glitch abuse
- backdash
Techniques & Glitches
General Mechanics
The base moveset for Shantae is mostly similar to the original, with the addition of a backdash that Shantae can perform whenever she's on a floor. The item sub-menu is also accessible from the touch screen, allowing for swapping between abilities on the fly. Additionally, all items run on a magic meter instead of being limited in quantities.
For general optimization of movement, backdashing whenever possible is key. This means backdashing for a single frame, and then 18 frames after that to begin another one. A quirk of Shantae's movement (which relates to later bugs) is it takes her two frames in the air to turn around and three on the ground. Thus, whenever possible, turning is done at the end of a jump.
For optimizing attacking, beyond simply clever item management jump cancelling the end of a hair whip saves time, along with crouching and uncrouching on the ground to skip frames of the animation. This is primarily done in rooms where fighting is required to progress.
RNG Manipulation
Unlike the original game, RNG manipulation is quite a bit more limited. The only method readily usable is the creation of dust clouds via jumping and backdashing, which needs to be carefully managed to not lose time whenever possible.
Dance Falling
A carryover from the original, it's possible to fall from a ledge while dancing by walking off a ledge and dancing the same frame you would fall, although due to dancing pausing the game its usage is much more situational. For this run, Dance Falling is used to skip lengthy diving animations into the water, allowing Shantae to jump out much faster then normal.
Fireball Double Jumps (FBDJs)
A core technique of the run, FBDJs are done by aligning Shantae facing away from a wall, jumping straight up, and then facing toward the wall and using Fireball on the same frame. Doing this correctly causes the game to be confused, since technically speaking Shantae is partially inside the wall and the usage of Fireball cancels the normal ejection routine. This allows Shantae to jump again in mid-air, which allows for a few shortcuts.
Crawlspace Ejections
Due to an oversight, while in a crawlspace as base form attacking and then attempting to backdash immediately after results in the game getting confused on where to put Shantae, which often causes the game to place her in a 'valid' location where there is room even if said location would be out of bounds. This is used to save time here and there, and is a key factor in the any% route due to allowing for Wrong Warp.
Wrong Warp
Similar to how the 3D Zeldas are coded, many locations in Risky's Revenge are actually part of the same map, with objects being loaded and unloaded as needed. Coincidentally, many of the game's caves are connected to the Sunken Cavern, the final area of the game.
Thanks to a combination of a FBDJ and a Crawlspace Ejection, it's possible to get out of bounds in Polyp Cave and navigate directly to the final boss, skipping the need to obtain any of the game's Magic Seals and two of the three transformations. Due to the specifics of getting into the required crawlspace however, the Monkey transformation is necessary, requiring a great deal of Squid Baron's Labyrinth to be done first. Even with that caveat however, this saves well over 50 minutes in an any% run.
Nega-Shantae Quick Kill
The final boss, Nega-Shantae, is normally a rather lengthy affair that requires a great deal of preparation to be ready to defeat. However, due to a complex oversight, it's possible to overload the game's processing and cause the end of fight script to trigger much earlier then it's supposed to. This is frequently misunderstood to be a 1-frame trick involving getting hit and attacking Nega-Shantae on the same frame, but in actuality it's more related to how the game's memory is lining up at specific moments. Through experimentation I noted there were times where the glitch wouldn't work at all, and times where there'd be a multi-frame window for it to work. The base steps for the glitch however are necessary, meaning Shantae's back needs to be against a wall and Nega-Shantae needs to be hit. From there however, whether or not it will work is rather inconsistent. Regardless, this trick saves a few minutes.
Area By Area Comments
Intro
In order to avoid a second shopping trip later, I needed to manipulate 60 gems from these initial enemies, done via dust from backdashing and jumping. Due to this limitation in RNG manipulation, the battle ended slower then it normally would, however this later saves about 13 seconds from not needing to do an additional shopping trip.
Tinkertub 1
This fight uses a pretty simple pattern, where it'll expose itself for a barrel, then shoot cannonballs in the background before approaching Shantae and repeating the cycle. The speed in which the Tinkertub moves back into position is based on its proximity to Shantae, so care was done to avoid being too close at those points.
Leadup to Squid Baron's Labyrinth
Now free to explore, it's first required to save the game to remove an annoying roadblock, and then going to the shop for some items. It's very minor, but it's slightly faster to save first since leaving the shop puts you slightly closer to where you need to go later. In the shop, I purchase Fireball and Pike Ball. Additionally, when leaving shops (and most entrances) it's possible to skip Shantae's exiting animation by jumping and attacking as you reach the loading zone.
The process to unlock Squid Baron's Labyrinth mostly goes without incident, with Pike Ball used to take care of smaller enemies without stopping, and jumping to avoid larger ones. One thing to note, holding backdash when sliding off a ledge lets Shantae maintain the backdash state without being read as in-air, which allows for longer backdash chains without needing to turn around again after falling. Since all the shopping was done earlier, Wobble Bell lives. For now.
Squid Baron's Labyrinth
Upon entering the main chamber, I use two FBDJs to climb the area from the right edge rather then circling around, which saves a few seconds. The second jump for that is actually a double frame perfect, since you not only need to get the jump but also need to be at the exact correct height to not bump on the upper edge. When moving about, I often cancel and redo Pike Ball in order to rest its rotation, which allows it to hit objects and enemies at the exact right times so I don't need to slow down. When approaching the first key, I use a few Crawlspace Ejections to save some time, and backdash the same frame I collect the key to save time on movement. From there, the labyrinth is played more or less normally until obtaining Monkey Form, after which I immediately leave and do a lengthy backtrack to Polyp Cave to set up the Wrong Warp.
Leadup to Polyp Cave
When approaching the cave, I need to minimize the amount of time I'm in Monkey Form since backdashing is faster. Therefore, I do a FBDJ up the cliff to delay transformation for a bit, and also detransform early once it's possible to clear the platforms as base form.
Polyp Cave
The big one, the wrong warp. I do a FBDJ to get to the higher block, and then transform into Monkey and jump a specific way to get into the crawlspace. From there, I use a Crawlspace Ejection to get out of bounds, and then navigate carefully to the warp to Sunken Cavern. Fun fact: the dark room after this is like that normally.
Tinkertub 2 & Nega-Shantae
The second Tinkertub fight is more complicated due to it having the ability to walk forward and shoot an anchor, both of which would lose time. I carefully manipulate RNG before and during the fight so its first actions are always a barrel. Beyond that, most of the fight is waiting for cycles to end.
Nega-Shantae as explained before is defeated by confusing the game's memory, lasting less then 4 seconds. After skipping a few cutscenes, the game is over!
Potential Improvements
- More efficient luck manipulation.
- A way to wrong warp without the necessity of Monkey Form (would save 8+ minutes).
Suggested Screenshot
Frame 48825 (Polyp Cave FBDJ)
Frame 55154 (Tinkertub 2 Fight)
ThunderAxe31: Claiming for judging.
ThunderAxe31: Thanks to the tricks that allow to get out of bounds, the author skipped much more of half of the game. As such, I'm adding the "wrong warp" label and accepting as fastest completion.
fsvgm777: We use "warp glitch" for wrong warps like this one, so changing the branch to "warp glitch" and processing.