Submission #6822: Lobsterzelda's NES Battletoads "warpless, 2 players" in 19:15.11

(Link to video)
Nintendo Entertainment System
warpless, 2 players
BizHawk 2.4.2
69421
60.0988138974405
136063
Unknown
Battletoads (USA).nes
Submitted by Lobsterzelda on 7/26/2020 4:32:46 AM
Submission Comments

Introduction:

Judging by the average length of time between obsoletions, the next improvement to the Battletoads 2P Warpless category is not expected to be published until June 2035. However, we can surely make a new movie faster than that! With this logic in mind, I present to you a new 2P Warpless TAS of Battletoads which beats the game in 19 minutes and 15 seconds, and more to the point, is submitted 15 years ahead of schedule!!! Now, wouldn’t it be great if that could happen with video game releases in the real world?

Submission Format:

The submission notes I made for my last 2P Warpless TAS were extremely long and comprehensive, and basically explained every glitch and route used throughout the TAS. If I tried to include the same level of detail here, then this submission text would be more or less the same length as my old submission notes, with 95% of my explanations copied word-for-word from my previous submission. As such, I have decided to recommend that viewers seeking an explanation of the tricks and routes used in each level should check out my old submission notes from the last movie, which can be found here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Normally, I don’t like to tell viewers to look at an older movie for an explanation of tricks used in a new TAS, since this often leads to a wild goose chase where one TAS says to look at a second TAS for info, the second TAS says to look at a third TAS for some more info, and the third TAS says to look at a fourth TAS etc. etc… However, since all the information about glitches and routes in this TAS can be found there, (minus the new improvements in this TAS in levels 4, 10 and 12) and since it cuts out a massive amount of redundancy, I have decided that this is the better option here…

Timesave Table:

Once again, I have included a table which shows the relative time difference between levels in the old TAS and levels in the new TAS. Each row of the table measures the length of a level as the first frame of lag from the end-of-level cutscene minus the last frame of lag from the cutscenes that play before the level starts (the one exception to this is level 13/the dark queen fight, which ends timing on the last input, and starts timing on the last lag frame before the player gains control of their toads).
Each time is reported in the format Minutes:Seconds + frames/60, where frames/60 is the extra frames that don’t fit into a minute or second (there are 60 frames in a second, and 3600 frames per minute). For example, a level with a length of 310 frames would be listed as 0:05 + 10/60, since the level takes 5 seconds plus 10 extra frames. The frames saved column, however, just lists the total frame difference between each level, with no mention of seconds or any other unit of time. Each row is color-coded, with levels in darker shades of green representing greater timesaves (as a percentage of total level length). Furthermore, levels in white represent levels with no time gain or losses, and levels in pink represent levels where I lost time (more explanation on that down below).

TASing Process:

  • The first 3 levels were copied from my original 2P Warpless TAS.
  • The first half of level 4 was copied from my 2P Warps TAS. I then re-did the next third of the level, and ended this by using the input from my old 2P Warpless TAS to finish off the level.
  • Levels 5, 6 and 7 were copied from my 2P Warpless TAS.
  • The beginning of level 8 before the boss fight was copied from my 2P Warps TAS, and the RoboManus fight was redone from scratch.
  • Level 9 was copied from my 2P Warpless TAS
  • Level 10 was done from scratch
  • Level 11 was copied from my 2P Warpless TAS
  • Level 12 was initially copied from my 2P Warps TAS. Then, I used a script I wrote to alter input for RNG-manipulation to save time on the 4 sections with the red faces blowing bubbles. More explanation on that down below!
  • Level 13 was copied from my 2P Warpless TAS

Level-By-Level Improvements:

From here, I am going to describe what I did in each level to improve upon my previous movie:

“Hidden Timesaves”

There is a timesave of a few frames which doesn’t occur during any of the levels. The reason why is that this timesave occurs from getting less lag from the cutscenes between levels. How much lag you get is based on RNG, which can be altered by pressing select at random points before the cutscenes start to save a frame or two between each level. This technique is used to save time on almost all transitions between levels in this TAS.

Level 1: Ragnarok’s Cavern

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 1 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 2: Wookie Hole

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 2 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 3: Turbo Tunnel

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 1 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 4: Arctic Caverns

Finally – a level with some time saved in it! I hope you didn’t get so bored reading about the first 3 levels that you skipped the rest of this section entirely!
To start things off, here is a comparison video which shows the level 4 from my new TAS on the left, and the level 4 from my old TAS on the right:
In level 4, each wall you destroy activates a checkpoint, and all checkpoints must be activated before you can trigger the end of the level. As such, even though we can clip through checkpoint walls by alternating right and neutral every other frame for several frames, we still have to destroy each wall before we can progress...
In the first section of this level (the first 3 checkpoint-walls), I save about 12 frames by moving in a way that reduces lag. This also has the effect of not messing up the level’s scroll function, so unlike my old level 4 TAS, the graphics aren’t corrupted in the second half of this level.
At 0:31 in my level 4 comparison video, I use a new strategy to save about 15 more frames. What I do here is that I hold right at full speed while I jump against a wall, and keep holding right after I hit the wall. Then, once I’ve fallen far enough, I pause, switch to holding left on the next frame, and unpause on the frame after that. The result of all of this is that I go from moving right with max-speed to moving left at max-speed in a handful of frames, which lets me land past the first ice pillar when I land from this fall (which I couldn’t do in the old TAS). Additionally, I bonk my head on a specific point on the ceiling of this section which allows me to start falling faster than I normally could otherwise (the ceiling here is a series of zig-zag lines like a zipper, and only one specific spot pushes me down really quickly after I jump).
The next spot where I save time occurs at 0:40 in my level 4 comparison video. In 2D levels of Battletoads, your y-position increases when you hold left and right at the same time (which shifts your sprite up on screen), until it goes over 255 and wraps around to 0, at which point your sprite falls back down. In my old TAS, I held Left+Right at the same time while standing still on a platform until my y-position wrapped around past 255, at which point I fell down through the floor. I then held L+R again after landing out of bounds to clip further down into the next hallway. In this new TAS, I start holding L+R while I’m sliding backwards on a slippery slope. As a result, I fall off of the slope while my y-position is still increasing, which causes it to keep increasing while I’m falling! (normally, your y-position only changes in level 4 when holding L+R while standing on the ground, not while in midair. This allows me to change my y-position while I'm already falling, which combines two actions into one, and thus saves time). Additionally, once I clip through the floor, I hold L+R to clip further down into the next hallway without landing on the out-of-bounds platform first. As a side effect of all of this, my y-position is too low to be able to pick up the upcoming ice-block, so I have to hold L+R a little longer to rise up high enough to grab the next block. I also save a little bit of time in this hallway by alternating pressing right and neutral to clip through the invisible walls, which is faster than what the old TAS did of holding down to clip through the walls (holding down here reduces your speed by a lot). These invisible walls seem to exist because the room was loaded in a bizarre way from out-of-bounds, and the checkpoint-walls haven't had time to correctly load into place, but truth be told, I'm not really sure what creates the two of them. All told, this segment finishes with me gaining another 20 frames over the old TAS.
In the final section of the TAS (1:08 in my level 4 comparison video), I save about 15-20 frames over my old TAS by hitting the end-of-level marker slightly faster using better lag reduction.
After all of this, we finish level 4 almost a second faster than the old TAS did!
Frames Saved: 59

Level 5: Surf City

There is no change in this level compared to my – hey wait a minute! How did I save time here? As it turns out, by holding left at a slightly different time, I am able to fall out-of-bounds 1 frame faster, which accounts for this level’s timesave. If you’re curious why this level ends after voiding out, however, then you should check my original submission notes for level 5 in this link for a detailed explanation of what’s going on here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 1

Level 6: Karnath’s Lair

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 6 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 7: Volkmire’s Inferno

There is no change in this level compared to my original TAS. It’s worth noting that the sections with the fireballs and the falling missiles are determined completely by RNG, which can be altered by player 1 pressing select a random number of times. As a result, I was able to easily resync this level without changing any of my inputs (besides pressing select, of course). For a description of all the tricks used to save time in this level, see my level 7 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 8: Intruder Excluder

I don’t save or lose any time on the section up to Robomanus on this level. At Robomanus, however, I did lose 2 frames compared to my old TAS. Robomanus fires his weapon and jumps based on a global timer which can’t be manipulated. As such, based on when I reached the start of the fight, a little more lag happened during the fight. Well, you can’t win them all! In any event, if you would like a description of all the tricks used to save time in this level, see my level 8 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Lost: 2

Level 9: Terra Tubes

I saved 4 frames in this level from better lag reduction during the long underwater swimming section. Besides that, if you would like to see a description of all the tricks and routing decisions used to save time in this level, see my level 9 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 4

Level 10: Rat Race

We now arrive at another level with a big timesave in it! The timesave in this TAS was actually discovered many years ago (probably in 2012) by DyLaX, but was forgotten about until recently. Special thanks to Koorvex for finding DyLaX's old input file from an abandoned TAS which contained this timesave, and for bringing the old TAS to my attention!
In my old TAS, player 2 picks up player 1 and jumps, which causes the screen to start scrolling down. Player 2 then throws player 1 when near the floor with the bomb, which stops the screen from scrolling. In my new TAS, however, players 1 and 2 both jump up while holding left+right to start the level, which makes the camera start scrolling the screen down. One toad then punches the other near the floor with the bomb on it, which makes the screen stop scrolling. After player 1 kicks the bomb away, player 2 punches him to cancel out his attack animation.
From here, we reach the biggest timesave of this level. In level 10, you can't jump after destroying the bomb until the falling rat hits the ground. As such, the old TAS rammed the rat after he hit the ground, and then jumped up to kick the rat when he started to land again. Doing this causes the rat to be set to "defeated," and since the rat has a boss flag set on it, this tricks the game into ending the level immediately!
In this new TAS, we make player 2 charge up a kick by throwing player 1 and standing over his body (you can only charge up a kick when next to an enemy or when standing above a toad lying on the ground). Player 1 then moves out of the way, and punches the falling rat on the same frame as player 2 kicks the rat, both of which occur on the same frame that the rat hits the ground. Doing this causes the rat to be set to "defeated" without having to do the extra ram attack or waiting for the rat to fall a second time, which causes the level to end immediately, and saves about 1 + 2/3 seconds!
To see a comparison of the differences in strategy between the new TAS and the old TAS, you can look at the GIF below, which shows level 10 from my new TAS on the left and level 10 from my old TAS on the right:
Frames Saved: 100

Level 11: Clinger Winger

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 11 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Level 12: The Revolution

Beginning

Finally! We’ve arrived at the meat of the timesave from this TAS!
To start things off, just like in my old TAS, I beat a cycle of the dissapearing green platforms by using an attack pattern on the first enemy that generates more lag and more total frames but takes up less non-lag frame, since the timer for the dissapearing platforms only changes during non-lag frames.
Throughout this level, I’m able to save some nice chunks of time over the old TAS by using faster jumps off of the springs. Normally, you jump off the springs with a speed of 64, but if you press and release right frame-perfectly as you are jumping off the springs, then you can jump with a horizontal speed of 192, which speeds things up quite a bit.

We Need to Talk About the Red Faces...

Once we reach the red faces that blow bubbles, we arrive at the biggest timesave of the entire TAS! This timesave occurs by reducing the amount of lag frames that the red faces generate. The way I discovered that this was possible was when I was trying to resync an old TAS for my 2P warps movie, and noticed that a different number of lag frames occured in the sections with the red faces than the original TAS had. From there, I soon discovered that the direction that the bubbles were blown was based on RNG, and that certain directions could reduce the number of lag frames.
At the time, I didn't know what specific direction reduced lag the most or how manipulatable it was, but I did know that I could alter RNG by pressing select on player 1's controller a random number of times before the red face appeared. From here, I was able to write a simple script that would press select a random number of times for 100 trials and find the combination that best minimized lag. Using this, I was able to make each red face go from generating about 100 frames of lag to about 43 frames of lag, which was a nice improvement! The red faces each blow bubbles for a total of 256 non-lag frames, so any frames of lag that you save compared to an older TAS represent an equal number of frames saved in the new TAS.
I could have just stopped there, and decided that I'd done a good enough job with my lag reduction techniques. BUT, I wanted to completely finish off my Battletoads 2P TASing, and to do so, I had to be sure that there wasn't an easy way to save more time compared to what I'd already done. If I didn't, then someone could just run a similar script for lag reduction for more trials than I did and get, say, 42 frames of lag, and obsolete the movie. While a movie can be easily obsoleted, it's hard to really think of the category as being "done," so I got to work looking for how RNG directly influences the pattern of the bubbles in the level.
Before explaining how I figured this out, it's worth explaining in more detail how RNG in Battletoads works, which was previously figured out by earlier Battletoads TASers. Essentially, there are 4 memory addresses which each store 1 byte, which act as RNG addresses. These addresses are 0X25, 0X26, 0X27, and 0X28, which can be thoughout of as RNG_1, RNG_2, RNG_3, and RNG_4 respectively. On every frame, the values in these addresses are combined and XORed with each other a number of times which changes on each frame. Additionally, the inputs from player 1's controller on the last frame are used to change RNG on each frame (a single number can represent what buttons player 1 pressed by representing each button as 1 bit of a 1 byte number which is 1 when pressed and 0 when not pressed, since there are 8 bits in a byte and 8 buttons on an NES controller). Because of this, you can effectively directly control the RNG values using player 1's inputs. However, because there are 32 bits worth of RNG values, there are effectively 4 billion possible RNG states, which means that simulating through every possible combination of RNG values is not practical (which could be done if there was only 1 RNG address, since there would then be only 256 possible RNG values).
Keeping all of this in mind, I decided to write a script that would freeze the value of RNG_1 and play through a section of the red faces blowing bubbles, and report how much lag was generated. The script would initially set RNG_1 to 0 and play through a section. It would then repeat this process with an RNG_1 value of 1, and then 2, etc, and report which state caused the least lag.
After all of this was done, I repeated this process on RNG_2 as part of my efforts to figure out which of the 4 RNG addresses were controlling how many lag frames occurred. While changing the values of RNG_1 didn't have much of an impact on how many lag frames occurred, changing the value of RNG_2 had a MASSIVE impact on the number of lag frames that occurred, with a very low number of lag frames generally occurring about once every 8 frames, and a very high number of lag frames occurring on the frame after a very low number of lag frames occurred. On the frames with a low number of lag frames, the bubbles also generally moved up much faster than they did on other frames, and on frames with high numbers of lag frames the bubbles generally blew straight across the screen from one end to the other without moving up or down. There was definitely a pattern going on, but due to random variability in how much lag each possible simulation generated, it wasn't immediately obvious to me what this pattern was. I was curious if RNG_2 needed to be a specific value on all frames or only on the frame when a new bubble spawned in order to reduce lag, so I wrote a new script that only changed RNG_2's value on frames where a new bubble spawned, and found that it produced an equally low number of lag frames, so I knew that RNG_2 was setting some initial property of the bubble when it spawned in to make it generate a low number of lag frames.
In order to figure out how RNG_2 influenced the bubbles' properties to reduce lag, I set a breakpoint to occur whenever a new object spawned, and set the code to output to a trace log. I then advanced to a frame where a bubble spawned, scrolled to the breakpoint listed in the trace log, and then looked for where the value of RNG_2 was used. From all of this, I discovered the following 5 lines of code, which explained exactly what was going on:
LDA RandomValue_2
AND #$07
SEC
SBC #$03
STA Objects_Z_speed,X
In other words, on the frame when a bubble spawned, the value of RNG_2 was bitwise ANDed with 7. Then, 3 was subtracted from the resulting number, and this value was stored as the bubble's Z-speed, which controls how quickly the object moves up or down. Thus, all bubbles have a Z-Speed value ranging from -3 to 4. A Z-speed of 0 caused the bubbles to go all the way across the screen, which caused the most lag, while a Z-speed of 4 made the bubbles move offscreen the fastest, which reduced the lag the most. As such, by manipulating RNG_2 on the frame when a bubble loads to have a value that, when ANDed with 7 equaled 7, I could minimize the number of lag frames that occurred, and effectively make the bubbles fly up really quickly offscreen. It's worth noting that each bubble has a random chance of spinning straight up or far forwards from its original path on a given frame (which causes more lag to happen), so even if every bubble spawned with a Z-Speed of 4, it would still require a lot of testing to find the pattern that best reduced lag.
After this, I got to work writing a script to brute force an optimal bubble pattern for me. The basic logic for my script was that whenever a new object was created, if the value of RNG_2 & 7 wasn't equal to 7, then the last-created save state would be loaded, and random inputs would be supplied on player 1's controller to try again. This process would repeat until RNG_2 had a correct value, at which point a new save state would be made, and execution would continue from there. This process would continue for 400 frames, at which point the trial would end, and a new attempt would begin starting from before the first bubble spawned. The button presses from a given trial and the number of lag frames that happened were all kept track of, and when a new best for number of lag frames occurred, the button pressed needed to make this happen were output to a text file in a format that would let them be copy and pasted directly into the "Input Log.txt" file of a bk2 file, which could let them be copied directly into my tasproj file.
This all did a really good job at reducing lag, but I decided that I could go further. Eventually, I wrote an altered version of this script which would only run until 10 objects spawned, at which point the current trial would end. This would effectively break each red face section up into 3 smaller sections (about 30 bubbles are produced by each red face), which made better outcomes become more likely (for example, if each bubble had a 1/2 chance of not causing a lot of lag, then this would make it take about 1028 trials to find the ideal lag pattern, as opposed to taking 4 billion tries to find the ideal lag pattern). Additionally, I redesigned my script so that it would end a trial immediately if the number of lag frames that had happened was more than the current best, which also sped things up a bit. Lastly, I let my script run for hours at a time on each section, and I often broke each red face up into more than 3 pieces to reduce lag as much as possible. Using all of this, I was able to make the 4 red face sections take up 8, 5, 9, and 7 lag frames respectively!
To really see how much time this all saves, I have created a comparison encode below, which shows the red faces from my new TAS on the left, and the red face sections from feos and MESSHUGAH's old 2P Warps TAS on the right (which didn't try to reduce lag on the red faces). This video also shows player 1's inputs on the bottom of the screen, with non-lag inputs appearing in green boxes, and the input display turning red on lag frames. The current total number of lag frames for the current red face is also displayed above each input display as well. Note that the downswing by my toads to get off the poles also generates 2 frames of lag on most faces, so the total number of lag frames that occurs in most red face sections is 2 frames higher than the number generated as a result of lag frames from the bubbles blowing. This video is a great example of how a TAS can take a disordered and chaotic section of a game and convert it into something improbably well-ordered and fast!
I have also included links to my scripts for making these lag and input displays in both BizHawk and FCEUX down below. Note that two small changes to the code (which are described in a comment at the start of the scripts) could be made to make these into general purpose scripts that could be used for any NES game.
And now for the comparison encode!
Any improvements to the red face sections will probably require some sort of script similar to the one that I wrote. To help out whatever TASers want to try their hand at Battletoads next, I have included a link to the script I used to reduce lag as much as possible on the red faces. I hope that this helps!

Ending

At the end of this level, because of my faster spring jumps, I make it to the last red face a lot sooner than I did in my old TAS. I also hold L+R when near each of the red faces to make the camera scroll up so that the red faces spawn a few frames earlier (your y-position gets reset when you grab the pole, so your sprite goes back to normal once you grab the pole). As a result of all of this, I can just barely make it onto the spring that goes around the tower a cycle earlier than I could in my original TAS (if you don’t land on the spring, then you will void out and die when you hit the bottom of the screen). The spring takes 128 frames to go in a complete circle around the tower, so this in turn lets me save a little more than 2 seconds over my original TAS here.
After this, we enter the final climb up the tower. This is one of the most annoying sections to TAS in the entire game, since there's an enemy blowing bubbles which generates a lot of lag while you're climbing. This enemy can also randomly decide to perform a move that pushes you off the platforms every time, which you have to avoid with RNG manipulation. The lag generated by this enemy seems to not be very controllable with RNG manipulation, so I mainly just controlled the frame that I spawned the enemy on to reduce lag, since that does seem to slightly effect lag. I also landed on each of the springs a little faster than I did in my old TAS by using faster jumps and jumping through the sides of the springs, which pushes you up on to the top of the springs a little sooner.
Lastly, I hold L+R at the same time at the end of the level to force the camera to scroll up high enough that it triggers the level-end object to spawn (which you normally only trigger when you reach the top platform of the level, as opposed to just shifting your sprite up to the top of the level), which ends the level and takes us to the final showdown with the nefarious dark queen!
In order to see a full comparison of level 12 in my new TAS and in the old TAS, please see the video below, which shows level 12 of my new TAS on the left, and level 12 of the old TAS on the right:
Frames Saved: 495

Level 13: Armageddon

There is no change in this level compared to my original TAS. For a description of all the tricks used to save time in this level, see my level 13 notes from my old 2P Warpless submission here: #6758: Lobsterzelda, feos's NES Battletoads "warpless, 2 players" in 19:26.21
Frames Saved: 0

Possible Improvements:

  • The lag reduction in level 4 is complicated, and it's possible that a few more frames could be squeezed out of the level, especially the very end section where one toad dies as the other toad hits the end of the level.
  • In level 6, if entertainment value was completely ignored, it would probably be possible to save between 10-40 frames by making the snakes turn their heads faster. This is based on where the camera is, so you would have to move in a very precise and less entertaining way in order to make this possible.
  • In level 8, it may be possible to reduce the number of lag frames during the Robomanus fight or to attack Robomanus with a faster attack pattern. Further experimentation will be necessary to find a way to save time here.
  • In level 9, about 10-20 or so frames could probably be saved throughout the level by lag reduction to reduce lag that is caused by enemy movement patterns. However, it's hard to tell which lag is manipulable (from enemy movement) and what lag is outside your control, so this would be more difficult to do than it sounds.

Special Thanks:

  • Koorvex: For discovering an old, long-lost TAS of Battletoads in a collection of files given to him by his friend Daniel which had a faster level 10, which showed me how to save 2 seconds in level 10.
  • DyLaX: For creating the long-lost TAS which had the improvements that I used in level 10.
  • Daniel: For giving his friend Koorvex the long-lost TAS with the level 10 improvements.
  • feos: For discovering many of the glitches used in this TAS, and also for creating the route for several levels.
  • Alyosha: For creating an optimized Battletoads WIP that helped me learn how to TAS Battletoads in the first place.
  • MESSHUGAH: For helping to figure out how the level-end glitch in levels 3 and 5 works
  • Koh1ds: For discovering the glitch in level 4 to fall left with full speed after pressing against a wall to save time.

Concluding Remarks:

It’s been a long journey of TASing to reach this point. However, this TAS contains everything that I could possibly want a Battletoads NES TAS to have. I am now satisfied enough with the TASes I’ve made of this game that I have no interest in continuing to make new NES Battletoads TASes. As such, I'm announcing my retirement from Battletoads TASing. If somebody discovers a new trick or comes up with a new idea to save more time in Battletoads, then I would consider making a new TAS, but other than that, I think that I’m done now.
It’s been a fun ride learning how to obliterate this game. If there’s one thing that you as the viewer should take away from all of this, it’s that you don’t need to be a good TASer to make a good TAS. For my own part, I consider myself to be an average-skilled TASer (approximately equally as skilled as the average TASer who has had a movie published on the site). However, what I do have is lots of patience and persistence, which enables me to be able to make good TASes. This isn’t to say that my TASes are perfect, mind you. Rather, persistence has enabled me to make TASes that are noticeably better than the movies that existed before I started TASing – which is my ultimate goal when it comes to TASing.
I hope you have enjoyed watching these TASes, and I hope you enjoy my final Battletoads TAS! See you in the next game!

ThunderAxe31: Judging.
ThunderAxe31: Setting to delayed, in view of new improvements.
ThunderAxe31: File replaced with a 279 frames improvement, and resuming judgement.
ThunderAxe31: Accepting as improvement over the current publication.
feos: Pub.
Last Edited by adelikat on 11/5/2023 2:49 PM
Page History Latest diff List referrers