The game's long and varying, it has tons of little tricks here and there. Most of these tricks are hard to repeat by simply copying button presses - you'll need to sync these with several in-game timers, and sometimes it's just impossible to copy a trick perfectly.
Here's an example. When you hold B button for long time, current character will begin charging his special movement. In fact the charging can start only when GlobalTimer is dividable by 4. Depending on a situation this can make you lose 0-3 frames where previous movie didn't lose - even if you copied its input precisely.
Plus, this game isn't hexedit-friendly because subpixel Y coordinate doesn't reset anywhere, and if you change it by remaking half of a level, chances are that all coming levels will desync. Still I managed to make several hexedits, because I don't feel like redoing everything. At least for now.
This project is my largest TAS by far. It took about 6 months of work (alongside with other stuff).
Improvement summary
Not taking old tricks into account, here are timesavers used in the movie:
- warp glitch (see Skipping Acts section below)
- using Memory Watch to monitor 20+ values (see Memory addresses)
- new strategies with some bosses
- some degree of subpixel optimization
- abusing Select feature
- zipping thru walls (almost unnoticeable though)
- reducing lag (although not much of it was present)
- double damage (used in two last battles only)
- various context-sensitive tricks (see Level by level section)
Route planning
In no-warps run you can play Yellow Planet before Red Planet without any time difference, but for "warps" movie it's necessary to have full Jenny power for the boss of Yellow planet, so there's only one way.
As for other characters, Blinky has to acquire Flying Lv2 before using warp glitch on Red planet, Deadeye and Willy and Bucky can wait for powerups until Salvage chute.
Skipping Acts
This glitch was known long before as "Yellow planet skip", because on that stage it was possible to perform in real time. Legend says, if you die in Act 4 of Yellow Planet, you may magically appear on different level or even in boss room.
Haha, well, the trick is to make some platform-like object
carry your dead body to finish line before screen goes black. On Yellow planet it was one of those flying toadships. But this would work in any act - dead character can exit level by touching finish line as well as alive characted can do. It's just that dead character can't walk himself.
But what's more funny, dead character can exit level
several times (which is impossible in normal condition - when you leave a level, you immediately appear in next level). Although it's invisible on screen, dead characted (carried by an object) keeps bumping finish line!
What's really important here, each level has its coordinates of "exit". For example, if you're supposed to exit level at the bottom of screen, you won't exit it if your Y coordinate is higher than some hardcoded value. Thus, only if a sequence of levels have similar coordinates of finish line, you can zoom trough all of them until level counter comes to a level with different finish line or without exit at all (bosses room). Or until your dead character stops bumping finish line...
Useful memory addresses
| Address | Meaning |
| x1A | GlobalTimer |
| x23 | LAG indicator |
| x660 | Shooting timer |
| x66 | Act counter |
| 10F | Planets progress map |
| x520 | zeroBG player X coordinate |
| x5F0 | zeroBG player DX velocity, low byte |
| x5E0 | zeroBG player DX velocity, high byte |
| xFD | background X - add to x520 |
| x2D | bg DX - low byte |
| x2C | bg DX - high byte |
| x510 | zeroBG player Y |
| x610 | subpixel Y - very important thing |
| x52F | OBJECTS: Energy Ball X |
| x51F | OBJECTS: Energy Ball Y |
| x5EF | OBJECTS: Energy Ball DX |
| x62F | OBJECTS: Energy Ball DY |
| x5A1 | OBJECTS: Boss Life |
| x6A1 | OBJECTS: Boss Invulnerability |
| x5A2 | OBJECTS: Cannon 1 Life |
| x5A6 | OBJECTS: Cannon 2 Life |
| x5A7 | OBJECTS: Cannon 3 Life |
| x5A8 | OBJECTS: Cannon 4 Life |
| x5A9 | OBJECTS: Enemy 1 Life |
| x5AA | OBJECTS: Enemy 2 Life |
| x5AB | OBJECTS: Enemy 3 Life |
Note: Boss Invulnerability Timer works in unusual way: when 2nd bit is cleared (i.e. x6A1 AND 2 = 0), boss object doesn't collide with anything.
SELECT features
When you change playable character, all associated objects disappear right away, even if you have only one character to choose from.
For Bucky this means that all bullets will disappear the frame you press SELECT, so you can erase your own bullets and then shoot new much earlier.
For Blinky it's even more useful: you can erase dust from destroyed blocks in 1 frame (this saved a lot of time at Blue Planet and Cell). Pressing SELECT at the frame when bomb hits an ice block will even cancel enemy drop (if there was enemy hidden inside the block).
I also used this trick (glitch?) to erase slowly flying projectiles after thay completed their purpose. Unfortunately, this doesn't work with Jenny's energy ball, because you can't change charged character.
Possible improvements
Taking damage would save about 1 minute, but currently I'm satisfied with no-damage run.
As for this TAS, there's still dozen of frames to squeeze (see level by level explanations), but nothing really significant, I presume.
WARNING: The game contains 69 acts!
WARNING 2: Spoilers ahead!
Title screen
Saved 7 frames by entering password rather than hitting START button.
When you begin the game by choosing GAME START, you must wait some time before screen actually goes black and then intro appears. But password "HARD!" can be entered faster, and it throws you right to intro movie.
Green Planet
Act 1 - Contra rip-off
Saved 1 frame by shooting turrets rather than avoiding bullets. In Genisto's movie there were insvisible slowdowns before each ground turret.
Act 2 - Great Tree
Saved 1 frame by having better Y subpixels and thus landing on one branch frame earlier. BTW, while I was recording this level, I didn't know much about subpixels, but relied strongly on rerecords.
Act 3 - Thick jungle
Saved 190 frames by fixing obvious mistakes which were mentioned in old movie
topic.
Namely these are: not wasting time for powerup (Bucky doesn't need it until, maybe, Cell stage) and jumping normally instead of charging.
Act 4 - Waterfall
No time difference, because it's mostly autoscroller. Pretty repetitive also. Just fastforwart through it.
Act 5 - Stream of toadships
Saved 1 frame by better precision with jumps. I'm not sure this level is played perfectly.
Act 6 - Boss: Toadborg
Saved 4 frames by more agressive shooting. The boss is invulnerable most of the time, but if you're standing far, you can start shooting little bit earlier.
Heh, this guy seemed almost invincible in BOH TV series, but here he has only 40 HP and stupid set of attacks. For example, next boss - Al Negator - has 160 HP, which is inadequate in terms of BOH show.
Total time saved on Green planet - 197 frames
Blue planet
Act 1 - Ice blocks
Saved 99 frames by using Select feature. Some necessary-to-destroy blocks contain hidden enemies inside them. When hidden enemy appears, it has pretty long period of invulnerability, which slowed Genisto alot.
Act 2 - Snakes1
Saved 11 frames by better tactics. These snakes are different from Battletoads' ones!
Act 3 - Snakes2
Saved 26 frames by manipulating last snake to appear later. Not taking powerup could save couple of frames, but I need Lv2 Flight for Act 6.
Act 4 - Snakes3
Saved 12 frames by jumping rather than flying.
Act 5 - Snow battle
Nothing changed.
Act 6 - Iceberg
Saved 69 frames by leaving room earlier. Yeah, I'm surprised as well.
Act 7 - Ice mines
Saved 10 frames by reducing lag with Select trick and by zipping trough ice block at the end of level (watch in Frame Advance).
Act 8 - Hydraulics
0 frames gained, but at least here I've begun to sync actions to music.
Act 9 - Ice cave
Saved 57 frames: actually 59 frames were saved by Select Feature, but 2 frames were lost in the process of hexediting (that was damn hard).
Act 10 - Boss: Al Negator
Saved 15 frames by attacking boss earlier and more agressively. This battle still may be improvable by 1-2 frames.
Total time saved on Blue planet - 299 frames
Red planet
Act 1 - Volcanoes
No time difference here. Sometimes I find it funny to make halfassed shooting with SELECT glitch.
Act 2 - Lava cave
Saved 56 frames by not wasting time for powerup. Jenny doesn't need full power for killing the boss of this planet in less than 1 second.
Don't ask me how the glitch with boulder teleporting works (at the end of this act).
Act 3 - Running from lava
Saved 1 frame by better precision with jumps. With further subpixel optimizations this level may be improved by couple of frames more.
Act 4 - Salamander rip-off
Saved 4 frames by better luck with firebows' timing. Taking 1st powerup doesn't cost anything, because you still need to wait for 1st firebow to fade.
Act 5 - Climbing up
Saved 57 frames by manipulating platforms to scroll in more convinient manner. I wonder why Genisto didn't find this method.
Act 6 - Toad base
Lost 202 frames by trading 1 life for warp glitch.
Act 7 - Green pacman race
I'd definitely use free powerups in the level, but alas.
Saved 1491 frame by skipping this level. Total time saved from the warp - 1289 frame.
Act 8 - Boss: Green pacman
Saved 27 frames by walking closer to enemy, so that Jenny's energy ball receives "reflected" status before actual release. Once reflected, the ball can freely travel trough any reflective surfaces, so it can touch vulnerable center earlier - 1st frame possible.
Pretty nice glith, I think.
Total time saved on Red planet - 1434 frames
Yellow planet
Act 1 - Mechanical worms
Saved 12 frames (6 frames per each worm) by avoiding bullets rather than killing wormhead.
Act 2 - Plain battle
Nothing can be improved.
Act 3 - Toadships again
Saved 2 frames - there was unnoticeable mistake in Genisto's run.
Act 4 - Riding toadships
Lost 137 frames by trading 1 life for warp glitch, but saved 386 frames by skipping vertical part of this level.
Act 5 - Asteroids
Saved 1054 frames by skipping this level
Act 6 - Minecarts
Saved 2816 frames by skipping this level! Total time saved from the warp - 4119 frames.
Act 7 - Boss: some kind of tank
Saved 4 frames by polishing old strategy with Memory Watch.
Total time saved on Yellow planet - 4137 frames
SUDDENLY! Saved another 3 frames during dialogs. Note that there are places where you don't have to scroll text as fast as possible.
Cell
Act 1 - Cells1-1
Saved 7 frames by zipping trough solid blocks (near the end of level).
Act 2 - Cells1-2
Lost 7 frames because of 32-frames rule (electricity switch), but then saved 2 frames by using conveyor belts better.
Act 3 - Boss: Jenny
Saved 81 frame by attacking boss earlier (shooting down with Bucky) and better precision all the way.
Act 4 - Cells2-1
Saved 53 frames: 4 frames by using Select feature to destroy obstacles faster; 49 frames because of lucky timing with disappearing platforms.
Act 5 - Cells2-2
Saved 12 frames by better jumps and Select feature.
Act 6 - Boss: Willy
Saved 4 frames by starting battle earlier (guess what helped to crush blocks faster).
Act 7 - Cells3
Lost 25 frames because of worse timing with disappearing platforms. Also, if Bucky had JumpPower Lv2, this room could be done several frames faster. BTW, in no-warp run there are several places to take powerups without losing time.
Act 8 - Lift
Autoscrolling level - nothing to improve. I tried to destroy all the bombs at the beginning, but seems it's really impossible even with Select features.
Act 9 - Boss: Deadeye
Traded 2 frames for pause sound - I find it hilarious how KONAMI jingle corresponds to one sound effect in the game.
Total time saved on Cell stage - 125 frames
SUDDENLY: Saved 4 frames out of nowhere during character dialogs.
Salvage chute
Act 1 - Triplebots room
Saved 7 frames by taking powerup for Blinky instead of Willy. Actually, Willy needs Lv2 Focus only for Magma core boss.
Act 2 - Horisontal Presses
Saved 16 frames by manipulating presses.
Act 3 - Bugs
Saved 22 frames by precisive dancing among bugs.
Act 4 - Slimes
Lost 1 frame during levels transition. I guess that's first payment for switching characters too much - which resulted in 1 frame of lag.
Act 5 - Machine presses
Lost 1 frame because of worse timing. To avoid this, I could lose 1 frame in Act 3 or 2, but final result would be the same because of 8 frames rule.
Act 6 - Dark room 1
Saved 3 frames by doublejump instead of single jump.
Act 7 - Dark room 2
Saved 3 frames by better precision with jumps.
Act 8 - Dark room 3
Saved 1 frame by doublejump instead of single jump.
Act 9 - Creepy swill
Saved 19 frames by taking additional momentum from floating cans.
Act 10 - Boss
Saved 46 frames by using more effective strategy when Jenny stands closer to target and makes 2 calculated charges.
Total time saved on Salvage chute - 115 frames
SUDDENLY::: Saved 4 frames someow
Center of magma tanker
Act 1 - Engines1
Everything remains the same.
Act 2 - Engines2
Saved 6 frames by starting charge earlier (because of better subpixels).
Act 3 - Engines3
Saved 9 frames with more accurate walljumping.
Act 4 - Engines4
Saved 3 frames because of better subpixels.
Act 5 - Electricity hall
This level is very annoying. In no-damage run you have to wait long time before each lighting. And what's worse, lightings depend on GlobalTimer, thus all the frames I saved in previous 4 acts are lost as well as it was with Genisto run. Oh well, at least I recovered 5 frames at the end of the level by one accurate jump backwards. Lost 13 frames.
Act 6 - Zombie toads
Saved 9 frames by better precision with jumps.
Act 7 - Conveyor belts
Saved 27 frames by verious optimizations (loseless jumps on belts, walljumps, better subpixels for 1-frame collisions).
Act 8 - Rotator1
Lost 7 frames because of worst timing ever (stupid 8 frames rule!)
Act 9 - Rotator2
Saved 1 frame by killing 2nd toad faster and thus avoiding lag.
Act 10 - Rotator3
Saved 1 frame by avoiding lag.
Act 11 - Rotator4
No improvements here.
Act 12 - Snakes4
Saved 12 frames by sticking closer to 1st snake's head and then jumping forward 14 frames earlier, but 2 frames were lost on second snake.
Act 13 - Snakes5
Saved 14 frames by sticking closer to 1st snake's head. I guess this is frame perfect strategy.
Act 14 - Snakes6
Saved 19 frames by sticking closer to 1st snake's head and by daring tactic with 1st snake.
Act 15 - Boss: Core
Saved 87 frames by cool strategy with switching Jenny and Willy. While some parts of this battle may seem unoptimized (if watched in frame advance), there's no space to improve it more, because laser cannons have long invulnerability period when they shoot.
Total time saved on Center of magma tanker - 168 frames
Escape
Act 1 - Shortest level
Nothing to improve there.
Act 2 - Slow shoot-em-up
Saved 1 frame by avoiding lag. At first I wanted to play all the level in "broken aircraft" mode, but there are long spikerooms, so I realized it would look dumb.
Act 3 - Glass Gates
Nothing improved.
Act 4 - Fast shoot-em-up
Look, this is autoscroller! No improvements for you.
Act 5 - BOSS: Guardian
Saved 7 frames by reducing lag. In fact, it's possible to finish flying head 73 frames faster, but there's kind of 256 frames rule coming from BG scrolling rule. So I goofed a little bit before finishing the boss (right before 256 frames chunk ended).
Act 6 - BOSS: Giant battleship
Yay for shmup cliches! Saved 3328 frames by destroying battleship in the first round.
At first I thought that's gonna be long (almost 2 minutes) and boring battle, but accidentally I've found a way to deliver double damage (2x2HP per each 11 frames) with Willy's one-shot-does-it-all blaster. The trick is to find good place and time to shoot. Unlike previous bosses, the battleship vulnerable spot is large enough for Willy's projectiles to deliver damage twice.
That 256 frames rule still remains here, so I didn't aim on perfection.
Act 7 - BOSS: Air Marshall
Quick and tightly optimized battle. The boss' object is just little bit less than needed to deliver double damage! So when it moves to the right, Willy's blaster can make double damage, but not when it moves to the left. A couple of times I managed to deliver double damage when Air Marshall stops, but it required a lot of calculations involving x6A1 timer management. This battle took a lot of planning.
Saved 294 frames by more agressive strategy.
Total time saved on "Escape" stage - 3630 frames
Total time saved during the game - 10123 frames
NesVideoAgent: Hi! I am a robot. I took a few screenshots
of this movie and placed them here.
Here goes! Feel free to clean up the list.
adelikat: Nice improvement, accepting for publication. Also, very nice submission text :)