Submission #1324: adelikat's NES Gradius in 10:52.35

Nintendo Entertainment System
baseline
(Submitted: Gradius (J).nes unknown)
FCEU 0.98.16
39141
60
19732
Unknown
Submitted by adelikat on 10/27/2006 1:04 AM
Submission Comments
Finally, the infamous Gradius run by adelikat!
(note that this run uses the (J) ROM but that it plays fine in the (U) rom. Either is fine for encoding purposes)
Gradius is an old and popular game that is well known in the TAS world for Morimoto's run. This run attempts to obsolete the run by a) pushing the playaround to more extreme levels and b) shortening the length of the run significantly (which also provides more entertainment by being less repetitive). Also, it attempts to be faster in each section than both of Diman's 13:15 and 13:25 submissions.

Details about the goals:

Goals:

1) Maximize speed upgrades as early as possible 2) Aims for maximizing entertainment in a "playaround" aspect. 3) Aims for fastest time possible whenever it doesn't sacrifice 1) or 2)

Overall Aim:

The goal is to take a game with this kind of speed potential and push it to the limit. This allows me to create a run where the on screen animation becomes a visual pattern resulting in the less & less importance on the game itself. The run transcends the usual gaming logic and becomes a sort of abstract art. The run becomes something unique and emphasizes the potential for TASes to truly be considered art.

Speed:

This run is 3min 17 sec faster than Morimoto's. Here is the details of how this was achieved:
  • Warping
In Morimoto's run and both of Diman's submissions, they used only 1 warp. That is the one that result from destroying a boss quick enough. I discovered that you can in fact warp twice by using the level 1 and level 3 warps. This shaves almost 2 minutes from the movie, and greatly reduces the repetitiveness of the game. To warp to level 3 from level 1 you need to destroy 4 hatches while your thousands digit of your score is even. To warp to level 5 from level 3, you need to destroy at least 10 stone heads. I tried using the quick boss destruction to warp yet again from lv5 to lv7 but it does not work. (I tried variations where I do not kill the level 1 & level 3 enemies and kill the lv5 one very quickly). Apparently only 2 warps are possible in the game.
I believe this route also adds entertainment by skipping level 4 instead of level 3. Level 4 is the same as level 1 except upside down. Skipping this level helps the run be less repetitive by having more level variety.
  • Mini-bosses
Each level has a mini-boss before the Main boss (with the blue eye in the center). Note that level 6 & 7 do not have a main boss. The mini-boss section is where the scrolling stops and you must avoid a particular kind of enemy for a set amount of time. Upgrading certain weapons will EXTEND this time by 256 increments. Therefore optimal upgrades are necessary for fastest time. Interestingly, this is where Diman loses the 10sec in his 13:25 movie.
  • Boss-fighting
The boss fights are the only parts of this game that aren't auto-scrolling based, so it is critical to minimize the length of them. The boss will become vulnerable at the earliest possible frame as long you do not fly behind him (which Morimoto did frequently). Flying behind him will slow him down and delay the vulnerability significantly (several hundred frames).
  • Sacrifices of speed for "entertainment value"
This run does not achieve the fastest possible time. However each instance of delaying the fastest time was carefully planned and considered. The following are situations that sacrifice speed and the calculations of each.
1) Maximizing speed upgrades. The irony is that max speed makes the run LONGER. Max speed means that the ship moves at 8 pixels per frame and has no acceleration or ability to slow down. As a result the boss fights are each about 10 frames longer due to the poor ability to aim when you are moving in 8 pixel chunks. The fast speed of the ship is really the whole point of this run so sacrificing 30 frames is certainly OK :)
2) Having both "options" (the orange balls that echo the ships movements) extends the mini-boss fights in level 3 & 5 for 256 frames each (512 total). Options are necessary in the designs & patterns that I create.
In level 5, having both options minimizes lag greatly saving about 150 frames, so there is only a net loss of about 100. In level 6, I find away to recover some of those 256 frames and manage to only lose about 150 net. Therefore, using options sacrifices about 250 frames (about 4sec) total. Given the value they add to my overall goals, this is a worthwhile sacrifice.
Also, having the options actually increases the length of the boss fights by a few frames since the ship's shots are a little slower due to having to place 3 on the screen instead of 1. This adds about 6 frames total to the run.

Tools:

Morimoto's movie was not just a playaround of the game but a playaround with the concept of TASing and the new tools that allowed it; kind of a "proof of concept". It is only appropriate that it be obsoleted by a run that is also an experiment with new tools. To create this run, I used a "macro-editor. With this editor, I can create a series of button presses and put them together into a single command. This allows me to push one button to initiate very complex movement patterns. Writing my name "adelikat" for instance was a large programmed macro (well, 2 actually since there is a 256 frame limit to any one macro :P). I simply had to find a frame to start it that didn't result in the ship being destroyed. This feature also allows any button to be a "random" button. This allows for a more accurate way of attempting luck manipulation in certain sections of a movie. This feature is currently somewhat experimental and written by miau and can be found here.
This run is unique in that is uses every tool made for TASing. In addition to the macro editor, I used basicbot to play segments of level 7. I used cheat search, memory viewer, and memory watch to debug the game and find conditions for this bot to check as well as getting hp values for the lag-creating monsters in lv5 (a real bitch to find because the hp INCREASES instead of decreases, arg). I of course used frame-advance, and frame counter, read-only toggling, and just about every other "tool" for FCEU.

Special Thanks:

Many thanks to miau, who is as much responsible for the creation of this run as I. Miau patched together the above mentioned macro-editor, without which I would not have been able to do this. Also miau was indespensible with helping me learn to use basicbot & finding some ram addresses :)
Moozooh, cardboard, and JXQ who watched my wips and helped me make some crucial decisions. And also, they helped keep me motivated through this rather tedious TAS.
To Morimoto and Diman for their ideas and contributions to TASing gradius. Without Morimoto, I would have never thought to make a TAS of this game in the first place. Without Diman's two submissions, I would not have discovered the varying lengths of the mini-boss fights.

Summary:

  • Plays on FCEU .16 with experimental macro editor patch
  • Aims for fastest time
  • Uses deaths
  • Abuses programming errors in the game (poor collision detection)
  • Uses warps

Level by Level description

This section provides a lot of "spoilers". It is recommended that you watch the run first and then read this to get clarity on what was going on.

Level 1

The main goal of this level is to get the 13 speed upgrades needed for maximum speed. Enemies are avoided except to kill the minimum necessary to get the most upgrades and to initiate the level warp. The warp to level 3 is caused by destroying 4 hatches (the things spitting out enemies) while the thousands digit of your score is even. In some cases, enemies are destroyed in order to get the right score. Other enemies are destroyed in order to cause the power-up enemies to appear.
In this level I try to show a preview of the potential of the macro editing feature. Certain small movement patterns are introduced that will be used later in more complex ways. Consider this level a "prelude".
In the mini-boss section (the volcano), I attempt, like Morimoto, to move about the screen avoiding the rocks. I try to push this to the extreme, playing with death as much as possible.

Level 3

To initiate the level skip, I must kill at least 10 of those stone heads. I felt it appropriate in this section to go for %100 kills since this is near impossible. Most of the heads can only be destroyed by setting up the "options" to be inside the head. At the end of this stone heads section you may notice a little message ;p Also, I play with the collision detection abuse that results from such a fast ship. I fly through some thin walls where it would normally be impossible.
I upgrade to 2 options and missle. Double,laser or shield extends the length of the mini boss fight and are avoided. I use the mini boss section to simply move about in circular patterns and orbit the enemies as tight as possible. Also, I am pushing the movement patterns to more complex shapes and trying to build up the overall intensity.

Level 5

The beginning of this level is not lag, but rather me artificially slowing down the ship by putting in 1 frame delays between each button press. I felt that the speed of the ship was "wearing off" and I did this to restore that feeling of "OMG that ship if fast!".
This level has the infamous lag-creating 2-armed monsters in it. Here, I attempt to destroy the ones that create lag as soon as possible to minimize lag. Here I had to make a sacrifice in speed. By having both "options" it extends the mini-boss section by 256 frames. But not having them would mean defeating them much slower, increasing lag. I estimate about 150 extra frames of lag would be caused by not getting the options. But of course they are crucial to most of my complex ship patterns. In addition, the length of the mini-boss fight isn't perceivable and therefore doesn't look "bad". While lag is definitely noticeable and would make the run look more "sloppy".
I used the boss hp ram addresses to find the earliest frame that I can deliver damage, and to find the most efficient means of destruction. Note that lag only occurs when two "arms" are on the screen at once, the body has no effect. As a result I only kill the 2-armed variety as quick as possible. Actually, I managed to destroy them so fast that the lag is hardly noticeable (only about 2-3 lag frames per enemy). The one armed ones only need to be destroyed before then next creature appears. I hold off a little and allow the viewer to at least see the creature before it is destroyed. The ones with no arms are of no consequence so I simply avoid them or orbit around them.

Level 6

At first you may have thought the run desynced at the beginning, but in fact the death was intentional. Like the previous level, the boss would be extended by 256 frames if I have the options when the fight start. Surprisingly, dying only costs about 100 frames, giving my a approx 150 frame net savings. I felt the death is good because it keeps things interesting. You remember how slow the ship was, and re-upgrading helps keep the intensity of the movie going. There are more than enough power ups in this level to get max speed and 1 option (which I don't "turn on" until after the boss fight starts). During the level, I play with the poor collision detection by flying through segments of the "spider-web" stuff in the level.
At the boss, I demonstrate that you can shoot a space in the web underneath the entrance and not be harmed by the boss. I only demonstrate this for a short time before I bust through and fly around the boss's bullets :). At the end of the boss fight, he begins to explode in a grid-like fashion of tile removal. Notice how a manage to speeze through these sections and pass through the boss before he is done exploding.

Level 7

Finally, I don't have to worry about which upgrades I get. I upgrade to double and laser in this level just to try to show off these weapons a little. From the beginning of the entrance way to the final hallway was mostly played by a bot. I use basicbot (programmed into FCEU by luke) to create a sequence of random directions. With the proper set up, I was able to get the program to spit out random directions while still avoiding death and gradually moving left & right in a chaos-like pattern.
The boss requires nothing but waiting and not smashing into it. As a result, I see no reason to record input there. So I try to find the earliest frame that I can end the movie and still float into the room and complete the game. In this case, I think the early stopping creates more excitement and extra entertainment value :)
I achieve such an early input stop by using the shield (which is conveniently off screen ;) By using the shield, I am able to stop input much earlier since the ship can absorb 5 bullets.
Wow, long submission text, I hope you enjoyed :)

Bisqwit: Submission file updated.

Truncated: Accepted because of overwhelming user feedback.
Last Edited by adelikat on 9/10/2023 5:12 PM
Page History Latest diff List referrers