Bucky O'Hare NO-DAMAGE TAS

Recorded with FCEU 0.98.16
Completed in 22:14 (80016 frames)

About the game

Bucky O'Hare is my favourite NES platformer. The game is action-packed, has cool music/gfx and clever gameplay similar to Megaman games.
Five playable characters of the game are very different from each other. Not only their weapons and special powers strongly differ, but even their collision boxes aren't always the same.
Characters can be switched any time by pressing Select. This doesn't slow you down, but can be used in many various ways, so in the run I pressed SELECT more than 500 times.
The game is longer than most of NES games, and what's important, it's much more variable than any of NES platformers. It features dozens of different gameplay schemes - from fast-paced action to puzzle-like rooms. Finally, there are 7 levels of shmup fun.
KONAMI has made real masterpiece.

TAS features

Essentials

This is 10123 frames (2 minutes 48.7 seconds) improvement for currently published movie. Genisto did good work with polishing the game, and when I started the project I hoped to improve his run by 5-6 seconds, not more. But after month of studying the game I found so much timesavers that at the end only few levels weren't improved.
Maybe it would be good to have damage-run, but only as second version alongside no-damage movie. I beleive such amazing game as Bucky O'Hare deserves two runs.
The run suits all of the following definitions:
  • Aims for fastest time
  • Contains speed/entertainment tradeoffs
  • Takes no damage
  • Uses password
  • Plays at hardest level
  • Abuses programm errors
  • Uses death as shortcut
  • Manipulates luck
  • Genre: Platform
  • Genre: Shooter

About HARD mode

In my childhood I first met the game on some pirate cartridge. This game seemed to be world's difficult platformer because your character immediately died from any hit or wrong collision. Even though it was extremely hard, the gameplay still was awesome, so I kept conquering it, frequently asking myself why there's "LIFE gauge" at the bottom of screen, and what are those heart power-ups made for. Only after several years the truth has been revealled.
During NES era KONAMI was frequently adding tricky anti-piracy protection into their games. In all four TMNT, TinyToon and some other games there's special procedure which verifies if there is copyright text on title screen. BTW, KONAMI has chosen rather unusual way to do it - they read VRAM contents (it's like watching what's on the screen).
And when checksum don't match, this cruel procedure doesn't simply freeze the game (it would be too obvious for pirates to fix). Instead it sets one bit somewhere (in Bucky O'Hare it's x3B in RAM). Then, at some place the game's gonna be ruined. For example, in TMNT3 first Shredder restores his energy too fast, so it's impossible for player to defeat him - thus the game becomes unbeatable. In TMNT-Tournament Fighters final battle loops infinitely. And in Bucky O'Hare the game kills your character after any hit.
What's more funny, today I find that pirate cartridge mentioned at many discussion forums on different languages. So I guess it's kinda worldwide case. I've heard that some hardcore players still managed to beat the game without touching anything. That sounds simply amazing, and I'd definitely want to look at such speedrun.
Meanwhile I made my tool-assisted speedrun where the situation is simulated by entering special password on title screen. After entering "HARD!", x3B is set to 01 manually, and the run begins.

Making the run

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

AddressMeaning
x1AGlobalTimer
x23LAG indicator
x660Shooting timer
x66Act counter
10FPlanets progress map
x520zeroBG player X coordinate
x5F0zeroBG player DX velocity, low byte
x5E0zeroBG player DX velocity, high byte
xFDbackground X - add to x520
x2Dbg DX - low byte
x2Cbg DX - high byte
x510zeroBG player Y
x610subpixel Y - very important thing
x52FOBJECTS: Energy Ball X
x51FOBJECTS: Energy Ball Y
x5EFOBJECTS: Energy Ball DX
x62FOBJECTS: Energy Ball DY
x5A1OBJECTS: Boss Life
x6A1OBJECTS: Boss Invulnerability
x5A2OBJECTS: Cannon 1 Life
x5A6OBJECTS: Cannon 2 Life
x5A7OBJECTS: Cannon 3 Life
x5A8OBJECTS: Cannon 4 Life
x5A9OBJECTS: Enemy 1 Life
x5AAOBJECTS: Enemy 2 Life
x5ABOBJECTS: 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.

Level by level

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 :)