TASVideos

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

Submission #2305: Lord Tom's NES Metroid "100%" in 33:25.7

Console: Nintendo Entertainment System
Game name: Metroid
Game version: USA PRG0
ROM filename: Metroid (U) (PRG0) [!].nes
Branch: 100%
Emulator: (unknown)
Movie length: 33:25.7
FrameCount: 120540
Re-record count: 74462
Author's real name: Thomas Seufert
Author's nickname: Lord Tom
Submitter: Lord Tom
Submitted at: 2009-07-03 22:18:26
Text last edited at: 2010-07-19 15:06:11
Text last edited by: Kyman
Download: Download (19519 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:
This is NES Metroid with 100% item collection, an improvement of 8:16 compared to Zoizite's 2004 run. The faster time was obtained by use of up-A resets, a new route, and extensive refinements of platforming and boss-fighting techniques.

Goals

  • Collects all items, defeats all bosses (100%)
  • As fast as possible
  • Samus stays suited until the ending
  • Emulator: FCEU 0.98.16 -- converted to FCEUX

Intro

The existing run, one of the last Famtasia runs on the site, was Zoizite's impressive 1st submission and has weathered numerous improvement attempts since 2004. Common laments included lag, difficulty in luck manipulation and the game's maddening tendency to give or take chunks of frames without any apparent pattern, making it very difficult to determine what "frame perfect" is for a particular strategy.

I did some preliminary testing for this run in early 2008, while working on the Any% run. That 8 minute run took me about three months of steady work; I therefore pretty much despaired in even thinking of doing a 30+ minute run of the same game. Also, at the time adelikat and mmbossman were working on it, and had a well-optimized wip up to the Ice Beam.

Over time, though, as I worked on other projects, I couldn't help looking at Zebes' maps and testing all sorts of crazy shortcuts. Earlier this year, adelikat & mmbossman's efforts had stalled, and they agreed to let me have a go.

With all the months of planning and testing, the run moved along pretty quickly once I got started in earnest. Optimizing Samus' movements is very complex and can be tedious, but with experience it does get easier, and the huge variety of terrain, enemies, and Samus' ever-increasing powers kept it interesting right up to the end.

To avoid endless explanation, a lot of the tricks of the game are already described at the Metroid Tricks Page and the Metroid Any% run.

The Route

The two biggest changes are the use of resets and getting the Long Beam much earlier. The previous run left the Long Beam for last, as this is the only way to grab it without detouring. However, after getting the Varia, it is possible to reset and get the Long Beam with a net time loss of only about 10 seconds. Having the Long Beam ends up saving time due to the ability to shoot distant blocks (especially with the Wave Beam) to avoid the delay of bombing them, and also allows countless time-saving and entertaining tricks (e.g. firing the Wave Beam ahead of a bug so it chases the beam across the screen before overtaking it and blowing itself up).

Given the use of resets, the previous run being done in (no frame advance) Famtasia, and the different route, precise quantification of time savings is difficult. As a guess, I'd say using resets saved about 5-6 minutes, with the rest coming from better optimization and new shortcuts.

To assist in viewing, here's a map of the route used and brief summary. More detailed comments for each part follow:

Within each area, I change colors after a reset. Note that the Kraid route is slightly incorrect; I omit the reset after the e-tank.

Start in Brinstar
Morph Ball Allows transformation to ball
Ice Beam (Brinstar) Can freeze enemies
Bombs Can blow stuff up!
Varia Cuts damage in half; Samus' suit becomes white
Long Beam Shots with unlimited range
To Norfair
Wave Beam Powerful beam which zig-zags; disables Ice Beam
High Jump Duh.
Screw Attack Can kill enemies with running jump
Ridley's Lair Mini-boss: receive 75 missiles for defeating
Ice Beam (Norfair) Can freeze enemies again; disables Wave
Back To Brinstar
Kraid's Lair Mini-boss: receive 75 missiles for defeating
Tourian Bridge unlocked by defeating Mini-bosses
Mother Brain Final boss

Brinstar 1

Morrison found a new way to blast the 2 diving enemies on the 3rd screen (before the 1st big vertical corridor) which saved about 10 frames. Samus' movements at the end of this screen are done very precisely to both save time and manipulate a crawler's behavior on the next screen.

I sacrifice <5 frames to run out and taunt the flying creature above the Ice Beam, then kill it for missiles while performing the door glitch. It should be noted that up to the Ice Beam, insane effort must be taken to manipulate/conserve both missiles and life. Afterwards, resource management eases up considerably.

In the vertical corridor after the bombs, I use some lucky timing to jump on creatures to climb in a place where Zoizite used a double-bomb jump, saving about 2s.

En route to Varia I also save time by laying bombs at the earliest horizontal point possible, so when the bomb gives a boost, Samus travels diagonally, rather than straight up in most cases. Also first seen here is the "bug jump" (see below).

On the horizontal screen just before the Norfair elevator, I take advantage of a glitch to freeze an offscreen crawler before it's fully initialized, causing it to appear as a (taller, and therefore shootable) diving creature. This same glitch is used (less noticeably) elsewhere in the run, as well as to give a height boost in getting the last energy tank (in Brinstar after defeating Kraid).

Norfair

The largest area, with the most collectibles; this part required the most planning and testing. I get the Wave Beam first because it is useful to shoot blocks that Samus would otherwise have to bomb in tunnels (each shot block saves about 1s).

After getting the 1st 2 missiles, I use a door-glitch shortcut (originally found by SpiderWaffle) to save a bunch of time getting to the bottom left area of Norfair. This door-glitch (and a similar short-cut taken just before Ridley's area) saves time by setting the screen up such that, when Samus re-synchs with the screen, she has no floor below her, so she falls to the screen below. Failing to do this would add about 10s as Samus would have to morph-unmorph all the way to the top of the screen again.

After getting the next 2 missiles, I use a trick to save time getting back up. There's a ceiling overhead with 2 shootable blocks. It's too high to shoot both blocks and jump without a (time consuming) double bomb jump. Waiting for the bottom block to reappear would be even slower. So, using the wave beam to miss the bottom block but shoot the top one(s), Samus then morph-jumps through the bottom block and uses it to make the rest of the jump. This technique is used a few times in the run, and saves about 2s each time.

After the wave beam, I use a similar morph-jump technique to get through a floor which Zoizite's run had to go around. Since any single-thickness wall can be morph-jumped, this is used repeatedly. Note, Zoizite's run did use morph-jumps to get through floors, just not as extensively.

There are several screens with the sea-horse creatures that shoot fire; the sea-horses cause HUGE lag, so I frequently take bizarre routes on these screens (going into lava, etc) to minimize it.

Before the Norfair e-tank, I save 1s by timing a bug to hit Samus at just the right time, eliminating the need to bomb boost up 1 block. Just afterwards, I use another long door glitch to fall out of the ceiling below, saving 18s vs the route used in Zoizite's run. After dropping into the (horizontal) room below, the game is still scrolling vertically; to go left, I take advantage of the door at the right side of the screen; going offscreen to the left wraps Samus around to hit the right side door's trigger from the wrong side, thus scrolling left and correctly flipping the game scroller back to horizontal.

Ridley's Lair

With the Wave Beam and Screw Attack, Samus is a bug killing machine! It's worth mentioning that it might be possible to glitch from the vertical corridor next to Ridley down to the bottom missile; after hours and hours of testing and getting sooooo ridiculously close, I gave up. If anyone finds a way to do this, PM me, I owe you a cookie and perhaps some milk.

I won't spoil the Ridley fight except to say it's my favorite part of the run and I was ecstatic to make the fight both faster and a bit funny. :) Oh, and the little morph-hops I do during the fight are to get the right sub-pixel position so the morph-jump up to the door is possible (without a bomb boost).

Incidentally, Ridley has 140 hp to Kraid's 96. A missile takes 4hp, any beam does 1hp. Incorrectly remembering Ridley's hp as 128, and incorrectly assuming the Wave Beam would do double damage on bosses (as it does on normal enemies) left me short of missiles the first time I fought Ridley, resulting in my having to redo most of his lair to manipulate more missile drops. Fortunately, after getting the 75 missiles for killing Ridley, missiles are never again a concern.

Norfair, take 2

I'll just note that on the long horizontal screen leading to the last two missiles, I intentionally let a bug fly ahead of the screen for like 30 seconds before Samus finally freezes and screws (as in Screw Attack) it. It thought it could escape!

Kraid's Lair

Pretty much the same techniques here; time is notably saved by using enemies to boost into tunnels (rather than bombs) or optimizing the bomb placement, and a different route to the e-tank (Zoizite's run gets it from above).

The Kraid fight is fairly conventional; alternating beam-missile allows 5hp damage every 8 frames for a very quick fight. Taking damage is done intentionally to reduce lag. The e-tank is grabbed quicker by using the (lower) left side ledge to drop down from. Why didn't Zoizite's run do so when it's so obvious? Actually, unless you get the vertical sub-pixel within a very narrow range, Samus will inexplicably drop past the tunnel into the lava. I do some morph hopping and take advantage of damage boosts to get the sub-pixel correct.

Brinstar to Tourian

As mentioned above, I use a glitch to freeze a crawler so it shows up as a diving creature, allowing me to quickly get to the e-tank. In the statue room, I use a bomb boost to get onto the bridge faster.

Tourian

I managed to save time compared to the Any% on every screen except one; I did lose 3 frames on the zig-zag screen due to bad luck with the rings placement that I was unable to elude. Savings come from morph-hops to minimize scrolling on doors, better falling, and being able to take damage to reduce lag. Where possible without losing time, I bounce the Metroids around with screw attack rather than freezing them right away.

Better planning and damage boosts saves almost a second on the Zebetites compared to the Any%. Alas, the Mother Brain battle is about 6 frames slower due to the nearly perfect luck I had with ring placement in the Any%. However, overall, the screen is still faster.

After Mother Brain is killed I go to the top of the screen and show how Samus can morph-jump through the ceiling and come out in the lava underneath. This was the only place I could stick this trick without losing time, so I put it here.

Tricks and Glitches

I try to limit this discussion to techniques not used in other runs or described elsewhere.

Movement Mechanics

Samus moves at different speeds when running (1.5px/f), doing a running jump (1.125px/f), and doing a standing jump (1px/f). Running off a ledge maintains running speed. Doing a "morph hop" (see below), Samus can fall and accelerate to running speed. A damage boost from standing/running lets Samus move at running speed; a damage boost from a running jump will not make Samus move faster. Samus does take several frames to accelerate to full speed, so stop/start, including morphing/unmorphing, also slows her down. Those are the basics, and they underly tactical decisions on just about every screen; briefly:
  • avoid jumping
  • avoid stopping
  • it sounds so simple...

Damage "Boosting"

Unlike other games, taking damage in Metroid does not move Samus faster than she can normally go. However, it can be useful because when Samus takes damage, acceleration from a standstill is instantaneous (saves ~4 frames), taking damage can often allow Samus to avoid jumping or bomb-boosting, and lag is often lessened during Samus' invincibility period.

The Morph Hop

A quick morph-unmorph (down then up) will cause Samus to do a tiny jump. This hop is used to jump onto half-block ledges (less time in the air = faster) and often before falling down a vertical shaft to start vertical acceleration sooner.

The Bug Jump

When Samus needs to clear a pit where a bug is coming out of, it is faster to freeze the bug and jump onto it rather than kill the bug and jump over the pit. This is because landing on the bug cuts Samus' jumping time by more than half, saving about 10 frames. Running off an edge does not reduce speed, so the time savings is preserved. Variations on this technique are used throughout the run on various types of terrain.

Minimizing Vertical Scroll

Anytime Samus goes from vertical scrolling to horizontal, the automatic scroll effect must be minimized. When climbing to a door, this is variably done by jumping higher than needed to get to the door or jumping while entering the door. When descending, especially to a red door, quick morph/unmorphs are the technique of choice. Often, leaving a small amount of scroll ends up being faster than aligning the screen perfectly, though.

Fast Morph

By pressing down, Samus will morph about 5 frames later. By pressing down followed by right/left, Samus will morph just 1 frame later. This is used to make the long door glitch faster (for the offscreen maneuver where Samus morphs, waits to fall, then unmorphs, the quick-morph starts her falling several frames sooner). Of course, on-screen use is not new; it has appeared in previous runs.

Lag Reduction

I could write a book at this point. Instead, I'll just list a few interesting points:
  • shooting doors open can reduce lag
  • when falling along a wall, pressing left/right can cause lag
  • taking damage will often reduce lag, especially useful in vertical corridors with lots of enemies
  • killing with the regular beam (not ice/beam/missile) causes less lag due to less elaborate explosion animation
  • being in ball form often reduces lag
  • freezing enemies can increase or decrease lag
Overall, I was very happy with the extent to which I was able to reduce lag. I think only the Kraid and Mother Brain screens end up overall lag greater than about 1 frame in 10, and most screens have none, apart from screen transitions.

Two Weird Glitches

Finally, 2 incredibly obscure but useful glitches I found.

First, at frame 57745 (descending to the Norfair E-tank), Samus is falling in ball form; by pressing up+right on just the right frame, Samus bounces in mid-air, which delays the flying enemy below just enough for Samus to sneak by. No idea why this happens, and haven't replicated it elsewhere.

Next, an off-screen curiosity. The door glitch is done by getting stuck in a door, usually by having it close on top of Samus. However, during a long door glitch, (with Samus offscreen), it is possible to save time by getting into a right sided door that is closed. This is done by positioning Samus next to the closed door, with the screen maximally scrolled down, then jumping and pressing right; if done correctly, the vertical screen coordinate ($4f) will change and, on the same frame, Samus' x coord ($30e) will increase by 1, indicating that Samus has embedded herself in the door (occurs at frame 36391 in this movie). Without this glitch, Samus would have to shoot the door open and wait ~3s for it to close on top of her.

Future Improvements

Known: There are a few minor frame savers which I discovered part-way through this run and did not go back and implement (this game is utterly unspliceable). There's 1 ledge in Ridley's lair that I ran off instead of doing a morph-hop, costing a few frames -- that's the only mistake I'm aware of as of now.

Speculative: Samus' behavior while off-screen can be bizarre and difficult to track. It's possible that major shortcuts exist, particularly if one were able to move Samus horizontally without the screen scrolling to follow, or abuse inappropriate horizontal/vertical scrolling more freely. I spent huge amounts of time looking for more such shortcuts, though, so it likely won't be easy.

As to the other Metroid runs, I plan to do the 1-item in the near future; I'd love for people to weigh in on whether the No-MB is worth doing/would be published, or if it would likely be obsoleted by a published 1-item improvement. (I'm putting this here because I asked in the forum once and didn't get much response). As to the Any%, I think I know enough to improve it by about 2s at this point, but this is not enough to prompt me to redo it (at least, not yet).

Thanks (no particular order)

  • Morrison -- For motivation and assistance with route planning, as well as an early frame saver.
  • SpiderWaffle -- Found some of the shortcuts used and posted them on the forums. Also a rich source of strategic and tactical ideas for improvements.
  • adelikat & mmbossman -- Made an excellent wip of the early portion of the run; also encouraged me to take over and get this run finished. adelikat even ran Famtasia for me to check something out.
  • AngerFist -- Harrangued me to do this run on IRC, which pretty directly led to me saying "well, why not?"
  • GuyBrush -- Did a complete test-run and brief wip, which were helpful.
  • Zoizite -- For previous runs, which rock, and a 100% improvement wip.
  • Alden & cpadolf -- Didn't help or encourage me, but they always write nice comments on my runs; here's your reward, guys, don't disappoint! :D


adelikat: Accepting for publication as an improvement to the published movie. And processing. Also, replacing the submission file with a .fm2

Similar submissions (by title and categories where applicable):