Submission #4867: Hetfield90's SNES Mega Man X3 "100%" in 42:50.82

Super Nintendo Entertainment System
100%
BizHawk 1.11.0
154503
60.0988138974405
54746
Unknown
Mega Man X3 (USA).sfc
Submitted by Hetfield90 on 10/4/2015 2:31:32 AM
Submission Comments
Hetfield90's Mega Man X3 100% TAS in 42:50.8. Emulator used was BizHawk 1.11.0.

Goals

  • Uses no passwords
  • 100% item collection
  • Aims for fastest time
  • Abuses programming errors in the game
  • Manipulates luck
  • Takes damage to save time
  • Contains speed/entertainment tradeoffs

Overview

Although this site already has a "100%, Best Ending" run, I felt that a "true" 100% run which collects the Z-saber in addition to the Golden Armor possessed enough gameplay differences in the mid-late game to merit having its own TAS. As far as branch names go, if this run gets published, I think it would make the most sense to leave this run as "100%" and take the 100% out of "100%, Best Ending" and call it either "Best Ending" or "Best Ending, Max%", since a run which does not collect the Z-saber is technically not 100%.

Tricks used

  • Neon Jumps - Shooting a tier-3/4 buster shot and jumping on the same frame during an air dash allows X to jump mid-air, since the game registers X as being on the ground during this frame.
  • 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.
  • Luck manipulation - From best to worst: firing Acid Burst, creating dust sprites from wall slides, firing a t2 buster shot, killing more/less enemies, using Triad Thunder, firing Frost Shield, waiting frames.

Stage Info

Since 5 of the 8 Maverick stages are the same across both categories, some of the stages are compared to the published best ending run in these notes.

Intro Stage

  • 2 frames were saved over the best ending run by eliminating a double kick in Zero's climb as well as having a slightly more optimized Maoh fight.

Tunnel Rhino

  • 4 frames were saved during the stage from more optimized movement, and 19 frames were saved on the boss fight by eliminating all consecutive charged shots.
  • It wasn't until much later in the run that I realized that the tier-2 buster shot advances the RNG sequence. If I remember correctly, I delayed my movement by 3 frames to manipulate the optimal pattern from the final purple tank in the stage, which could have possibly been manipulated with buster instead.

Blizzard Buffalo

  • 12 frames were saved by slope jumping to the left wall before the 2nd ladder and air dashing after the final slope(to stay airborne with slope speed longer).

Neon Tiger

  • 52 frames were saved in the first half of the stage by taking a different route to the E-tank, eliminating a wall jump before the arm parts capsule, letting go of the ladder before the miniboss by firing a neon shot instead of hitting jump(which starts X's fall at the downward ladder climb speed of -752 sub-px/f instead of the standard 0), and a more optimal miniboss fight.
  • It would have been possible to do the neon release on the ladder after Bit's room if it was possible to move him to another stage. There is a double neon jump that saved more time on Beetle's stage which was not possible if Bit was present(you would need to be charging instead), and you run into problems with Frost Shield ammo if Bit shows up on Seahorse's stage. The only enemies between Bit's and Seahorse's rooms that drop ammo are the missile guys at the end of the stage which cannot drop large ammo, have abysmally low drop rates on small ammo, and I would have needed to get 4 of them to fight Bit there.

Gravity Beetle

  • 8 frames were saved through minor movement differences, and only doing one neon jump in the short climb after the elevator(more frames were saved in lag reduction but I didn't take this into account because of emulator differences).

Toxic Seahorse

  • Only 1 frame was saved on this stage because of having to take extra lag reduction measures being on a more accurate emulator.

Blast Hornet

  • 2 frames were saved in the first half of the stage with slightly different movement, but more time was saved in lag reduction.
  • Shooting Acid Burst everywhere was to manipulate Byte to appear on this stage. Get used to this, because Acid Burst trumps all other forms of RNG manipulation in almost every way(aside from dust sprites from wall slides during boss fights), and is used to manipulate almost everything in the remainder of the run.
  • 30 frames were saved on the boss fight with a new strat. Starting with the two 2-damage charged shots from the t4 buster charge flips the charged shot/uncharged shot alternation around so you will end the fight with an uncharged shot instead of a charged one like on Rhino or Buffalo if you don't do something about it. Ending with an uncharged is inefficient since it wastes the uncharged's shots usefulness of allowing you to charge during it's travel time for an earlier subsequent charged shot. Agwawaf deals with this by firing 3 consecutive charged shots at the end of the fight, which is only a few frames faster since you cannot charge while another charged shot is on screen, and they take a while to disappear even after hitting the boss. The standard RTA strat for this fight, invented by The"Shoryukenless"Sid himself, is to fire uncharged Gravity Well to charge up to t3>catch it then fire a charged Gravity Well>pause cancel the animation>hit Hornet with any weapon for one damage after his i-frames reset from hitting the floor, then fire an uncharged Gravity Well to brew up another charge and repeat the cycle. Over the course of infinite hp, the buster/splasher(or acid) combo deals more DPS than the RTA Gravity Well combo, but since the Gravity Well combo deals an odd amount of damage, using it once will flip the buster/splasher combo around so you end with a charged shot. In addition to this, the Charged Gravity well had to be fired from as high as possible, since it does not damage Hornet until it leaves the screen, and the Gravity Well combo had to be used at a specific time during the fight, his stinger moves had to be manipulated in certain directions, and he had to be manipulated to return to a specific side of the room after each stinger and Gravity Well, all so that Hornet would die at the lowest point of his figure 8 pattern since his explosion does not start until he falls to the ground. This fight took longer to optimize than the entire rest of the TAS up to this point.

Volt Catfish

  • 6 frames were saved during the stage from minor movement optimizations.
  • In retrospect, it would have been 2 frames faster to fight Byte on this stage instead of Hornet(you have to wait 2 frames for a charge to kill the enemy after Byte's room in Hornet if you fight him there). The reason I didn't is because it's slower to fight Byte on this stage in RTA because you need a charge shot to kill the enemy after his room, but the TAS strat involves neon jumping over him, and I overlooked the fact that you can barely get charged in time for it after fighting Byte.
  • 48 frames were saved in the fight by starting phase 2 sooner and subsequently getting a more optimal i-frame reset. This was done by calculating the amount of time it takes before X can first fire the final drill as well as how long each of Catfish's actions take from each of his positions in the room, and finding the exact right permutation of these actions(which also had to be in the correct positions) that cause his phase 2 i-frame reset to occur as soon as possible after X is able to fire the final drill. Through the combined efforts of FractalFusion, Nrgzam, and myself, we were able to find a combination of actions/starting positions which had a total framecount equal to the amount of time it took to fire the earliest possible drill, achieving a perfect i-frame reset.

Crush Crawfish

  • 300 frames were saved over the any% runs by visiting Vile's secret stage in Crawfish's stage instead of Catfish's. According to FractalFusion, this was due to the assumption that exiting Vile's stage ported you to the start of the stage and not the nearest checkpoint.

Vile

  • The falling junk in the first climb was a nightmare to manipulate, but after hours of hex-editing I was finally able to pull it off.
  • The concept behind the Ray Splasher DPS is the same as buster on the first few bosses(create as much distance as possible for your uncharged shots so they can be fired as early as possible) but with a few twists. Doing a vertical dash cancels an uncharged Ray Splasher and allows you to start firing another one soon after, and firing 2 shots like this in between charged Ray Splashers gives you enough time to not only gain horizontal distance, but vertical distance on the boss as well to utilize the final Ray Splasher shot's diagonal trajectory. Because of ammo constraints, I did not have the liberty to use 2 uncharged Ray Splashers in between every charged one, but even firing one uncharged splasher in between charged ones is faster than any other alternative. You also have to take damage as you fire each charged Ray Splasher in order to interrupt the long animation. Also due to ammo restrictions, I had to fire two buster shots during the middle of the fight, but by taking a hit during the transition I was able to regain control of X and charge up without wasting any time. The buster shots were used in the 2nd phase because the 2nd phase is essentially an autoscroller(since you cannot hit Vile with charged Ray Splasher when he is on the ground so he will not die until he jumps into the final charged Ray Splasher), and I tried every possible strat that could end the fight with an uncharged Ray Splasher(since that can hit him while he's on the ground), but everything else was too slow to kill Vile before his final jump. Ending the fight with a charged Ray Splasher allows you to use more Ray Splasher during the fight, since it consumes 2.5 ammo per use but can be fired with even .5 ammo remaining. Using these ammo conservation strats during the autoscrolling phase 2 allowed me to deal maximum DPS during phase 1, starting with a charged Ray Splasher and using 3 others which were preceded by 2 uncharged Ray Splashers each. I also had to manipulate Vile's rime armor dash durations to keep him as far away as possible(so I could get more more travel time on uncharged shots) while still forcing him to attack me immediately after each charged shot(and especially during the transition).

Revisits

  • 12 frames were saved in the Rhino revisit from slightly more optimized movement.
  • Normally it is faster to do back and fourth wall kicks when two walls are close enough together(since you eliminate the 1 frame that X is frozen in air while changing poses to regain control 12 frames after wall kicking), but wall jumping this quickly caused too much lag while charging a Triad Thunder with the boulders rolling down below at the end of the stage.

Doppler 1

  • Parasite Bomb was used on the 2nd missile guy to prevent him from firing a missile that causes lag.
  • All of the acid you see from after the miniboss onward was to manipulate Mosquitus' death animation in the next stage.
  • For some reason, unlike in X1/2, picking up health midair resets your falling speed, so I did not waste any frames by not jumping earlier while I was picking up the health before the Golden Armor capsule.
  • I get 2 free Hyper C. neon jumps after the obtaining the Golden Armor since I have to take damage from Ultima Weapon to cancel charged Ray Splasher animations anyway(taking damage refills Hyper C.). Neon jumps give the same 5px/f initial vertical velocity as wall jumps, but have a much quicker animation(and no mid-air pose change).
  • Since uncharged Ray Splasher deals 3 damage to Ultima Weapon(instead of 2 like on Vile), I can only set up one of the charged Ray Splashers with a double uncharged. Still, it is faster to use 4 charged shots on Ultima Weapon than any lower amount.

Doppler 2

  • Doing a double neon to get to the left wall leading out of the water pit and calling Zero is over a second faster than calling him earlier and climbing the right wall like in any%, despite the fact that you have to wait for the green charge during the Mosquitus fight. This wait time isn't pure time-loss, since you are baiting Mosquitus to the right during it, resulting in less travel time for X after the fight.
  • Mosquitus death animation is comprised of him flying in a random direction every 4 frames. He has a 3/4 chance of flying towards Zero, and a 1/4 chance of flying in one of 8 directions separated by 45º angles. In order for him to land on Zero and blow up, he needs to be on the same X-axis pixel as zero then choose to either fly towards Zero or straight down. Thanks to FractalFusion's disassembly of the fight, I was able to find a long enough string of RNG values on every 4th frame that homogeneously yielded "towards Zero" patterns for the duration of his entire descent, and after eroding Doppler's entire fortress with a sea of acid I was able to reach it.
  • The Doppler Octopus explosion skip is still something that is a bit of a mystery to me. After practicing it hundreds of times in RTA, Luiz Miguel and I concluded you have to make the first Helit in the spike wall climb reach an altitude about half way up the climb(which is expedited by baiting him to shoot two missiles, increasing his vertical velocity by a substantial amount), and then kill Doppler Octopus with the damage over time effect of the ranged Z-saber. I pretty much just applied that to this run and it worked, but there was nothing I could glean by looking at the game's memory that would suggest the Helit in question is actually related to the explosion skip. He leaves the game's active memory when you either kill him or reach the first boss door, so I'm not really sure what to say.
  • The sprite glitch during the skip is the result of vertical dashing as the fight ends. Doing this delayed the stage fadeout by 87 frames compared to landing on the ground and listening to the victory jingle, but everyone I asked said I should include it as a speed/entertainment tradeoff.

Boss Rush

  • Routing the boss rush was a delicate balance of taking damage to refill Hyper C. while using it at optimal times, and efficiently wasting the preliminary shots before saber(which is heavily positioning based for both X and the boss), since you cannot use the saber until both of these shots have left the games active memory.
  • The most important part of the saber rush is to never fire the first corkscrew shot from the green charge, since even when it is no longer visible after hitting a boss or leaving the side of the screen, it stays in the game's active memory for a disgustingly large number of frames. This is avoided every charge by taking damage either 20 frames before reaching each green charge so you can waste corkscrew shot without firing it by releasing shoot on the frame before you regain control after the 21 frame knockback duration, or ideally less than 20 frames before reaching the green charge if you can take damage near a wall since pressing the direction towards the wall while up against it will cause you to regain control at any point during the knockback as well as allow you to fire the 2nd shot with a faster animation. The secondary charged shot cannot be wasted in this manner since it is a press shot and not a release shot, so it must be fired off screen from as close to the wall as possible(ideally against the wall for the faster animation). As for the Hyper Chip, both of its preliminary shots are press shots, so neither can be wasted in the same manner as the charged corkscrew shot. Therefor both are handled by being fired into the boss's i-frames after being hit by a saber. As a result, Hyper C. could never be used to open a fight, meaning I had to route each Hyper C. combo to reach a full Hyper C. meter in the middle of the fight on the final damage boost before using it.
  • The second most important part of routing of this boss rush has to do with the interaction of the Hyper Chip with the body armor and bubble shield and how this plays into health management. The way I understand it is that Hyper Chip is intended to be refill at a rate of .25 per each point of damage that a damage source would deal to a completely unarmored X. Body armor reduces X's damage intake by half, and the bubble shield activates reduces the next damage source even further(I'm not sure by how much, but it seems like nothing in the boss rush does more than 1 damage after bubble shield reduction aside from a ball from Beetle that has increased in size twice). Note that while Hyper C. can increment in decimal values, X's health cannot decrement in decimals, so any decimal value that he receives in damage is rounded up(which always is calculated after all damage reductions). This means that if you receive a source of damage that would deal 1 damage to unarmored X, you will still take 1 damage even with body armor and bubble shield reductions, but only gain .25 Hyper C. Conversely, a hit that deals 4 damage to unarmored X will be reduced to 1 damage with body armor+bubble shield but still give you a full 1 point of Hyper C. Due to X's finite amount of hp during the rush, you want to be as efficient as possible in the types of damage sources you take to ensure you're getting as much Hyper C. ammo per point of damage you are taking.
  • Making matters worse is the fact that the enhanced bubble shield from the Golden Armor glitched and works exactly the opposite of how it is supposed to. The unenhanced bubble shield reduces one instance of damage then turns off, so you are effectively able to reduce every other hit with it. The enhanced bubble shield is supposed to activate for 5 seconds after X receives damage and reduce all subsequent instances of damage during those 5 seconds. After activating, however, the enhanced bubble shield not only reduces only one instance like the unenhanced shield, but the graphic stays up for the entire 5 seconds preventing the shield from reactivating during that time. Because of this glitch, the least amount of damage I was able to take while refilling 24 Hyper C. ammo I used during the rush and Doppler Octopus fight was 32.
  • As for the final route, more on how I arrived at it can be found in these tables. My first attempt(in the top table) involved picking up 8 health from the thing you warp on top of in the middle of the capsule room halfway through the rush, which cost 46 frames. Aiming for maximum damage/H.C. refill ratio in the second attempt(bottom table), put me at either taking 32 damage during the rush and dying to Doppler, refilling 4 hp after Hornet's fight at the cost of 30 frames, forgoing a H.C. combo at the cost of nearly 3 seconds, or taking a damage boost from a missile guy in the final stage at the cost of 18 frames. Obviously the 4th option was the best of the 4, but I am still salty I had to resort to this because of the "enhanced" bubble shield glitch. As for which bosses H.C. was used on, Doppler Octopus was the most obvious choice so that I could immediately start refilling on Hornet(I wouldn't have been able to get in this many H.C. combos otherwise). Catfish was the second most obvious since his damage/H.C. refill ratio is atrocious. Crawfish and Seahorse were not necessary to saber at all because of their i-frame glitches, and Rhino was not a viable Hyper C. candidate since there was no way to prevent him from slamming the wall at the one time during the fight when you needed to use it with any permutation of his actions(touching the wall during the screen shake causes you to lose control of X and you need to touch the wall to dump the preliminary H.C. shots quickly). This left Buffalo, Beetle, and Tiger as the remaining H.C. candidates, where Buffalo was eliminated because he is the furthest away from the wall of the 3 bosses when you need to dump the preliminary shots.
  • Attacking Dr. Doppler immediately will trigger a shield that causes him to regenerate hp, so I needed to wait for it to go away before attacking. Taking damage the frame after my first saber hit him allowed me to start charging for the next one immediately, where I otherwise would have had to wait for the saber to disappear first. This can be used to save frames on any saber, but only if you can waste the preliminary shots before the fight since doing so during the fight requires taking damage as well.

Final Stage

  • As stated in the Boss Rush section, taking damage from this missile guy was smallest time loss(18f) I could sustain to facilitate a 4th Hyper C. combo during Doppler 2/Boss Rush section. Each Hyper saves nearly 3 seconds, so this was well worth it.
  • Taking damage from Captain America's shield was necessary not only to finish refilling H.C. for the final fights, but to dodge the fireballs with i-frames as well.
  • There are 3 different speeds at which you can kill Captain America: the fastest being with the backwards saber slash, second fastest being a front slash, and the third fastest being the saber projectile. Inversely proportional to each strat's kill time is the amount of time you spend walking over to the left side of the room after the fight. The backslash made the walk take too long, and the DoT of the saber's projectile took too long to finish Cpt. America off, but the front slash achieved a middle ground which made it the most optimal strat.
  • Dude nice quadruple neon jump on Kaizer Sigma.
  • While BizHawk's lag emulation is much better than Snes9x's on segments with heavy cx4 chip usage, it is still far from console accurate. As such, I was able to achieve a completely lagless Sigma Virus climb through much trial and error and random movements.

Possible Improvements

  • Use t2 buster to manipulate the purple tanks in Rhino's stage. (potentially 3 frames)
  • Fight Byte on Catfish's stage. (2 frames)
  • Fight Seahorse before Tiger on the boss rush so you can go through his capsule. The damage boost in his fight can be moved to Catfish instead. (2 frames)

In Closing

I'm glad to finally have made a TAS of this category since it's a popular RTA category and one of my favorites to play in the X series, and I hope people enjoy the run.
People who I owe thanks to for helping me complete this run:
  • FractalFusion: for writing the Lua scripts that I used, disassembling the Mosquitus death animation, and making his encode.
  • Agwawaf: for his published any% and best ending runs which I used as references for this run.
  • Nrgzam: for helping with finding the optimal Catfish pattern.

Screenshot Suggestion(frame 124556)

Obviously the only viable screenshot.

ars4326: Claimed for judging!
ars4326: Hello, Hetfield90. Overall (and as you've been demonstrating, this past year), outstanding work here in finishing another Mega Man X run! The optimizations were a treat to watch (especially the use of 'neon jumps') and the added acid bursts throughout created an extra bit of personality, as well (despite, functionally, being there to manipulate RNG). The Doppler Octopus fight, additionally, was an added surprise and enjoyment.
I also agree in keeping the current 'best ending, 100%' run as a separate branch, minus the '100%' tag (seeing as how Mega Man X2 also has a 'best ending' branch). This category, however, might now be significantly improvable since the condition of preserving Zero no longer includes obtaining all upgrades, etc.
Accepting for publication, as a new branch (100%), to Moons!
fsvgm777: Processing.
Last Edited by adelikat on 10/14/2023 8:01 PM
Page History Latest diff List referrers