TASVideos

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

Submission #2032: Lord Tom's NES Metroid "any%" in 08:19.32

Console: Nintendo Entertainment System
Game name: Metroid
Game version: USA PRG0
ROM filename: Metroid (U) (PRG0) [!].nes
Branch: any%
Emulator: (unknown)
Movie length: 08:19.32
FrameCount: 29959
Re-record count: 36642
Author's real name: Thomas Seufert
Author's nickname: Lord Tom
Submitter: Lord Tom
Submitted at: 2008-07-17 01:11:09
Text last edited at: 2011-01-02 00:58:33
Text last edited by: Nahoc
Download: Download (3740 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:

(Link to video)

This run improves Hero of the Day's NES "any %" Metroid by 1972 frames (32.87s) for a time of 8:19.32. I use the same route as the existing run, with many technical improvements in the various door glitches (especially in Kraid's lair), boss fights, and platforming. I also aggressively conserve and replenish missiles throughout the run so that when I get to Tourian I only need to kill one metroid, instead of two.

Objectives

  • Emulator Used: FCEU 0.98.16
  • Aims for fastest time
  • Abuses programming errors
  • Takes damage to save time
  • Manipulates luck
  • My first game not previously run by Walker Boh

Improvements Summary

Where Frames Saved Cumulative Frames Saved
to Kraid's Elevator 138 138
Kraid's Lair 1052 1190
Kraid 28 1218
Ice Beam 157 1375
To Tourian 203 1578
Tourian 159 1737
Zebetites 57 1794
Mother Brain 152 1946
Escape 26 1972

Start to Kraid's Elevator

The savings here relates entirely to action that occurs offscreen during the door glitch. As soon as Samus goes off the top of the screen, the game puts her at the bottom of the next map segment down. Once there, it is possible to come out of the wall and jump from platform to platform until Samus comes back onscreen, at which point normal progress can continue.

Kraid's Lair

Wrong-way Door Glitch

This is done by entering a door to the left of the scroll trigger, causing the screen to scroll right when Samus exits left. Better geometric technique saves a bunch of frames falling in the 1st corridor; note that I don't unmorph until I fire to open the door. Bouncing into the door as the morphball saves about 10 frames by starting the door glitch half a block higher; this technique is used again twice later in the run. The wrong-way door glitch itself is done faster by shooting the door oren from beneath, allowing Samus to jump through it sooner.

The Long Drop Door Glitch

Much of the savings here was inspired by SpiderWaffle's discovery of a "sweet spot" at which Samus can pop out of the wall during a door glitch and have the screen scroll down as fast as she falls. The spot is generally just as Samus leaves the top of the screen.

I save a ton of time getting down to Kraid by coming out of the wall on the door glitch, shooting the door again (offscreen), jumping to scroll the screen while the door times out, then re-using the door to get back in the wall (using the morphball bounce technique with Samus offscreen). This gets me halfway down to Kraid's level. I then repeat the same technique on the door on the green screen that's just a corridor; this time after I use the sweet spot and shoot the door, I found it fastest to morph-unmorph to scroll the screen (since there's no jumping room).

Apart from scrolling the screen quickly, a bunch of time is saved here by carefully lining things up. In particular, the point at which I start climbing again after using the 1st sweet spot was chosen so the 2nd sweet spot would be placed such that I could drop into the corridor on the green screen. Afterwards, I start climbing again so that I reach the red door just as the bug hits me.

Needless to say this was the most difficult part to TAS as I was still learning the game and very complicated action is occurring with Samus offscreen.

Kraid

First off, entering the screen as the morphball cuts lag; antime in the run where I morph for no apparent reason, well, that's probably the reason. Previous runs have used the fire-every-frame trick to stun Kraid; I found that it's only necessary to fire every 4th frame (lag frames excluded) to achieve the same effect. I thought this might decrease lag, but if it had any effect it was very minor.

The real savings here comes from manipulating how Kraid fires his projectiles. In exhaustive testing and memory adress and source-code searching, I believe I proved it impossible to kill Kraid without his firing...the counters that drive them just can't be manipulated that much. As a result, it's necessary to pause while shooting Kraid to jump over his spines. I saved almost half a second by pausing such that he fires the top and middle spines almost simultaneously, thus reducing the time Samus needs to be in the air above Kraid's hit box.

Ice Beam

Strangely, it's not until after Kraid is killed that there's any serious platforming in this route. Just after re-entering Brinstar, I use a new technique to get past the slow-flying creatures without curving out of the way around them. The trick here is that enemies only move when they are on the screen. By using the morph-jump to travel most of the horizontal distance to the low platform, I can reach the platform and jump again before the enemy gets close enough to hit me.

I use a bizarre new bug to save time in the room to the right of the shaft to Kraid's elevator. Previous runs have jumped to kill a diving creature, manipulating an annoying crawling creature (zoomer) into not appearing. The zoomers normally can't be killed with a missile while Samus is at their level, but with a little manipulation, they spawn for 1 frame with a taller hit box; hence when I shoot a missile that hits the edge of the screen just as the zoomer spawns, the zoomer is killed.

Another platforming technique that sees heavy use here is occasionally taking high jumps with a morph-jump. The reason is that morph-jumps can go several pixels higher than a normal jump. Since Samus' elevation slows way down at the top of her jumping range, a morph jump can be faster for really high jumps. However, it doesn't seem to be hard and fast that jumps above a certain distance are worth morph-jumping; I think how the screen scrolls also affects it, so I pretty much tried both ways and took the fastest for any high jump in this run.

In the long vertical corridors, I use two beams to kill zoomers in many places where the previous runs used missiles. This has several advantages: missiles often cause lag; fewer missiles required; and the death animation is much shorter if an enemy is killed with the normal beam vs the ice beam or missiles -- thus item drops show up sooner.

I save about a second on the Ice Beam door glitch by again coming out of the wall earlier and jumping on platforms. However, this time I can only use platforms part of the way because at some point Samus gets stuck in solid wall and has to morph-jump the rest of the way. Due to insane luck in monster placement (and not by my design), I also fall in such a way that I hit a zoomer on the way down, boosting me to the left side where I need to be much faster than would otherwise be possible. While I'm taking damage, I also hold the jump button down so Samus bounces a little higher, thus synching Samus on the screen. Failing to hold jump results in Samus getting stuck in mid-air down below and needing a morph-unmorph to get down to the door, thus breaking vertical momentum.

The horizontal screen just before the Ice Beam has more going on than is obvious. This is one of the few screens where manipulation of enemy locations is vital; entering the door single frames ahead or behind totally changes where those fuzzy flying things are. Lag is the major problem here; by entering as the morph-ball and taking a hit on entering the room, I cut lag almost to zero, saving over a second vs the existing run.

It also bears mentioning that the fastest way to get through a door is to enter at a dead run. Hence, when I blast open the red door to the ice beam, I back up while it's thinking about opening so I can save a few frames going in full throttle.

To Tourian

For the part that overlaps with earlier segments in the run, the ice beam changes a few things. 1st, killing zoomers with 2 beams is no longer useful because their death animation is much longer, leaving only a frame or 2 to manipulate the item drop, which is rarely sufficient. 2nd, the morph-ball trick is no longer needed to get past the slow flyers, because I just freeze them as in previous runs. Finally, a new platforming technique is possible where I freeze a zoomer and jump off it, reaching the higher platform in 2 jumps instead of 3 and saving maybe 10-15 frames.

At the top of the long vertical corridor, I seem to jump unnecessarily high to get to the door. This is done to scroll the screen up, saving time vs having it recenter after I enter the door.

On the horizontal corridor before the stature room, I save time by lag reduction and making sure the rio always takes the maximum horizontal traversal before returning to the ceiling.

In the stature room, I use a faster technique to freeze and morph-jump off the rio by jumping to manipulate its movement and freezing the rio while I'm jumping up through it.

Tourian

I enter Tourian with 69 missiles, which is one more than the minimum possible to beat the game killing only 1 metroid. I cart the extra missile along to kill a ring on the 2nd screen that is too low to kill with a beam and would cost 5 frames to avoid. For the accountants out there then: 10 (1st door) + 1 (ring) + 5 (2nd door) + 5 (3rd door) + 5 (to kill metroid) + 40 (for 5 zebetites, at 8 missiles apiece) + 1 (mother brain's glass) + 32 (to kill mother brain) = 99 missiles. With 69 missiles, plus 30 from the metroid, it comes out juuuuuuuuust right...

Almost 2 seconds are saved in the zig-zagging room by using a wide variety of techniques. It's difficult to summarize, but basically it revolves around reaching the edge of each ledge with as much downward momentum as possible. Thus, even though Samus moves at only 75% horizontal speed while jumping, it's faster to jump down than just drop. The biggest time savings, though, is when I am able to morph before reaching the edge of a ledge and then bounce all the way past the edge of the next one. Apart from saving time, I think it just looks cool. It merits noting here that I'm manipulating the position of the rings and the rings are really annoying to manipulate.

On the last horizontal corridor before the mother brain screen, I save a few frames with better geometric technique, but most of the 48 frames saved on this screen are from only killing one metroid. Because the current run kills two metroids at once, it may seem that it would take just as long to kill one as two, but it doesn't. The reason is that if only one is being killed, you can fire ahead to freeze it and start killing it while you're still running. Killing two at once requires standing still while all five missiles are fired, thus halting forward progress half a second or so longer. The single metroid kill could be even faster using a technique from the tricks page that lets Samus fire a missile while a beam is still on the screen (normally impossible). The trick requires firing an extra missile and should be about 5-10 frames faster but is slower in practice because firing a missile with an unfrozen metroid on the screen creates too much lag.

Zebetites

Oh, mighty pillars of obstruction! Most of the time saved here is by firing three missiles while falling off the platform before the last four zebetites, instead of two. Being able to fire three saves about 10-12 frames each time but requires almost perfect subpixel positioning; if you're just off, the 3rd will be too low and hit the wall. I didn't do this for the 1st zebetite because (for some reason) it was faster not to. More time was saved by better handling and luck with the projectiles and maybe a few frames decreased lag by freezing some rings. Overall I save about a second on the Zebetites.

Mother Brain

I was definitely surprised to find about 2.5 seconds improvement to the mother brain fight. Mother brain can be damaged every 17 frames, so it's really just a matter of freezing the rings to reduce lag and get a standing platform that's close enough to fire every 17 frames and go nuts. I do save some extra time dodging the bullets using a quick morph-unmorph; I think the bullets end up costing me only 1 frame total using this technique. I tried to be as entertaining as possible while MB is blowing up, but a lot of things I tried caused lag.

Escape

There is minor savings here by entering the door as low as possible, but most of the improvement is better platforming. The key really is on those platforms which require a horizontal jump; by pressing the arrow keys just so it is possible to jump from mid-air a pixel or two off the edge of the platform.

Future Improvements

I tested exhaustively for faster routes using door glitches, but none of them panned out. In particular, it is possible to door glitch directly to Kraid's room (rather than one screen to the right), but Kraid didn't appear, so he must be loaded via code connected to the door trigger. I also tried various things to get to the Ice Beam from behind, but didn't really find anyting promising. I used to think that getting to Tourian without the Ice Beam would be awesome, but even if it were possible it would be useless because you wouldn't have enough missiles.

So...I believe that this is the fastest route. More technical improvements are still possible, I'm sure, though I'd be (pleasantly) surprised if they amounted to more than a few seconds total for an any %.

Some of the new techniques here are applicable to all metroid runs; others only to some of them. I'd be delighted to see some of them used in the other runs, though it's not on my agenda for the near future. Metroid can be very time-consuming to TAS because it's random and laggy (no splicing!) and the platforming requires mind-numbing precision to maximize speed. Good luck!

Thanks

I read through almost all the forum posts on Metroid before starting this run, so lots of people contributed years ago without even knowing it. Of note, SpiderWaffle's discovery of the "sweet spot" for the door glitch, along with several useful observations and suggestions, saved a lot of time. Hero of the Day, Arc and Zoizite's runs were invaluable, of course. Adelikat and mmbossman provided encouragement and some memory addresses. Kent Hansen (SnowBro) published the partially commented source code, which was a GOLD MINE for memory addresses.

Finally, during the voting for Hero's submission, Arc needled Hero for ending with the self-destruct timer at 864 instead of 865 and voted meh. In this run, it ends at 867, so I'm afraid I'll have to retroactively vote meh on all existing metroid runs...;)


adelikat: Accepted and processing.

Similar submissions (by title and categories where applicable):