Run objectives
- Started on BizHawk 1.11.7, finished on 1.12.1
- Uses maximum difficulty
- Entertains without sacrificing frames
- Average glitch abuse
- Mild luck-manipulation
- Abuses death once... after the movie has ended
- Genre: Platform
- Genre: Shooter
About the game
Contra: The Alien Wars is a GB port of the SNES game Contra 3: The Alien Wars, though the engine is different to the point of looking like a different game; apparently, everything was rewritten from scratch. Many advanced animations too hard to simulate on GB were heavily simplified, while level 4 and the final boss were removed entirely.
The game is a typical run 'n gun game: a side level scrolling with platforming elements (except level 2 and 4) and long-range weapons to use against the enemies.
The game features SGB color support and SGB2 wav sound support (https://youtu.be/ksHirSih4XU go at 0:50 ). Unfortunately, this little-known audio feature is currently not supported by emulators, so I decided to stick with the regular GB, also because the game does not feature a custom SGB border.
About the run
This run is much less trivial than you may think. It has a lot of frame-perfect optimizations that saved whole chunks of frames. Since I'm not able to disassemble, I used a lot of trial and error to figure out how to save frames everywhere I could. I think I did a good job, though some frames could still be saved there and there by doing much more study.
I've tried my best in order to make waiting times and travelling less boring.
Game mechanics
As you may have noticed if you played the movie on emulator, more than 75% of the frames are lagged, but this is not technically lag: the game does not freeze during these frames because it actually polls inputs every 4 frames.
There are 6 weapons in this game, but I only used 2 of them: Spreader (aka Shotgun) and Crusher (aka Cannon).
Spreader shots consists in 3 bullets diverging from the player in a wide attack; good on close and medium distance.
Crusher shots are single bullets that explode upon contact or after having travelled a certain distance. Extremely luck-based, it's the only thing that can be used effectively for luck-manipulation; good on any distance.
Up to 6 player bullets can exist at the same time. Any weapon bullet disappear the moment it gets out of screen. Additionally, Spreader bullets also disappear when they touch an enemy, be it a vulnerable part or not.
Pressing select uses a Smart Bomb, that destroys any non-boss enemy for the next 5 frames.
Glitches
MachineShotGun
When 3 Spreader bullets disappear at the same time, and there are also other 3 bullets still on screen, the Spreader gun will magically fire again in the next frame. This allows to fire again earlier, depending to how close you are to the enemy. So if you fire from point blank, you will deal 3 HP damage on every frame, until one of the other bullets on screen disappear. Note: for some reason, it may or not may work depending on which of the 6 memory addresses are being used by the 3 bullets on screen.
When 3 Spreader bullets disappear at the same time, and there are also other 3 bullets still on screen, the Spreader gun will magically fire again in the next frame. This allows to fire again earlier, depending to how close you are to the enemy. So if you fire from point blank, you will deal 3 HP damage on every frame, until one of the other bullets on screen disappear. Note: for some reason, it may or not may work depending on which of the 6 memory addresses are being used by the 3 bullets on screen.
Moon Step
Named in honor ofsniqOne Piece. This is literally as it appears in the manga: the player is able to jump on air multiple times. This is thanks to a programming overlook: the programmers implemented the ability to jump when the player has just started falling from walking over a ditch, for exactly 10 frames. The fact is that this 10-frame countdown does pause if you stop falling, so it is possible to jump up to 10 times in a row or jump after having let got from the monkey bars.
Named in honor of
Level comments
Level 1
About half of this level is pretty plain. There are two buildings that will block the player's path; these must be destroyed by shooting at its weak spot. In order to be able to fire faster with Spreader gun, I've carefully chosen moments in which I delayed the firing. I didn't used the tank because it's just slow as a slug. I picked Crusher gun in order to luck-manipulate a hot vapour sprout for making it not blocking my path, and also manipulate the starting place in level 2.
About half of this level is pretty plain. There are two buildings that will block the player's path; these must be destroyed by shooting at its weak spot. In order to be able to fire faster with Spreader gun, I've carefully chosen moments in which I delayed the firing. I didn't used the tank because it's just slow as a slug. I picked Crusher gun in order to luck-manipulate a hot vapour sprout for making it not blocking my path, and also manipulate the starting place in level 2.
Level 2
In order to get to the boss, you have to destroy 5 enemy pods present on the level. The fastest way to do this is by using Smart Bombs the moment the pod can be hit. The boss was pretty tricky: I managed to destroy its first 3 spikeballs just in time, by putting some efforts in optimizing the usage of MachineShotGun as much as possible. The other 3 were a bit easier, thanks to the better position got while the boss moved, then its final weak spot got vulnerable and I destroyed it the same way as well.
In order to get to the boss, you have to destroy 5 enemy pods present on the level. The fastest way to do this is by using Smart Bombs the moment the pod can be hit. The boss was pretty tricky: I managed to destroy its first 3 spikeballs just in time, by putting some efforts in optimizing the usage of MachineShotGun as much as possible. The other 3 were a bit easier, thanks to the better position got while the boss moved, then its final weak spot got vulnerable and I destroyed it the same way as well.
Level 3
I've let myself getting grabbed by the locusts for a moment and quickly killed them right away, in order to advance faster. Then I've killed the first mid-boss by carefully getting in a place from which I could hit its weak spot with MachineShotGun. Its hitbox is very little and it's surrounded above and on sides by a non-weak hitbox. The autoscroller part with the second mid-boss is unskippable. But I heard you like close calls, so I've put close calls in close calls in order to make it less boring. The optimization with the fight was pretty neat. I've picked up Crusher in order to manipulate starting place in level 4 and, well, using it during that level.
I've let myself getting grabbed by the locusts for a moment and quickly killed them right away, in order to advance faster. Then I've killed the first mid-boss by carefully getting in a place from which I could hit its weak spot with MachineShotGun. Its hitbox is very little and it's surrounded above and on sides by a non-weak hitbox. The autoscroller part with the second mid-boss is unskippable. But I heard you like close calls, so I've put close calls in close calls in order to make it less boring. The optimization with the fight was pretty neat. I've picked up Crusher in order to manipulate starting place in level 4 and, well, using it during that level.
Level 4
Crusher gun was the best weapon for clearing the level as fast as possible; the boss fight did benefit as well. I destroyed the last Ant Nest with a spare Smart Bomb because it was the best way I could use it.
Crusher gun was the best weapon for clearing the level as fast as possible; the boss fight did benefit as well. I destroyed the last Ant Nest with a spare Smart Bomb because it was the best way I could use it.
Level 5
These giant heads vomiting flying shrimps are the only mid-bosses that die instantly when hit with Smart Bombs, so I've used all the last ones on them. The Final boss fight was very hard to optimize... If only I killed it 1 frame faster, I would have been able to stop inputs 4 frames earlier, due to how the input polling works for this game. I wasn't able to prevent the player from dying once without having to make the movie longer. Maybe with a bit of luck-manipulation it could be possible to avoid it.
These giant heads vomiting flying shrimps are the only mid-bosses that die instantly when hit with Smart Bombs, so I've used all the last ones on them. The Final boss fight was very hard to optimize... If only I killed it 1 frame faster, I would have been able to stop inputs 4 frames earlier, due to how the input polling works for this game. I wasn't able to prevent the player from dying once without having to make the movie longer. Maybe with a bit of luck-manipulation it could be possible to avoid it.
Possible improvements
- This game has some very obscure loading time mechanics and frame rules, on which I didn't struggled much.
- One frame or maybe two can be saved on level 1 boss, with some optimizations of the MachineShotGun usage during the initial fase.
- One Smart Bomb can be obtained by committing suicide right before entering the level 2 boss fight. I figured about it after having finished the run... Though I must say that it would save an incredibly small amount of time, since I already used Smart Bombs for every major time saves (bosses and most mid-bosses get only 5 HP damage from Smart Bombs). Edit: this would also require to start level 2 from the other side in order to get Spreader gun again after dying, and this would waste about a second due to slower route.
- Level 4 is very well optimized, but Luck-manipulation for Crusher gun is the most painful thing I've seen in TASing world untill now.
- Some frames may be saved on the final fase of final boss, the one in which you have to hit its core on the head. Maybe.
Conclusion
Even without having made serious researches, I think this run is very optimized. Just try to improve it, I dare you.
Masterjun: Judging.
Masterjun: Great TAS. It looks really optimized and very entertaining. It helps that the game is really diverse. Viewer feedback is good as well.
Accepting to Moons.
Fog: Processing.