Submission #1451: adelikat's NES Contra in 08:57.98

System Nintendo Entertainment System Emulator FCEU 0.98.16
Game Version JPN Frame Count 32279
ROM Filename Contra (J).nes Frame Rate 60
Branch Rerecord Count 21640
Unknown Authors adelikat
Game Contra
Submitted by adelikat on 2/11/2007 7:12:00 PM

Submission Comments
Bimmy and Jimmy at it again, this time they brought guns.
This is my long awaited two player contra run. It is 948 frames (15.8sec) faster than architorture's submission. It is 552 frames (9.2sec) faster than Genisto's 1 player run after adjusting for the ROM change. (Otherwise it is 2168 frames faster than Genisto's).
It is also faster than a "theoretical" 1-player run (a run that includes the jumping glitch of lv1 and other tricks) by 294 frames. Because of this I think it should obsolete Genisto's run rather than be published along side it.

New Tools

Like my Gradius movie, I used a macro patch for FCEU to allow me to spit out a specific button combo with a single click of a button. This was used to optimize the spread gun in the base levels.
I also used a "multi-tracking" patch which allowed me to record input for a short segment, then record over it with additional input. This allows me to record each player separately. This was extremely useful for the base levels and boss fights.

Weapon Choice

For levels 5-8, the ideal weapons will be a spread gun for each player plus 2 rapid upgrades each (Rapid upgrades increase the speed of the player's bullets).
However, dual spread guns is sub-optimal for the two base levels due to lag, the inability to get 2 rapid upgrades for player 2, and the limitation of the number of bullets on the screen. The 2nd best weapon in the game is the basic weapon which can shoot 4 rapid fire shots. I use a 1 spread, 1 regular weapon set up until level 5.

Rom Choice

Like Architorture's 2-player run and my Pacifist run I use the Japanese version of Contra. This allows me to skip the between level screens saving about 1667 frames over the course of the run. The Japanese version of the run also has more interesting level designs; particularly lv5 & lv8.


Optimizing the Spread Gun.

The hardest aspect of making this run is the spread gun. Normaly, it shoots a spread of 5 bullets out in different directions. However there is a 10 bullet limit on the screen (per player). By strategically angling the spread you can cause 1 bullet to leave the screen before the others. If you fire at this moment, you get a single bullet. If you repeat this process you get a single line of bullets firing at a particular direction. This is especially exploited in the base levels. This single line technique was used by Genisto.

Single Spread optimization

In the base levels, Genisto shoots enemies in order to achieve the single spread. Once you have this single spread, you must continue to fire in order to maintain it. This gives you seemingly little control over when bullets hit their targets. However, with a lot of planning you can slowly alter the formation of the bullets. You do this by firing 1 less than the number of "rows" you have. (If you have a spread of 5 rows, shoot 4). Then wait some frames to fire the final row. This will pull one of the rows back. Repeat the process for each row, and over the course of many spreads, you can change the position of each bullet. By planning ahead at the beginning of each room, I was able to get each bullet to be 1 frame apart and hit the targets at the first possible opportunity. This saved a good deal of time in each base level.

The level 3 jumping glitch.

This was used extensively in my pacifist run and used once in genisto's run. By moving left or right while jumping you can cause the player to jump a few pixels higher or LOWER by manipulating the vertical scroll. This can be used to reach platforms normally unattainable. Also, with this run I used it to lower all other jumps, resulting in 1-2 frames saved for each jump.

Boss Fighting

Bosses can only lose 1 hp per frame. If you hit him point blank with a spread gun, it will do 5 damage over the course of 5 frames. The trick then, is to do a steady amount of damage rather than blast him with two spread guns. Bosses can be overloaded with incoming damage that some bullets will pass right through them (you will see this happen occasionaly in the run. It can't always be avoided since you must shoot a certain amount of bullets with the spread gun). The fastest possible boss fight would then be to begin damage on the first frame that its hp is loaded into memory, and do 1 damage until it is destroyed. Most/all boss fights were done within a few frames of this theoretical fastest completion.

Summary & Special Thanks

  • Uses FCEU.16 with macro & multi-tracking patches.
  • Uses death to save time
  • Manipulates luck
  • Abuses programming errors in the game.
Thanks to HerooftheDay for help with the spread gun and for a time saving trick in level 1, Miau for his macro & multi-tracking patches to FCEU (which were critical in making this run). Thanks to JXQ, Brushy, Zurrecco, Cardboard, and Baxter, for motivation & listening to me ramble about the game.

Level by Level commentary

Level 1

Fairly simple level. Jumping costs 1 frame so the main challenge it to minimize jumping. I get a spread gun for player 1 and 2 rapid upgrades as well. I used a the regular gun + spread combo to improve the boss significantly. However, with two players, the boss does not become vulnerable until 40 frames later, so I only had a net savings of a few frames.

Level 2

The first base level. The best weapon choice for the rooms of this level would be two regular weapons or two lasers. However, it loses time overall due to slower level 1 & level 2 boss fights. I was able to optimize the spread gun into 4 rapid fire blasts that hit the icons on the first frame possible. This combined with a well timed blast from player 2 meant that I hit each icon in the fastest possible time.
To maintain this 4 row formation of the spread gun, I must keep shooting it for the entire level. To get this formation set up in the first place, I must shoot human enemies.
The boss fight was greatly improved by the use of 2 players and use of the spread gun.

Level 3

The jumping glitch was used to land on high platforms several times. One extra was found compared to my pacifist run (I guess I should redo it now :/)
I also used it to minimize the height of other jumps. This saved 1-2 frames on each jump, which added up by the end of the level. I do not get a 2nd spread here either because level 4 will be slower.

Level 4

More tedium with optimizing the spread gun. I also change the number of rows up to 8 for some rooms but down to 4 in others. 4 is necessary to optimize rooms with only 1 icon. The spread+regular weapon out performed the two laser strategy by architorture by about 80 frames in the rooms of this level.

Level 5

This is the major loss of adding the 2nd player. The tanks stop much later than with a 1 player run. I lost 208 frames from this. The boss was significantly faster though, making it a net loss of 160 for the level compared to Genisto.

Level 6

Luck becomes a problem here. Overall I fared better than architorture but about the same as Genisto in the timing of the flames. The boss was destroyed within 1 frame of the theoretical limit and with minimal stopping. It looks more like a casual stroll rather than a fight :)

Level 7

Lag costs a lot of time here compared to a 1 player run. Also, the 2nd player keeps me from exploiting the extra momentum from one of the carts. The boss was only marginally faster than genisto's because the boss isn't vulnerable until 40 frames later due to having 2 players. Overall, I lost 59 frames compared to a 1 player run.

Level 8

The mini-boss was done only a few frames faster than Genisto due to lag. The final boss was done perfectly, 1 hp per frame. But Genisto also did this with 1 player so it was a push.
Well, that is about it. Enjoy.

Truncated: Accepting. I strongly recommend this movie obsoleting the current 1-player movie, because it is both of higher quality and has more action going on. A third category for this game would be superfluous.

Last Edited by adelikat on 1/2/2022 9:38 PM
Page History Latest diff