Hetfield90's Mega Man X2 TAS in 31:15.15. It is 1900 frames(~31.5 seconds) faster than the published run in terms of actual gameplay improvements, and 1453 frames(27.3 seconds) faster outright due to disparities in lag/load time emulation as well as frame rate between Snes9x 1.43 and BizHawk. Emulator used was BizHawk 1.9.4.
Goals
- Uses no passwords
- Aims for fastest time
- Abuses programming errors in the game
- Manipulates luck
- Takes damage to save time
Overview
For as long as I've been involved in Mega Man X2 speedrunning, it had been largely taken for granted that the fastest method of completing the game involved obtaining the Shoryuken, and such has been done in RTA and TASing of this game ever since Blechy's TAS from 2004. But while I was on Gator's stage in the making of this TAS (at this point still collecting items for Shoryuken), FractalFusion brought it to my attention that the two routes could actually potentially be very close. After testing the differences between the two routes using known any%/low% strats, I concluded that it was ~5 seconds faster to forego obtaining the Shoryuken. However, over the course of making this TAS, through the development of new strats specific to this route which acquires only the buster upgrade, the time saves of the route reached as high as ~18.5 seconds. More details on the differences between the two routes can be found in
this table.
Now what was previously the category most similar to real-time gameplay within the SNES Mega Man X games, Mega Man X2 Any% now is arguably the least. Because of the nature of Shoryuken cutting out a substantial amount of RNG and difficult execution, the route/strats in this TAS will likely never be attempted by any real-time speed runner seriously intending to compete with top Shoryuken times.
Tricks used
- Charging during projectile travel time - Creating distance between X and a boss before you fire an uncharged shot allows you to gain a head start on your next charge equal to the projectile's travel time. This makes some pattern of alternating between charged and uncharged shots the fastest way to kill the majority of bosses in the SNES X games.
- Shooting while remaining charged - This can usually be done by pressing shoot during the load time before a boss fight.
- Storing charges - By pressing shoot during a period where X cannot actually fire(door transitions, wall jumps, pause menu, etc...) after your first charge shot has already been expended, you can store the secondary pink charge shot while starting a new charge.
- Luck manipulation - Creating dust sprites by sliding down walls, killing more(or less) enemies, and shooting Bubble Splash were the main methods of RNG manipulation used in this run.
Stage Info
Table of time saved per stage
Here is a simplified version of the of stage by stage comparison table which discounts lag and load time disparities between Snes9x 1.43 and BizHawk. The detailed version can be found
here. Obviously the large time saves and losses can be attributed primarily to route differences, but this was done mainly to measure emulation differences.
| Hetfield90 Frames | Published Frames | Frames Saved | Time Saved(approx.) |
---|
Intro | 1605 | 1610 | 5 | 0s |
Sponge | 3392 | 3715 | 323 | 5.5s |
Gator | 5221 | 5462 | 241 | 4s |
Stag | 3004 | 3508 | 504 | 9.5s |
Moth | 5012 | 6757 | 1745 | 29s |
Centipede | 5079 | 5720 | 641 | 10.5s |
Snail | 3010 | 5560 | 2550 | 42.5s |
Ostrich | 2581 | 4058 | 1477 | 24.5s |
Crab | 3059 | 3589 | 530 | 9s |
X-Hunter 1 | 3101 | 3137 | 36 | .5s |
X-Hunter 2 | 2329 | 2330 | 1 | 0s |
X-Hunter 3 | 2823 | 3277 | 454 | 7.5s |
Boss Rush | 6934 | 2107 | -4827 | -80.5s |
Sigma Stage | 5001 | 3221 | -1780 | -29.5s |
Stage Selects | 945 | 945 | 0 | 0s |
Total | 53096 | 54996 | 1900 | 31.5s |
---|
Intro Stage
- Shooting a random buster shot before the first ladder avoided a lag frame. This phenomenon was extremely prevalent in X1, but interestingly enough this was the only time it was used in this TAS.
- I had to take some really specific movements to avoid lag in the Giant Mechaniloid fight, but 3 frames at the start were unavoidable.
Wire Sponge
- Better sub-pixel positioning to set up higher ladder gap jumps and the left wall jump after the second ladder were the only two real improvements on this stage.
- I delayed killing Sponge by 7 frames because of the game's global timer and how it corresponds to recurring screen shakes in Gator's stage and the arm upgrade capsule.
Wheel Gator
- The game has a global timer which repeats every 64 frames and is responsible for a couple things(namely the interval of screen shakes in Gator's stage, the duration of Centipede's tail spins, the speed of Snail's spiral, and when dust sprites from dashes/wall slides occur). This global timer is particularly annoying, because it can't be manipulated in any way, and you simply have to work around it. For Gator's stage, every time the global timer resets back to 0, it initiates a screen shake. The duration of this screen shake is then determined by the RNG value on that frame, which can be anywhere between 32 to 64 frames, and for whatever reason, capsules in this game do not open until the screen is perfectly centered. Unfortunately, the only way to optimize this in routes that start Sponge>Gator(whether you are collecting the upgrades in Sponge's stage or not) is to manipulate a 32 frame screen shake just before you reach the capsule(namely through dust sprites from wall slides during the Sponge fight), and then delay your movement so that you reach the capsule the frame after said screen shake ends(so that you can get your toe in the capsule during the dialogue with the strike chain). I had to delay 12 frames in the buster upgrade-only route, and FractalFusion had to delay 9 frames in the Shoryuken route.
Flame Stag
- Flame Stag comes after Gator instead of Crab(which would have been weakness order), to get the X-Hunters off minimap during stage selects sooner, and to have Sonic Slicer to kill the giant fish in Crab's stage later on.
- The charged Spin Wheel to kill the all of the flying squirrels in the final volcano climb is a pretty cool strat shown to me by JRTA'er Gameopoona which I had never thought of before. It allows you to take more optimal movement than climbing the right side and Strike Chaining across.
- 60 frames were saved over the published run on the Stag fight. By forcing him to come down at a specific point in his climbing pattern, you are able to make better utilization of his i-frame reset from throwing fireballs.
Morph Moth
- With no helmet upgrade in this route, ammo drops had to be manipulated half-way through the stage to facilitate more liberal Speed Burner usage.
- While doing the Morph Moth refight, I learned that taking damage in the first phase (so that you are flashing while the junk is on screen) actually reduces a lot of lag, and was able to hex edit this into the first fight to save 13 frames. This made all of the subsequent segment start and end frames inaccurate in my detailed table, but this does not matter since it had no effect on the durations of the segments.
Centipede
- I overlooked that you can wall jump while box zipping(as opposed to when you reach the wall on the other side) on the first time through the stage in this run. 3 frames can be saved by doing this on the last box before Chop Register.
- I didn't discover the infinite tail spin glitch on Centipede until doing the refight of this run. 34 frames can be saved here by implementing the glitch. Here is a bk2 [dead link removed] of what the fight would be like].
- A stored charge shot was used at the beginning of this fight to take away the long shooting animation of the first pink charge shot.
- If you fire a Silk shot on the very first frame you reach a pink charge, you can sometimes hit Centipede for 4 damage without taking off his tail. For whatever reason, though, this seemed to work only once on this fight and not at all on the refight.
Snail
- The Crystal Snail miniboss skip can actually be performed via 6 different methods on BizHawk, SNES, and VC. 4 of these even work on Snes9x 1.43. Here is a video [dead link removed] of the various skip methods being done on both emulators if anyone is curious. The likely reason for the possibility of the glitch is the camera lock not initiating in time due to fast movement speed and/or sprite overload.
- FractalFusion discovered that jumping after firing a pink charged buster shot while dashing glitches out your hit box to retain dash height indefinitely as long as you don't stop moving, touch a wall, or dash. This allows you to walk under the large crystal and jump to zip outward when it reaches a certain spot. This trick saves about half a frame.
- The speed at which Snail does his spiral before the fight starts is determined by the global timer. It varies by 30 frames from best to worst, and the pattern repeats every 8 frames. I didn't notice this until I was hex editing some things in the boss rush, so I was able to hex edit the best pattern into the refight, but unfortunately the first fight got the worst pattern.
Ostrich
- Grabbing the ledge before the bike after the final ladder clip was just barely possible. The first ladder clip broke even, and clipping through the 2nd ladder would have lost frames due to lag.
- Starting with buster on Ostrich, I was able to save 16 frames on this fight over the published run. Originally I tried to keep him far away from me to get an off screen explosion, but then I learned that off screen explosions do not actually reduce any lag in X2. So instead, I kept Ostrich as high up as possible so that his i-frames reset sooner by hitting the ground sooner after being frozen.
Crab
- I didn't think to use Crystal Hunter in the final climb until Hidaigai pointed it out to me after seeing my WIP, which saved a couple frames.
- gameO Shiki Energy Bon-Bon Kani Goroshi: After firing a charged Spinning Wheel, the core of the lingers in the place you fired it for some amount of time(although it is invisible). By positioning it at a specific height over Bubble Crab's head, he will take damage from the bottom petal and then jump into the core to take a second instance of damage just before it despawns. I started with a stored charged shot because you can't swap off buster fast enough to place the first uncharged Spinning Wheel so it despawns before you would place the subsequent charged wheel to do a double hit. Since a stored charge shot with a tier 2 buster does 5 damage, only 1 charged wheel double hit was needed. Thanks to Gameopoona for coming up with this strat.
X-Hunter 1
- Since there are several walls in this stage which are just barely too tall for X to clear, sometimes it is fastest to wall jump at the top of them and then use Speed Burner to eliminate the time that you would be moving away from the wall if you had allowed the wall jump animation to continue its full course.
- The bubble fired at the end of the boss hallway helped to manipulate Violen's pattern. He absolutely had to do a triple jump pattern for 2 reasons: the ball and chain move causes immense amounts of lag, and so I could end the fight on top of the block for a faster warp-out.
X-Hunter 2
- Air dash is actually pretty useful on this stage, so I lost almost a second during the stage itself over the published run, but part of the time loss was to set up the charged Magnet Mine that takes out 2 of Serges' cannons before the fight even starts, where I saved a second over the published run. Unfortunately, since the charged Magnet Mine spaces out the destruction of the cannons, only 2 platforms are left during the fight, which were too far apart at the end of the fight for me to climb to the high one to get a shorter warp out.
X-Hunter 3
- Neo-Agile was a pretty difficult fight to manipulate. I manipulated him to be near the wall for the first buster shot with Bubble Splash during the spike section at the end of the stage, and every subsequent buster shot required even more specific manipulation. Not only did the interval between his actions needed to be manipulated, but they also needed to be manipulated to be him playing Tetris. He then needed to be manipulated to break the girders at a specific time so that I could take damage, fire the charged buster shots from a wall slide inside of his hitbox as soon as I attained a tier 3 charge but before the girders fell too low for me to hit him. Timing of the last one occurred so that he died just before he was able to scroll the camera up, giving me a shorter warp out.
Boss Rush
- Flame Stag - I don't even want to talk about how painfully annoying of a weapon Bubble Splash is to TAS with. Not only are the speed, duration, and trajectory of the bubbles based on RNG, but they manipulate boss RNG themselves when you fire them. I started my charged during the warp in at a specific time so that I would reach t3 charge and stop firing bubbles as soon as the last one that hit him before the first charged shot was fired. By firing it from far away I was able to reach a full t4 shot before his i-frame reset from the fireball throw occurred. Another annoying part of TASing this fight is that you want to fire the buster shots from wall slides to remove the shooting animation time, but shooting bubbles forces Stag to throw fire balls which resets X's i-frames and interrupts his jumps, so it is almost impossible to jump over him to get to the wall closest to him. I managed to get around this on the final shot by expending my first charge shot by taking damage at a specific time and letting go of shoot during the knock back animation.
- Bubble Crab - Spinning Wheel is almost equally annoying as Bubble Splash to TAS, but for different reason. For whatever reason, Spin Blade doesn't start dealing damage until 13 frames after firing it, and then only attempts to do damage every 11 frames thereafter. Because of this awkward interval, Spin Blade would normally only damage Bubble crab every 66 frames, and you would lose 6 frames on each hit. However, by manipulating Crab's movement so that he walks out of the wheel, allowing it to fall for a specific number of frames before he throws up his pincers, catching the wheel again, the wheel's damage interval is thrown out of whack and can actually damage him every 60 frames.
- Centipede - The infinite tail spin glitch is pretty simple, so simple that I'm amazed no one has ever found it before. All you have to do is dash jump at a wall and slide down it while the tail pieces are homing in on X and they derail. The more you come into contact with walls throughout the fight, the more their trajectories change until they will eventually sync back up around X.
- Sponge - This fight has to separated by damaging him to get him to 10 health as quickly as possible, then killing him from there as quickly as possible without knocking him off his vine and forcing desperation mode. Charged Sonic Slicer double hits are the fastest way to damage him at 10 damage a piece; you can fit two in during phase 1 with the addition of a Speed Burner, uncharged slicer, or buster shot. You can't double hit him in phase 2 without knocking him off his vine, so a magnet mine(1 damage) was used to bring him to 5 hp while allowing a charge as soon as possible for a charged slicer single hit to finish him off.
- Gator - The first chain was fired on the last possible frame to reduce lag.
- Morph Moth - The bubbles in between the two phases were manipulation for Neo-Sigma.
- Capsule room movement - Using Strike Chains to get to the top 2 capsule causes a lot of lag on BizHawk, so I opted for Speed Burner instead.
Final Stage
- Zero - Starting with speed burner not only hits Zero sooner than buster, but it allows you to use some more optimal Strike Chains/Speed burners during the stage as well. The subsequent buster shot can also damage Zero while he's in i-frames to save even more time. The fight ends when Zero reaches 1 hp, so a 3 damage buster shot is worth two 2 damage Speed Burners. I tried as hard as possible to make it look like Zero has an AI in this fight since all of his attacks are strictly positioning based. You can literally stand just outside of saber range while jumping over his green shots and spamming Speed Burners into him every 60 frames for the whole fight. You want the fight to end with X near the left wall and Zero near the right, otherwise they will take time walking into the positions before Zero dashes to X and starts his dialogue.
- Neo Sigma - Even with ample time to fire Bubble Splash beforehand, this fight was a nightmare to manipulate. Every time Sigma leaves slashing animation, his i-frames reset, so you want him to literally do this for every single attack throughout the fight(the final action can be anything but Kamehame which turns him invincible). Dude nice quadruple Sonic Slicer hit.
- Sigma Virus - This fight wants to be very laggy on BizHawk, but it can be executed without lag by using only point blank Strike Chains and avoiding pressing 3 inputs simultaneously on any frames that a Strike Chain, ammo drop, laser, or enemy was out. FractalFusion redid the end of this fight to save 8 frames over what I previously had by reducing lag and getting a quicker head rotation after the fight was over.
Possible Improvements
- Charged chain into a wall jump instead of ground jump at the start of the final climb in Stag: 5 frames.
- Use the infinite tail spin glitch on the first Centipede fight: 34 frames.
- Wall jump on the first possible frame during the last block zip before Chop Register: 3 frames.
- First Snail spiral: 30 frames.
In Closing
I am glad I made this TAS since the route is something so different from what has ever been seen in TASes and RTAs before, but I don't think I will try to improve it any time soon unless some more optimizations are found, despite some already being known that weren't feasibly hex-editable into this run. Since this TAS obsoletes the Shoryuken run, my next submission will be a 100% run which collects the Zero parts in addition to Shoryuken.
People who I owe thanks for helping me complete this run:
- FractalFusion: For his published any% and low% runs, making a different Lua script for every single difficult boss fight in this run, coming up with the strats for multiple end game fights (Neo-Agile, Sponge refight, Zero, Neo-Sigma, Sigma Virus), watching my stream and offering input every step of the way during the TAS, and providing his encodes.
- Gameopoona: For coming up with a lot of strats in RTA which were improvements over the published run and ended up being used in this run.
- Hidaigai: For watching my WIPs and notifying me of improvements that could be made.
- The"Half a Frame"Sid: For being a genius ahead of his time.
Screenshot Suggestion