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

Submission #5077: dunnius's NES Metal Gear in 22:26.27

Console: Nintendo Entertainment System
Game name: Metal Gear
Game version: USA
ROM filename: Metal Gear (USA).nes
Emulator: FCEUX 2.2.2
Movie length: 22:26.27
FrameCount: 80909
Re-record count: 81763
Author's real name: Michael Dunn
Author's nickname: dunnius
Submitter: dunnius
Submitted at: 2016-04-01 10:14:51
Text last edited at: 2016-09-24 04:08:24
Text last edited by: dunnius
Download: Download (9253 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 a 79 frame improvement over my previous TAS (#3847: dunnius's NES Metal Gear in 22:27.58) resulting from changing the damage boosts, better lag management and RNG management, fixing an oversight of 16 frames that all previous TASes had, and a new route that rescues the building 1 rooftop prisoner instead of the one in floor 1 of building 2.

The reason I started this was that I noticed that I could save a lag frame early in the TAS, so I set out to reduce lag in the run since it could be done quickly with hex editing. Then I found a damage boost change, which meant that I had to change parts of the TAS because of different timing, then I realized that because the timing changed there could be additional improvements, so this ended up taking a very long time from testing many things. I was originally hoping that I could get a time under 22:27, and that goal was obtained just over halfway through the TAS.

The new way of reducing lag is by delaying frames that are recovered by having less delay at the door's frame rule, making no frames lost by the delay. But if the delay changes the amount fadeout lag, then it saves frames, usually 1.

I found a new way to manipulate the spawn timer by a small amount. Using a camera alert to reset the spawn timer was already known, as was the fact that when an enemy spawns, it sets the timer to a small value, so avoiding a new spawn affects the timer by about that amount. The new discovery is that there are some rooms where the spawn timer does not count down, usually boss rooms. The one used here is Arnold's room because the left side is not a door, which allows for many possible y positions on entry, and thus it can allow the timer to run down less or more depending on the need without losing frames. Also delaying on a screen that counts down, and then reducing the delay on the door's frame rule in a room that does not count down the spawn timer makes the counter count down extra by the delay without losing time. This is only useful to manipulate a couple of spawn timer values.

I also found a new glitch that I call the weapon vector glitch. This is done by going into a menu when a weapon has been shot and is still active (not doing the explosion animation). This keeps the velocity vector of the previous shot from being overwritten, so the next shot can be shot at an angle or a different direction depending on the weapon used before the menu (switching weapons can be done as well for different effects). I doubt this glitch will end up being useful in a 100%, but it is funny. I demonstrate this glitch one time in the TAS.


This is a listing of the modified frames from the previous TAS with the frame difference (negative is savings), and a running total of both actual difference, and the adjusted difference that ignores changes that are made up later.

Modified Frames Frame Diff Actual Total Diff Adjusted Total Diff Description
11219-11757 -1 -1 -1 A different path reduced transition lag by 1 (this is what that started this TAS)
12232-12693 0 -1 -1 There is a very narrow path to avoid the camera alert. It does not save time, but is neat.
13675-14321 -1 -2 -2 Delayed 2 frames before going in the door to reduce transition lag by 1. This did not lose time because the frame rule on the door would have forced a wait anyways. The pause timing was changed slightly to match the universal timer change.
14386-14964 0 -2 -2 Changed the prisoner text to start with no delay instead of 1. This caused an extra frame of wait at the door because of the frame rule, but it is better to consolidate the delaying for future examination.
15095-15359 -26 -28 -16 Took an extra damage (2 instead of 1) to reduce a punch and a longer route. This added 2 extra lag frames in the screen transition, but it is still faster by 2 frames than a path that prevents enemy spawns because of the 4 frame rule on the door. There is a 1 frame delay before getting the alert to get better enemy spawn positions, but the door frame rule made the delay irrelevant.
15709-15962 -1 -29 -17 Slightly different path that leaves the screen 1 frame later to reduce lag by 1. This changes when the alert happens by a frame, but it has no impact. Side note: getting the alert resets the spawn timer, which is advantageous later on. Fortunately the spawns in this screen do not cause extra lag.
17804-18127 12 -17 -17 Because of the extra damage earlier, a slower path was required to avoid damage. But overall this new route saved 14 frames. I could have entered the screen at a higher y position and punched the guard, but that was slower by 4 frames than going down 6 y position. The path to the elevator was changed because of the different entry.
25432-25613 0 -17 -17 Slightly different path because the shotgunner timing is different because of the universal timer.
25947-26048 0 -17 -17 Shotgunner acts different because of timing difference, but Solid Snake's path is the same.
26308-26803 -109 -126 -18 Moved the weapon switch for later which saves 1 frame overall because of 1 less wait at the shotgunner's door frame rule.
27690-27811 0 -126 -18 Moved the equipment switch before getting the bomb blast suit for entertainment.
30609-30989 0 -126 -18 Slightly different path to keep the lag the same. I could not improve the lag in this screen, but at least it wasn't worse. Apparently the lag in the screen transition from the 4 guard screen to the screen to the right is dependent on the universal timer when entering the 4 guard screen. It is on a repeating pattern of (8)/2/(2)/2/(2)/8/(2)/2/(2)/2, where the numbers in parenthensis have 3 extra lag frames. This route does not have extra lag, but there was another route that switches weapons in the room where the equipment is recovered, and saves 4 frames there, but it had 3 lag here that could not be removed, so it ended up being the same as this route. But there were other timing reasons why I used the route I did.
31053-31053 -115 -241 -21 The equipment switch was delayed...
32199-32313 112 -129 -21 ...and done here because there are 3 less transition frames in the equip switch...
32682-32682 -1 -130 -22 ... and it also saves 1 more frame from a better door frame rule.
34771-35145 0 -130 -22 Moved the equipment switch for much better entertainment because Machine Gun Kid had a different pattern because of the universal timer.
37563-38804 -36 -166 -22 The new equipment route could not take the quick damage at this place on the roof like the old version because of the universal timer. The old route would work though, and was considered as part of the overall new prisoner route. But the new prisoner route was able to take quick damage elsewhere, plus take extra damage to save time. When I calculated the rooftop route difference years ago, I did not take damage into account.
38863-39082 0 -166 -22 Moved the equipment switch right before the ammo box for entertainment
39237-39347 108 -58 -22 The weapon switch was finally done here because...
39450-39457 -3 -61 -25 ...this reduces the frame rule waiting on the door. The route that switched the weapon in building 4 also had this, but the savings were erased by the extra lag on floor 1.
40668-43563 2496 2435 -24 This is the new route of rescuing the Twin Shot prisoner instead of the one in floor 1 of building 2. There was an extra damage in the NW room by manipulating the guard at the top of the screen to run downwards, which could have been used to take quick damage (cooperative universal timer), but it was slower than the one later on. In the room before Twin Shot, the quick damage was done, but for less damage than the previous one. Then some damage was taken on Twin Shot, but the amount of damage had to be balanced with the quick damage on the previous screen. Although the actual route on the rooftop is longer (and with more lag frames) by 2 frames, it ends being 2 frames faster overall, plus more later because there will be an extra HP and grenade later on by not rescuing the other prisoner, and 2 frames because skipping the prisoner had a better door frame rule. Any future improvements will need to see if this route is still faster, which it will likely be.
43787-44389 -3 2432 -27 Delayed 1 frame to reduce a transition lag exiting the elevator. The door frame rule takes care of the delay. Took a different route in floor 1 to be different. Saved 2 frames on the door frame rule because of different timing, which is something that I didn't take into account before. Had 1 less transition lag to the outside for some reason.
45116-45658 -2 2430 -29 Took a new path on the tank skip, which is mostly moving the equip to later in the tank screen. This causes extra lag frames on the menu (the least is when entering the tank screen), making it take longer, but if done at the right time, it will reduce the massive lag when changing screens, in this case saving 6 frames total over the previous TAS. Like the previous TAS, only 1 damage is taken, which is fortunate. Taking an unwanted damage costs 3 frames. There is a 3 frame window every 16 frames where 1 damage is possible (the ones that delay the first bullet for the longest time). Fortunately there 4 x positions that can be used to enter the screen increasing the chance of entering within the window, and switching equipment will also affect this. This new route came about because jagaur_king misunderstood what I talking about which gave me an idea to try for 0 damage, which is impossible, but it caused me to accidentally find a way to reduce lag.
45695-45911 0 2430 -29 Took a different path in the last part of the minefield for entertainment.
47429-47603 0 2430 -29 In the room after the bulldozer tank, there are 2 paths to the elevator, one for each side. Each side triggers the alert at different times, which affects the spawn timer. This is important for manipulating the hell room later on with a new route idea, so I had to make branches and test both branches until either it ended up slower (different spawn timing can cause extra lag), or had an inferior spawn timer in the hell room. There is a delay of 2 frames going 1 x position further to the right to get better spawns in this room that don't lag, and less delay at the door frame rule.
47658-47658 1 2431 -28 There was an extra lag in the transition for some reason.
48397-48516 0 2431 -28 At the rooftop, I realized that there are additional branches to test that further manipulate the spawn timer, as well as taking damage instead of throwing a grenade to conserve ammo for when it counts, which was done in the first room on the roof, without gaining or losing time.
48517-48581 -3 2428 -31 The lag at the transition was reduced for almost all of the branches made here.
48582-48582 -113 2315 -31 The card switch was moved after rescuing the prisoner. The switch could have been done outside the card 5 without losing frames, so I had to create temporary branches to see it affected the spawns in the next few screens.
48954-49066 113 2428 -31 The equip was put back here. I did this originally to make it easier to test branches.
49250-49447 -2 2426 -33 Using a grenade here to kill 2 guards after the spawn timer resets saves lag frames due to less objects on the screen. This can be done with either main branch, adjusting the grenade for the different spawn timing.
49492-49800 -1 2425 -33 Removed the input on the forced lag frame, and used a different path to reduce transition lag for this and the next screen. The path was chosen by bot testing, and it turns out that the best lag is the one that has the random lag from the alert, which the previous TAS did. The different path, which had a different x position in the following screen...
49801-49863 -1 2424 -34 ...removed 1 transition lag from the following screen.
49864-50106 1 2425 -34 Recovered the frame from the different x position. This is where I realized that I could further affect the spawn timer without losing frames by changing when the grenade is thrown to make spawns appear (and also not throwing a grenade and instead take damage, though it is interchangeable with the no spawn), which created even more branches. This is because it is the first screen where the spawn timer matters.
50872 0 2425 -34 This ended up being done the same as the previous TAS, but the spawn timer caused me to eliminate a number of branches because of extra lag from spawns.
51019-51038 0 2425 -34 Minor change to manipulate the guard not to shoot.
52178-52256 -8 2417 -42 I fixed a mistake that was present in all previous TASes. Because this door is already open, it can be entered from 8 y position higher. This mistake was done twice in the TAS, and was also corrected later.
52639-52651 2 2419 -42 Delayed 2 frames to avoid an extra lag, and had less delay at the door's frame rule.
52652-52733 -2459 -40 -42 Different path to the right. The new prisoner path skips the prisoner here so the big difference is finally made up.
52761-52923 -1 -41 -43 Delayed 1 frame to avoid damage in the deep water on the first frame of being in the deep water, so I could do the screen transition to avoid the first pause glitch, saving 3 frames. This is another room where the spawn timing can cause extra lag. It happened here, but only lost 1 frame in the screen transition, which is acceptable. There were other branches that had no spawns here, but lost more time later on. I later (after eliminating the other branches and getting to Coward Duck) made another branch when I realized that I could take damage to avoid the second pause glitch, which would save 4 frames. Ultimately I stayed with the pause glitch because the damage later (before Coward Duck) saves time.
53547 0 -41 -43 Removed the input on the lag frame caused by the alert. This is another place where spawns can mess things up. One branch had to wait 1 frame in order to avoid spawns.
53695-53702 -2 -43 -43 Less waiting on the door frame rule.
55964-55965 2 -41 -43 Delayed 2 frames to reduce lag to match the previous TAS.
56207-56653 0 -41 -43 Used a different path to avoid lag frames. Entered the Arnold room at a different y because the timer does not run in Arnold's room, so this manipulates the spawn timer by a small amount (and in this run enough to make a difference because of tight timing.)
56990-56997 -2 -43 -43 Recovered the 2 frames from before by less delay on the door frame rule.
56998-57096 -1 -44 -44 1 less lag for some reason. It makes up for the extra lag earlier.
57188-57286 -1 -45 -45 The branch used had a favorable spawn timer here resulting in no spawn, so there was 1 less lag. Naturally other branches were not as fortunate and were trimmed here because this room will lag lots more than the one before.
57920-58117 -4 -49 -49 This room (coming back from the compass prisoner) was where I had terrible luck last TAS, and was among of the important rooms to test with the branches of spawn timer manipulation. This time there were no spawns which saved 3 frames in the room and 1 more in the screen transition, and there was not the unfortunate bullet damage, saving more frames (at least 3).
59693-60647 -1 -50 -50 Moved the trcvr to later. This was done originally because another version of this TAS had the lower right guard look up and would have alerted, and caused lag, but going in the menu right before the alert would happen canceled the alert. This does not happen in this version, but it makes the guards invisible (for a short time) after coming back. I improved the trcvr call by a frame, but lost the gain on the frame rule of the door. There was 1 less transition lag, however.
60906-60910 1 -49 -50 Delayed 1 frame to affect the RNG in the next room.
61123-61431 2 -48 -50 Recovered the 1 frame on the door's frame rule. Used a different path to avoid an extra lag before the guard gets killed. Delayed 2 frames after the door opening to affect the spawn timer.
61521-61827 -2 -50 -50 Different path on Arnold to be different. Recovered the 2 delayed frames with the door's frame rule.
61944-62199 3 -47 -47 This room had bad spawn timing (but was necessary for the next screen) so a different path was necessary. It caused 2 lag frames in the screen, and 1 more in transition. But it was faster than other methods because of the timing when coming back to this screen later.
62213-62736 -5 -52 -53 Hell room is the end point of all the branches to see if I could get the proper timing for my new idea. Luckily one of them worked out, and stayed working even after all the revisions changing things earlier in the TAS. The new idea is using a grenade to kill a guard and a spawn right after the spawn timer resets to 255 so that I have a little more than 4 seconds where lag is not a big concern because of 2 guards on the screen. It was a very tight fit for the timing, but worked (even after revisions). I had to delay 1 frame to get the setup, which will be recovered at the door to Arnold, but the end result is no lag frames at all in hell room finally, which is an improvement of 6 lag frames!
62903-63103 0 -52 -53 I moved the weapon change later to show off the new weapon vector glitch that I found by accident.
63313-63743 0 -52 -53 Took a more entertaining path in front of guard. The guards have a slightly different pattern because of timing differences, but the alert happens in the same place, roughly. The spawn timer was better so there were no spawns, saving no time though, but it saved a couple rockets which were useful elsewhere. One of them ended up being used to show the glitch in the previous room.
63855-64009 -1 -53 -53 Gained back the delayed frame on the door. This room was interesting because the spawn timer was a problem for a few versions. In this version, I got the alert with no extra frames available on the spawn timer. In the previous version I would have had to delay another frame, which would end up losing 4 frames because of the door's frame rule, or face a couple lag frames. I used a rocket because it was the only way to get through without taking damage and avoiding spawns.
64110-64116 0 -53 -53 Moved to the right 1 position to be slightly closer to the lower Arnold for the second shot, which makes no difference timewise.
64274-64795 0 -53 -53 Faster fight for the upper Arnold, and the card is obtained 3 frames sooner. Unfortunately the savings are eaten by the door's frame rule. If I could save 1 more frame in the fight, it would overcome the door's frame rule, and end up saving 4 frames. I thought about using the weapon vector glitch, but it can't save time because the explosion cancel is better. The different path after the card done for entertainment.
64958-65162 0 -53 -53 A different path was taken to enter the room at a different y position so that the spawn timer was at the best value (as high as possible), which turned out as an unnecessary manipulation. The B.A. Dozer's Zs set the spawn timer to 16 after reaching 0 for perhaps as part of the animation, but also so that there will be spawns immediately if there is an alert.
65471-65535 -1 -54 -54 Less lag in the menu fadeout.
66251-66420 0 -54 -54 Different path taken because I needed an extra rocket later. This path does not cost any frames, and it is more exciting, though I prefer walking through the explosion.
66697-66705 -8 -62 -62 Fixed the same 8 frame error as before, so the total from this mistake is 16 frames.
67219-67373 -2 -64 -65 Delayed 1 frame (recovered at the door) to be able to go into the deep water without taking damage on the first deep water frame, same as before, to use the screen transition to avoid a pause glitch saving 3 frames. The path for leaving the deep water was changed. I considered using damage to avoid a pause glitch, but this caused a bad universal timer when entering the trench, which would cause an extra pause losing the gain.
67733-67758 0 -64 -65 Different deep water damage dodge because of different universal timer.
67914-69254 -3 -67 -68 Different pause timing in the deep water channel, and 1 less pause was used because of the better universal timer at the start (it was right after a multiple of 16) I considered using a damage to avoid a pause glitch here, but it had the same ill effects as using it earlier because of the universal timer at the start of the electric floor.
69373-69767 -8 -75 -75 Different path taken, and shot a guard to reduce the lag in the screen transition. This is why I needed that extra rocket. At the door, I recover the delayed frame from before, and was able to make use of the damage to avoid a pause (it done as late as possible) saving 3 frames, so in total I saved 2 door frame rules, or 8 frames in the deep water areas! I originally thought that using the damage earlier (before floor 2) would save frames, but those savings were eaten up here. I thought it was going to be impossible to use the extra damage to save time anywhere, but I managed to figure it out in the end. The timing for this was super tight which made it difficult to modify.
70117-70844 -3 -78 -78 Lost a frame from extra lag in the equipment switch transition because an extra boomerang appeared because the universal timer was not as good this time. 2 frames were saved in the Coward Duck fight which was enough to put it over the door frame rule, saving 2 more. The difference in the fight is waiting 1 frame after triggering the pit to make it 1 size bigger. Even though some time is lost before the second shot on Coward Duck from not being in position as soon as possible, it was made up by being able to die sooner because of less walking to the pit, and the extra height means that the prisoner can be shot quicker because the rocket doesn't have to travel as far.
72148-72302 0 -78 -78 Took a different path that kills the enemies 4 frames faster, not that it matters. I think it is more entertaining because it looks like Solid Snake steamrolls over the guards.
73692-73759 -1 -79 -79 Saved a lag frame for an unknown reason. It seems like changing the path somewhere before affected this, because this did sync before I made some changes earlier.
74721-74905 0 -79 -79 Took a diffferent path that makes the laser shoot 3 times, and Solid Snake walks into the laser without damage. The hitbox for the laser is at the bottom of the laser.
75251-75271 0 -79 -79 Followed the wall notch this time.
75674-76006 0 -79 -79 Matched the timing for the equipment change because the mod 16 difference worked out. The pauses however had different timing, so they were changed, though the overall path is the same.
76540-76951 -4 -83 -79 Different path taken along with different pause timing. Took a damage in the gas room to save 4 frames, but it was only temporary.
77086-77450 4 -79 -79 Different timing for the pauses on the electric floor. This required an extra pause because of 1 less HP. Also delayed a frame on the corner before the door to manipulate luck and get the better pattern in the Supercomputer room. The delay was made up in the frame rule for the Big Boss message.
79702-79888 0 -79 -79 Shooting the second rocket from 2 y position higher hits big boss a frame sooner. This is lost later because of frame rule on his movement. Speaking of frame rules, There is a big one at the very start which is a 1 frame window every 8 frames that makes Big move immediately and puts him in a better position to get hit by the second shot, and ends up faster than any other starting timing. There is also a way to beat Big Boss 8 frames earlier by being further to the left before shooting the second to last shot, but it requires an extra hit point. I tried testing all the paths in the basement to get an extra hit point, but none of them could get the 1 frame starting timing. At best with a suboptimal start I matched what was done here, so I left it as is.


Probably the same as before, this time it is frame 77905


Samsara: Quite a Solid submission. Accepting as an improvement to the published run.

feozzz...: Pub.

Similar submissions (by title and categories where applicable):