Submission #7037: Lobsterzelda's NES Adventures of Tom Sawyer in 09:59.90

Console Nintendo Entertainment System Emulator BizHawk V. 2.6.1
Game Version USA Frame Count 36053
ROM Filename The Adventures of Tom Sawyer (U).nes Frame Rate 60.0988138974405
Branch Rerecord Count 7521
Unknown Authors Lobsterzelda
Game Adventures of Tom Sawyer
Submitted by Lobsterzelda on 2/24/2021 8:20:50 AM

Submission Comments

So – Why Did I TAS This Game Anyway?

Admittedly, this has to be the very first question that you’ve been wondering upon seeing this submission appear on the website. The reason for this is pretty straight forward: I wanted to obsolete a movie which was made in 2004 which is still a currently published movie on the website. As it turns out, there are only 2 such movies that fit the bill: Lethal Enforcers for the SNES (which was created in August of 2004 as submission #242), and The Adventures of Tom Sawyer for the NES (which was created in November of 2004 as submission #399).
These 2 movies were both created before the introduction of the vault, which caused them to be rejected in 2004, but accepted (completely unchanged) for publication onto the website when the vault opened in 2012 (there are no movies left on the website which were published in 2004 and have yet to be obsoleted). Personally, I’m not interested in trying to TAS a SNES game, and I already have some experience with TASing poorly-made NES platformers (NES Lion King from 1994, anyone?). As such, the only game I could choose to TAS was The Adventures of Tom Sawyer for the NES.
The original TAS by Dan_ was pretty well optimized for a TAS made in 2004. However, this game is pretty linear and straight forward, and a large chunk of the game is just “hold right for justice”, so I suppose it’s debatable how impressive of an accomplishment that was. Regardless, I set out to make a new TAS for this simple game, with the expectation that I would probably save about 3 seconds over the old movie and finish with a final time of 10:06. Much to my surprise, however, I was able to save 9 seconds, and was able to finish with a final time of 9:59!

Plot:

Most games or movies where the entire plot is just a dream have the decency to wait until the end to reveal that it was all a dream. But not this game! Oh no! This game is so shamelessly badly written, that not only does the instruction manual tell you that this is all a dream, but the opening cutscene of the game is Tom Sawyer falling asleep in his classroom. Way to keep the viewers guessing, SETA!
With that out of the way, let’s go over the plot quickly: you play as Tom Sawyer, who has just fallen asleep in a one room schoolhouse in Missouri. Your goal is to travel through 6 stages of platforming to save Becky, who has been kidnapped by the evil Injun Joe (I guess compared to how many times the N-word was said in the book that this game is based on, we should consider it a win that this is the most racially insensitive part of the game).

Game Mechanics:

Tom’s main method of attack is throwing rocks, which travel in a terrible arcing pattern like the rock in Friday the 13th (for the NES). On the bright side, while this does make hitting enemies harder, it also allows you to hit things which are higher up than you could hit if your throws went straight forward, so from a TASing perspective, there’s some positives to this mechanic. You can also pick up a slingshot in various levels, which lets you fire a projectile once every 7 frames (instead of the usual once every 8 frames), and which travels all the way across the screen (unlike the rocks). The slingshot ammo also moves much faster than the rocks as well, although you can only have a maximum of 4 projectiles on the screen at a time, regardless of whether you use the rocks or slingshot. Tom can also jump (He’d better – otherwise this would be the worst platformer ever made!). Besides that, he can duck and climb up and down ladders.
Tom jumps to the same height every time you press the jump button (even if only for a frame), and Tom reaches full running speed after about 10 frames of walking. While Tom is running, jumping or firing his weapon will not slow Tom down at all. In this game, if you get hit by one enemy, you die, which unfortunately means there’s no possible way to damage boost in this game. As an aside, you can pick up a heart powerup which makes you invincible for a few seconds and kills any enemy which touches you, but it’s very rare for an enemy to drop one (I think only a handful of enemies in the game are even capable of dropping one, unless it’s just so rare for most enemies that I’ve just never seen them drop a heart).
You can kind of change your trajectory while in midair after a jump, but you can’t change which way you’re facing, and you can only slightly slow down or speed up Tom’s movement in the direction that he jumped in…
Now that we’ve gotten this game's mechanics out of the way, let's move on to the timesave table, to see how much time I saved over the 2004 TAS!

Timesave Table:

The 4 Important Addresses:

The following are the 4 most useful memory addresses for TASing this game:
0X720 – Horizontal distance of Tom from left edge of the screen (acts as your X coordinate).
0X47E – Boss Health (for all bosses).
0X47F – Boss Timer A
0X480 – Boss Timer B

Level-By-Level Timesaves:

Now, I am going to go through a description of the strategies I used in each level to make this TAS as fast as possible.

Level 1:

This level takes place on a pirate ship, and it’s pretty basic. You run right, shoot some enemies, go down some ladders, etc. etc. Note that to drop down from a ladder you have to be on the ladder for at least 8 frames, which is why I appear to take a while to get past each ladder before I drop down. Also, the pillars in the ship’s interior which look like they’re in the background actually block you from passing through them, so I have to climb ladders to get around them. Eventually, you reach a rat miniboss, who takes 2 hits to kill.
After that, I drop down, and have to wait for the screen to scroll before the game will let me advance. In the next section, I get hit with ink from a squid. Luckily, this is the only attack in the whole game which doesn’t kill you (although getting hit with ink a second time will kill you).
Eventually, I have to wait for a squid to pass by before I can climb up a ladder. Sadly, I couldn’t find a way to avoid this time loss.
After this, we arrive at the boss, which is an octopus which shoots out jellyfish or something. The boss’s eyes are only vulnerable to attack at certain points in time, which is also based on how many jellyfish are on screen. To be honest, I really don’t understand how it works. I just used trial and error here. In any event, up to the end of level 1, I saved 8 frames: 6 frames from better menuing to start the game, and 2 frames from a slightly faster octopus boss kill.
Frames Saved: 2

Level 2:

This level starts with a loooooooong raft autoscroller. How long, might you ask? 200 seconds long, to be precise. So you’d better grab some popcorn and get comfy, cause you’re gonna be watching this level for a while. Basically, the screen moves at the same rate no matter what you do, and you can’t go up past like ¾ of the way up the screen. You can also jump off the raft, which I do at a few points for variety. I also get a heart from one of the ravens here, which is the only part of the TAS where I got one. After a long wait, we finally arrive at the boss of this level, which is a giant alligator.
To be honest, I’m still not 100% sure that I understand how this boss even works, but from looking through memory, I think I got the basic gist of it:
The boss has a timer which counts down from 16 to 0 a couple of times to start the fight off. Each time it hits 0, it resets, and the boss opens its mouth a little larger. Once the alligator’s mouth if fully open, the timer resets to 64, and starts ticking down to 0 at a rate of 1 unit per frame. When the timer hits 0, the boss starts closing its mouth again.
After throwing enough rocks at the boss in a row, you will be able to throw a rock that goes all the way to the back of the boss’s mouth, which will finally damage it (the boss has 5 health points, and each rock hit which makes the boss flash/take damage deals 1 health point of damage). After hitting the boss, a second timer starts counting down to when the boss should stop flashing. For some reason, if you throw a rock right after the first, the second rock will hit the front of the alligator’s mouth instead of the back (so it doesn’t do any damage), and if you throw the second rock like 10 frames later, then this will count towards getting the alligator to be vulnerable to damage again, so it will get stopped at the front of the alligator’s mouth as well. However, in the middle of this timer counting down, there’s inexplicably a frame where you can throw a second rock and do damage to the alligator right after the first rock. Using this, I can deal 2 HP-worth of damage to the boss on each cycle instead of 1, which lets me finish in 3 cycles instead of 5.
To sum it all up, here’s how the boss works: Throw enough rocks to make the boss vulnerable to damage, and throw 2 rocks to damage him (2 HP-worth of damage). Then, throw more rocks at the boss until he’s again vulnerable to damage, and throw 2 more rocks at him. Lastly, throw more rocks at the boss until he can be damaged, and throw one more rock down his throat to finish him off.
And with that, the level is complete. I saved about half a second here over the old TAS by doing double damage on the boss and using trial and error to damage the boss as fast as possible.
Frames Saved: 32

Level 3:

A nice basic level running to the right. After 3 minutes of autoscroller followed by 2 seconds of a complicated boss fight, it’s a welcome relief! One odd thing to note about this level is that you can run on the branches of trees and can jump through tree trunks, but you can’t run through the tree trunks. This doesn’t really make things any harder or cost us any time, but it’s just an odd thing I wanted to point out.
Speaking of the tree section, once you reach the part of the level where you are jumping around in the trees and enemies are appearing, if you don’t kill the enemies fast enough, then the game will start lagging badly (this is actually the first spot in the game where the game even comes close to lagging). Fortunately, by killing the enemies quickly, I am able to make sure that no lag occurs.
Eventually, we reach the level’s boss, which is 6 monkeys that turn into a gorilla for some reason. All you do is hit the boss, wait for him to be vulnerable again, hit him again, rinse and repeat!
The time I saved in this level over the old TAS was the result of me preventing the lag from occurring in the trees in this level.
Frames Saved: 20

Level 4:

We now arrive at a spooky, scary Castlevania-style mansion! Pretty soon after starting this level, we have to fight a skeleton miniboss. I saved a few frames over the old TAS here by hitting the boss slightly faster. After this, we have to jump up some stairs. I saved some more time over the old TAS by making it up an extra jump on the stairs with my last jump before I jump off the steps entirely (which I’m fairly certain is frame-perfect).
After running left for a little bit, we fight a wizard miniboss. Unfortunately, the miniboss doesn’t spawn until you move past the table thing, and you need to be standing on the table to hit the miniboss (or at least, to perform the third hit on the miniboss, since the wizard keeps moving upwards). As such, we have to jump back on the table after hitting the miniboss for the first time, which means the wizard is vulnerable to attack for 15 frames between when we hit the miniboss for the first time and the second time. Of course, this dilemma was present in the old TAS as well, so we don’t gain or lose any time as a result of it.
After this miniboss is dead, we go up some more stairs, and then run right until we find the level’s boss, which is a statue with a glowing orb in his hand.
This boss is simple: just jump up and hit the orb when it first becomes vulnerable. Wait for the orb to become vulnerable again, jump up and hit the orb again, and repeat this whole process a couple of times until the boss is dead.
Frames Saved: 30

Level 5:

Our next level takes place on some clouds in the sky. We start off by running right and killing a few enemies. Some of my jumps here look kind of useless, but those are to make the birds swoop down at a higher height, so they don’t kill me. Eventually, we reach some clouds that shoot lightning. At 7:20 in my encode of the TAS provided below, I saved time over the old TAS by jumping up on a house in the background and then jumping over the cloud, which skips me having to wait for the cloud’s lightning to pass.
We then arrive at a weird miniboss which looks like a caveman juggling some balls. I save some time over the old TAS here by killing the boss faster and delivering the final hit to the boss while running right, which lets me reach the right-most edge of the screen faster.
At 7:58 in my TAS, we arrive at a red balloon, which is what takes us to the end of the level. When you’re in this balloon, the screen scrolls painfully slowly, and the level doesn’t end until the right-most edge of the screen scrolls to a certain point. As a result of all of this, I am able to save 1 second over the old TAS here by running to the edge of the cloud to scroll the screen to the right before I jump up and grab the balloon (this is the first really big timesave of the TAS).
Once you grab the balloon, you enter an autoscroller which lasts until you reach the cannon at the end of the blimp. However, you can easily destroy the cannon before the screen stops scrolling, which allows the screen to keep scrolling right continuously from the moment you grab the balloon until the end of the level. And with that, we board the blimp and enter the final level!
Frames Saved: 102

Level 6:

The last level! We start off by running left and killing some enemies. When you reach the first pit with a large drop at the bottom (right before you switch from running left to running right for the first time), I determined that the fastest way to get the screen to scroll to the right is to jump and fall as soon as possible, land on the leftmost platform, and then run right. This in turn saves a few frames over the old TAS, which fell to the right here instead.
Next, we arrive at a waterfall where we need to jump up rocks. I save around 20 or so frames here by performing faster jumps on the rocks than the old TAS did here.
After this, we reach some ice, which is the only part of the game with ice physics. By complete accident, I discovered a nice little timesave at 9:40. If you are falling down with a lot of speed to the left and hit the left edge of a block of ice, you can briefly land on it for a few frames and switch to facing/running right before you slip off the ice again. This allows me to reach the hole in the ice about 40 frames faster than the old TAS did here. I also save some time here over the old TAS by performing a tighter jump down the last few ice platforms.
We now arrive at the most RNG-heavy section of the whole TAS: fighting the 6 dragon minibosses. Each dragon can appear at a random height on the screen, which is determined a few frames before the dragon actually appears. The frame that each dragon appears on is determined by RNG before the first dragon even spawns, however (although later dragons could spawn later if you are very slow at killing earlier dragons).
Optimizing this section was really counterintuitive. My first efforts killed the first 5 dragons by throwing rocks and hitting them as soon as was physically possible. However, the 6th dragon then took a full 5 seconds of waiting before it appeared. This was obviously unacceptably slow, so I went back and re-did some things.
It took me several hours of attempts, but I eventually figured out a strategy to get through this section as fast as possible: basically, how soon you kill the first 4 dragons doesn’t matter, since the last 2 spawn at the same frame regardless (which is determined when you reach where the first dragon is). As such, I would kill the first 4 dragons with whatever delays I wanted (this is also why I threw some random rocks in this section, since they change where and when the dragons appear). Then, I would position myself on the rightmost edge of the screen and manipulate the final 2 dragons to appear in front of me (they generally appear within a few frames of each other), and would shoot them as I inched forwards to the right-side of the screen. In effect, the limiting factor determining how fast I could get through this section was how fast I could manipulate the 6th dragon to appear. I had to really go back and try this section over and over again a lot of times in order to make this TAS be under 10 minutes. Otherwise, I would have come up just short. All in all, I saved over 1 second compared to the old TAS here.
After the dragons are dead, we do some platforming, and then arrive at the final boss: Injun Joe! I saved time over the old TAS here by jumping right on the same frame that you lose control when the boss appears on screen. That way, when I regained control, I would start off closer to the boss, and could hit him sooner. Note that the dragons in the last section dropped slingshots, so I am able to use the slingshot on Injun Joe (which is the only time you see it used in this whole TAS).
I was able to save over 1 second on this boss fight compared to the old TAS by realizing that you can damage the boss 2 times in one jump (with the exception of the first hit). The boss has 10 HP, and each hit does 1 HP of damage, so doing this allowed me to kill the boss in 6 jumps.
With Injun Joe defeated, you collect some feathers, and Becky comes down to thank you for saving her. Then, Tom wakes up from his dream and finds that the feathers he collected in his dream are next to him in real life or something, which shocks him. And with that, the game is done!
Frames Saved: 280

Possible Future Timesave Ideas:

Below are 5 ideas I have for how any intrepid TASer can try to save time over this TAS:
1. Finding a way to make a heart spawn in level 1 to skip waiting for a squid to move before climbing up a ladder.
2. In level 4, killing the skeleton miniboss or the wizard minboss faster.
3. At 6:40 in my encode below, finding a way to make it up an extra step on the staircase with my last jump before jumping off the stairs. I did this earlier in the level when jumping up stairs that move to the right. However, I couldn't find a way to make it work jumping to the left up stairs.
4. Finding a faster path to move past the clouds that shoot lightning in level 5.
5. Manipulating the dragons at the end of level 6 to spawn faster.

Special Thanks:

Special thanks to MESHUGGAH for making a WIP of this game which allowed me to compare my progress in the early levels with an optimized TAS of the game. Also, the WIP gave me some new ideas for routing and strategy which helped me to optimize this TAS. Also, I would like to thank Dan_ for creating the original TAS of this game, which showed me the general route to take to beat the game.

Concluding Remarks:

That’s all she wrote! I hope you enjoy this new TAS of this bad game!

Encode:


Samsara: Judging both the run and this game's content >:c At least one of them is going to be negative!!!
Samsara: Content bad, run good. Accepting as an improvement to the published run. Feedback's pretty okay, I guess it can go to Moons for now.
fsvgm777: Processing. EZGames69 is handling the encodes for this one.

Last Edited by fsvgm777 on 3/14/2021 8:52:01 PM
Page History Latest diff List Referrers