Submission #3356: feos & MESHUGGAH's NES Battletoads in 11:04.72

Nintendo Entertainment System
warps, 2 players
(Submitted: Battletoads (U) [!].nes USA)
FCEUX 2.1.6
39949
60.0988138974405
60488
Unknown
Submitted by feos on 11/11/2011 10:04 PM
Submission Comments
Battletoads NES TAS by feos & MESHUGGAH, improvement over the fastest Battletoads run (1p warps) is 8530 frames (2:22.16). We improved the glitches, the strategy and polished the action overall comparing to both 1p & 2p runs.

Movie objectives

  • Emulator used: FCEUX 2.1.6 (syncs on official 2.1.4 release)
  • 2 Players
  • Uses death to save time
  • Uses warps
  • Heavy glitch abuse
  • Heavy luck manipulation

History

After I finished Battletoads & Double Dagon I was searching for a good game suitable for an interesting TAS. I already had some thoughts towards Battletoads, but didn't want to merely polish the previous runs (that was rather easy due to my use of TASEditor and the age of these runs) without implementing any new glitches.
While reading Emu-Land.net forum I saw how ReZistanse played around with the jet death glitch, breaking the game & creating various weird objects. The point of the glitches was that you can call the Level End object in levels 3 and 5 after sitting on a jet/surfboard with just one toad and dying.
I started deep trial'n'error work to get this 0x7F in address 0x3CD, then asked some guys advanced in NES code knowledge to help me to improve my own WIP. After finishing the whole test run of the game I asked in IRC if MESHUGGAH would like to help and he kindly agreed.
Now it's 2011.11.11 and I'm submitting the result of our work.
I used this script in my run.

Stage by stage comments

Level 01: Ragnarok's Canyon

Not a big room for action as we need to kill only 2 monsters & hit the Warp. But yes, the right toad jumps onto a rock with low speed normally (even in Phil's movie), and you shall get the proper position for him to be able to jump at the highest speed (128, the speed of normal walk & jump). Also you shall not hit the scrolling screen border as you lose all your speed at the moment. After touching the upper ground I make the toad run, as always.
Warp to level 3.

Level 03: Turbo Tunnel

There is a trick in doing a final kick to an enemy with stunned status. One toad charges him and just before the first lag frame you shall press B with a second toad. The enemy status is already set to stunned in that pre-lag frame (while the damage is accounted only next frame) and it allows you to initialize the deadly blow earlier.
The rats get dropped from midair outside the screen. If you make the first hit too early, the second, kick, won't reach the enemy because he's offscreen. The last rat, falling from above, is scrolled away alive as in FODA's run.
Green Vaders (stealing your HP) were killed with laggy air charges in Phil's TAS, FODA used only simple hits and so did I.

Jet Death Glitch

One toad gets on the jet, another holds the screen from scrolling. The dead end for jets is tied to the screen position, not hardcoded into a level position, so, if you keep the screen left enough you can easily jump into a hole.
After respawning you can affect the layout and palette of the level heavily and have a great direct access to objects addresses. The main guess was that the game thinks you are in a race mode and creates obstacles, but because of pointers' faults they turn into wrong objects. Actually you can create any object of the game, but the target one is Level End (0x7F in address 0x3CD) that ends the level instantly with the same animation as in level 12.
The exact work of this glitch wasn't studied as we had luck to get the fastest result without heavy debugging.

Level 04: Arctic Caverns

Checkpoint 1

To hit the first ice block crashing the first checkpoint wall I used this combo: make a simple hit, and while the after-hit animation lasts, the block gets stopped by you; then make a charge, while the second toad jumps up and scrolls the screen. The barrier gets ice block hits only if it's onscreen.
FODA attacked the block first time with a charge too, so he had to keep the second toad behind to prevent hitting him instead of the block. Pause between charges and later scrolling were obsoleted by me.

Checkpoint 2

After passing the first checkpoint you run down the slope and charge left. One toad hits right then to change the direction, and another has to kill the snowman to minimize lag. You shall match the proper position to reach the snowman with a simple hit, not activating double-fist hit animation. After this hit FODA keeps flying left, but I make one more hit to the right while still in air, and can get in time for a faster ice block attack.
FODA attacked the ice block with a right direction charge. That makes the block to fly to the right wall first, and only then fly to where we need. These walls don't kill our acceleration, so it's possible to hit the wall in a running jump, then wait some time falling down the wall, and only then do a charge, to the left in my case, so the block flies left instantly.
To minimize lag I kill both snowmen and change the direction after passing floors not with a running charge, but with a simple hit when possible.
I also discovered a possibility to hit the block near the checkpoint wall without lag.

Checkpoint 3

Here we meet the jump trick for the first time. When you jump onto a higher floor, you can gain 11 pixels per frame (in height) instead of 2-4, if you match the correct position. That was used on each floor.
Reaching the snowman that early, I think I broke some scrolling routine, so all the future vertical scrolling will occur with broken map.
I tried to throw 2 snowballs with both toads, then jump left with one of them (pass the wall & start scrolling earlier), while the second keeps throwing. But this appeared to be slower than what you see.

Checkpoint 4

After falling with the block on your hands you shall throw it right and 1) not hit the rock much, it will kill the speed, 2) scroll the screen right far enough to get the block hitting the checkpoint wall onscreen. That prevented me from killing a snowman, that caused some lag. But now all hits between ice and stone are accounted.
Used the same non-laggy hit to break the wall.

Checkpoint 5

Nothing special.

Checkpoints 6

Killing the snowman to prevent lag and pass the checkpoint by pressing forward every other frame (shall match the right odd/even frame to get it to work).

Falling through the floor

The glitched map scrolling doesn't allow you to see what actually happens, but it's visible in this video. I stand on an ascending slope (/) and press left+right for some time. My toads start sliding down vertically, shifting their Z positions. Then they fall down because their Z position gets lower than the lowest floor ground. When they are behind the rock, I press left+right again, they get shifted right very fast, and fall away from the rock. After they land you can see that their Z position is still lower that normal.
But this won't work if you don't activate the 7-th checkpoint. Or just let it appear at least. >_>
I run right until this direction scrolling spawns the yellow spikes above the screen. They get blown after they are scrolled away (downward) and all the subsequent objects can spawn normally (almost normally, as you see a terrible lag and glitches, and the game may crash during this laggy part).
Right direction scrolling destroys the big snowball and lag disappears. Just before the blue wall I have to cross the spikes gap, but the yellow platform appears only at some camera position.

Checkpoint 8

Passing through another checkpoint wall I still can spawn the Warp object. I keep the same down-shifted Z position for the toad that falls down (moving the camera downward).
Warp to level 6.

Level 06: Karnath's Lair

Room 1

Some dancing in music rhythm, including walking/running/turning near the end.
There is an invisible platform on the snake's nose, that appears randomly, depending on toads positions and allows to jump into an out hole earlier. Phil got better positioning and spawned this platform earlier.

Room 2

This charge trick was suggested by PJ (TheSuperSNES) and worked perfectly. After the toad was knocked down, running, he doesn't need to press forward 2 times again, you just keep holding right and he resumes running.
Warp to level 8.

Level 08: Intruder Excluder

Beginning

Run upward! Press left+right for a frame, let go, hold. Add jump to this combo to cross the no-floor holes and move the camera faster. Die with one toad and hit the checkpoint at the last frame before restart.

Respawn

Springs require the correct frame to push jump to throw you higher.
Use the 11 pixel trick to jump on the platforms sooner.
The main improvement is near the end, when you need to jump through electric fields inside the moving platforms. If you match the correct time & position, you can ignore these things and not wait until the current goes off.

Robo-Manus

I hate Robo-Manus! Only if you get the propitious timer value, he acts so that you can hit him with these lower attacks all the way and he jumps only once or twice. After he starts jumping he can be knocked down, then he falls over the toad and kills him. You shall position the toad horizontally so that he won't be killed neither by Robo-Manus feet nor by his bullets.
And to prevent his high jumps you wait some frames before hitting him, then as he jumps after one toad's punch, he instantly gets a hit by another, not trampling anyone.
There's a trade-off. Instead of killing him normal way I allowed him to jump and crash my partner. At the moment partner was pressing left+right, so he went not left or right, but up with this foot-cake!

Level 09: Terra Tubes

Checkpoint 1

This trick was suggested by Sonikkustar. As always we push A from the level start and jump over the tube edge, but not too much because otherwise we'll get into water and it will discrease our speed. Going right for some pixels allows us to fall in midair and return to water when we pass the floor.
And now we don't jump out of the water, we keep swimming out of bounds until the chekpoint! Kill the toad to minimize lag and get sure the gear will spawn correctly.

Checkpoint 2

I throw the partner up through the tube to activate the 3rd gear at the very moment of wall crash, previous runs needed to pass the grey wall normal way and only then activated the gear. The used trick allowed me to show something new for this level, like being on the both sides of the gear.

Checkpoint 3

I shifted Z positions of toads differently to make the water section look crazy. Also, I activate the first water gear with one toad and another swims behind it. Zitz was faster because he jumped into water after 4-th gear, while Rash was activating the checkpoint, and so, Zitz activated the first water gear when Rash was still behind.
At the next gear I use out of bounds trick again and you can see some non-game area. Check this video for more below-the-map stuff. This way I pass the grey wall with Zitz and touch the checkpoint just before the game restarts (couldn't kill Rash earlier as his death prevents further horizontal scrolling). After restart the second toad appears further on the map too.

Checkpoint 4

OOB again! We need to scroll the screen down and spawn the last duck to let the rest objects appear. While one toad scrolls downward, another cuts valuable distance.
The main problem in going left+right too much in this level is that if you get Z position shifted up and then fall down (when the floor gets loaded off the memory), you lose ability to activate checkpoints and hit your partner.
And what exactly is done by Zitz at the last OOB glitch can be seen on that picture.
To hit the End checkpoint I used running charge attack as it increases the speed of the dead toad too.

Level 10: Rat Race

Pick your partner with Zitz and jump. The jump height affects how soon the camera will start scrolling downward.
Unfortunately the Rat-racer doesn't account hits until he hits the ground, dead (or until you destroy the bomb). I mean, you can charge him as much as you wish, but he has no stunned status before the mentioned point, so you can't blow him away during the race.
And after he gets my air hit, I activate this final kick just in midair. To be able to reach him horizontally I need to let him fall near the right wall (by blowing the bomb a bit later).

Level 11: Clinger-Winger

Game Over children. I failed everything, didn't beat the game.
Kidding.
I tried to keep the hypno-sphere close, but not too much not to make you bored of that.
If you run left at the race end, you can be caught by autoscrolling and autodying :)

Level 12: The Revolution

Strategic improvements, acting behind the tower. Nothing new that haven't been mentioned earlier.

Level 13: Armageddon

Dark Queen

She's just more insane than Robo-Manus and Roper (from Bt&DD) coupled. After each successfull hit got from you she strives to jump higher, above your jump zone (prevent her from jumping high by letting her to hit you). But you still need to keep her as near to you horizontally as possible, not to jump over the whole screen each time.

MESHUGGAH's Comments

Feos contacted me on IRC near the end of DTC4, when I mentioned that I debugged some useful things for Rockin Kats. He told me about his Battletoads project, which had a problematic area about finishing the 3rd level, after pulling out a nifty glitch that skipped loading new game logic (dying with a jet by limiting the scrolling with P1 on the left side).
I started to experiment with it and after some weeks I came up with some useful informations and inputs that are used in this run (it was actually the result of multiple discussion sessions on ICQ and testing different things during this):
  • Starting the game 1 frame faster
  • Ending as fast as possible on Level 3
  • Understanding Level 9 checkpoint system
  • Reducing lag frames for cutscenes by manipulating to load those which could be loaded fastest in to the memory.

Level 3 Ending

The 3rd level end trick is manipulated to start warping on the 2nd frame you respawn. This is the result of a long experimentation.
Originally AnS debugged and dumped many useful informations regarding the game's objects (IDs, memory regions for different type of objects, etc). What I mostly did is experimenting with different inputs while watching the memory, what memory locations changes to what values. He mentions that the "end of the level" object ID is 0x7F, which means you may press R+L+D+U+T+S+B (2^7+2^6+2^5+2^4+2^3+2^2+2^1 = 0x7F) on one of the "control" frames (the 2nd or 4th frame you respawn) to affect the desired address and "spawn" Level End!
This only works if you die with a jet before actually loading the new, different "game rules", when you normally would pass through the checkpoint bar. Luckily, I didn't have to manipulate the pointer where it should get loaded, so only the object ID needed (and different objects need different memory locations, and most of them doesn't work because of the glitched up state).
Since you have to press T to input 0x7F, the 1st frame contains that T to do a pause-unpause very fast. The A on P1 pad 4th frame and R on P2 pad used to also ignore many lag frames.
It's actually much more complex and elaborate, debugging it would take months or more, so just to show the possibilities of this special state: pressing different buttons before respawn changes more than 100 memory values, also the pointers go wrong, the game could halt easily, you can also get a glitched game over screen and many more funny things that feos already found. The only possible improvement should be somehow moving the pointer before pressing the desired input (0x55 to warp 2 levels) on the 2nd or 4th frame. This can be done by manipulating the pointer location (which could be done mostly by trial and error because of huge craziness in the game logic) then dying and pressing the object ID's input on the next time you respawn.

Level 9 checkpoint system

This level uses a special indicator which increases as you "visit" different areas. To complete this level, you have to go step by step. This is located at 0x0585. After this, feos came up with a very impressive route by going through these crucial areas to finish the level without staying in bounds through the whole time (which is slower than going out of bounds).
So I'm glad that I could help feos to create this amazing TAS, he made a very good job, he also resynced everything just because of several frames shortcuts.
However, this submission file has a 2 frame save possibility, which didn't made use of because the game has a timing rule: starting a level on an odd frame is different than starting it on an even frame. I realized that it's possible to shorten the cutscene before level 8 which leads to a faster respawn by 2 frames. This 2 frames is reserved because this level's route (the input used throughout the run) changes the boss movement pattern and also has to slowdown on some spots because you would get a much more problematic route (you have to avoid the 2nd enemy by going slower by 1 frame, later you have to go 1 frames slower again to skip being electrified). This means that it's not 100% you could improve this run by starting faster this level.
I hope you like this TAS that feos made with a few helps by me. Bye! =)

RAM addresses

Suggested screenshot


DarkKobold: Judging!

adelikat: Replacing submission file with one that is 22 frames faster. According to the author the HypnoSphere battle has been improved to match Phil's time.
sgrunt: Replacing the submission file again with another 2 frame improvement.

DarkKobold: Accepting as an improvement to the "1p warps." I removed the branch, to stay consistent with other publications. Using warps is considered any%, and is similar to SMB1, 2, and 3. Many 2 player movies do not have the 2 player branch name, such as Contra, Super C, Double Dragons, and other Battletoads movies.

Brandon: Publication underway and encoding primary / 10-bit 444 / 512kb.

DarkKobold: There are three things on this site that I'd like to see obsoleted. 1p warpless, 2p warpless and ... and... what's the third one? EPA. There you go. Is it really the EPA? No.
Fixed obsoletion chain in my decision. Oops.
Last Edited by adelikat on 9/23/2023 2:03 PM
Page History Latest diff List referrers