TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #7064: Lobsterzelda's A2600 Seaquest in 17:01.97

Console: Atari 2600
Game name: Seaquest
Game version: USA
ROM filename: Seaquest.bin
Branch:
Emulator: BizHawk V. 2.6.1
Movie length: 17:01.97
FrameCount: 61239
Re-record count: 19996
Author's real name:
Author's nickname: Lobsterzelda
Submitter: Lobsterzelda
Submitted at: 2021-04-01 02:46:06
Text last edited at: 2021-04-10 20:57:02
Text last edited by: Zinfidel
Download: Download (27431 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:

Introduction:

Happy April Fools Day everybody! When I set out to make this TAS, I was originally just planning to submit it whenever I finished working on it. However, since I finished on March 30th, I decided to wait to submit this so that I could make my first submission on April Fools Day to the site.

17:01? ...But that's 11 Times Slower than 1:39!:

That is correct. This movie is about 11 times slower than the movie it aims to obsolete (which can be found here: [2599] A2600 Seaquest (USA) by morningpee in 01:39.8 ). However, this submission is not an April Fools joke - this movie really does intend to obsolete the current movie, and I attempt to score points as fast as possible in this new TAS. So what gives?

The answer... is a bit complicated. Basically, the old TAS made use of something called the No-Despawn glitch, where you can collide with a sub on a certain frame, and keep continuously racking up points on each frame (and you don't take any damage either). To do this glitch, you have to get a certain distance "inside" the sub before the game's collision detection sees that you hit an enemy and tries to take away your life. If you make it that far, then you can activate the glitch. The TAS which used this glitch and the person who discovered this glitch were all playing Seaquest on an early version of BizHawk which was released at or before 2014, which was relatively early in the A2600 core's lifespan.

When future versions of BizHawk came out, some people noticed that they could no longer find a way to activate the No-Despawn glitch. What's more, testing showed that the glitch wouldn't occur on an original (physical) Atari 2600 console. After a bit of debugging, Alyosha determined that an emulation bug on an earlier A2600 core of BizHawk was causing the player's ship to make it a few pixels further into the sub before dying than would occur on an actual Atari 2600. As a result of this, when playing on an Atari 2600 (or a modern version of BizHawk), it was impossible to get far enough into an enemy sub's collision without dying in order to activate this glitch. In other words, this so-called "glitch" was the result of an emulation bug in BizHawk itself, and was not possible on console.

This all should have precluded the original TAS from being published to the site, but the fact that the glitch was impossible on an accurate Atari 2600 emulator or console wasn't discovered until years after the movie was published on the site. Thus, since movies on TASVideos can't be removed from publication, this movie has stayed as the current publication on the site - a blemish on TASVideo's standards disallowing the use of emulation bugs in TASes.

Because of this, I set out to create a new TAS for Seaquest, to remove this blemish from the site! I knew that it would be tedious to TAS the game without the fake glitch (which is why no one obsoleted the old movie until now), but I decided that it was worth it to improve the quality of the site! Not all heroes wear capes... (just kidding - I'm not that egotistical)

Plot & Controls:

...With all of that out of the way, what is Seaquest even about, anyway? The plot is simple - you are a ship, swimming through the ocean, and getting attacked by fish and enemy submarines. Your goal is to rescue your divers who are trapped underwater, and bring them to the surface. In each level, you can rescue a maximum of 6 divers (and this is also the minimum number of divers you can rescue to reach the next level, so every level ends with you getting 6 divers). In the next level, everything repeats, but the enemies move slightly faster on each level, and there are ~8 or so different layouts that the levels cycle through. You also have a time limit via your oxygen meter, which is refilled at the end of each level. Also of note is that on every other level, when you collect your 6th diver, an enemy patrol sub appears at the top of the screen. Every enemy in this game causes a 1-hit death, so you have to be sure not to touch it. Furthermore, you are frozen in place while your oxygen refills at the end of the level, but the enemy patrol sub can still move and kill you! Thus, you need to be careful about where you surface to end the level.

Divers can appear at 4 different depths. Generally, you have to collect the divers at all 4 heights before you can go back to a particular height (unless the game's cycle of collecting 4 divers ends after collecting a diver at a certain height but before collecting all 3 of the other divers). Divers appear either when you kill the last of a fish or sub in a particular row on a certain frame, or when the last sub in a row moves offscreen. Depending on what frame the game tries to spawn a diver on, a diver may appear on the left side of the screen, the right side of the screen, or not at all. Also, if divers are on screen when a level ends, then they will appear again at the start of the next level. As such, I sometimes wait before surfacing at the end of the level to make more divers spawn (or to make them appear on different sides of the screen). However, this is only faster on earlier levels of the game - by the time I reach the later levels, everything is moving so fast that it's faster to get a bad pattern and just kill the next enemies quickly to make more divers appear.

The formula for determining where divers appear is as follows: the game looks at the value stored in address 0X02, which is an RNG value. If the value is less than 80, then nothing spawns. If the value is greater than or equal to 80, then the diver will appear on the left when the value bit-ANDed with 8 equals 0, and will appear on the right when the value bit-ANDed with 8 does not equal 0. Note that this only applies for divers that spawn when killing an enemy - a diver can appear when a sub goes offscreen even if the RNG value indicates that nothing should spawn.

Ending Criteria:

Once you reach 999,999 points, you lose the ability to move your ship, you lose the ability to die, and the copyright message is displayed at the bottom of the screen. This is essentially a killscreen, which means it counts as beating the game per TASVideos standards on games with infinite repeating levels. As such, this TAS aims to reach 999,999 points as fast as possible in terms of time from power-on to last input (the old TAS took about 5 minutes to actually reach 999,999 points, since the player kept accumulating points after starting the No-Despawn glitch at the 1:39 mark. This TAS both ends input and gets to 999,999 points at approximately 17 minutes).

Scoring:

The points you get for enemies killed or divers rescued varies from level to level, up to certain maximum values. With respect to fish and subs killed, you initially get 20 points for each one that you kill on level 1. This increases by 10 points every level, up to a maximum of 90 points per fish in level 9. When you rescue a diver in level 1, you receive 50 points. This increases by 50 points every level, up to a maximum of 1000 points per diver in level 20. Note that you don't receive points for divers rescued until AFTER you surface for air to end the level.

Helpful Lua Script:

This is a short little Lua script I wrote for BizHawk which displays what will spawn when you kill a fish on a given frame. Note that the RNG value is changed once every 8 frames.

  function drawFunction(message, color)
  	gui.drawText(6.5, 0, message, color)
  end
  while true do
  	RNG = memory.readbyte(0X02, "Main RAM")
  	if RNG < 80 then
  		drawFunction("Nothing", "red")

  	elseif bit.band(RNG, 8) == 0 then
  		drawFunction("Left Diver", "green")

  	else
  		drawFunction("Right Diver", "blue")
  	end

  	emu.frameadvance()
  end

Technical Challenges:

By the end of the game, the fish can cross the entire screen in 28 frames! At speeds like this, your bullets move much slower than the enemies. As such, I sometimes shoot really far in front of an enemy and then move down so by the time I reach the right height, my bullet hits the enemy. In this game, bullets fired move at a constant speed left or right each frame (depending on which way you were facing when the shot was fired). However, moving up or down causes your bullet to move up or down to match your ship's y-coordinate. Personally, I recommend watching this TAS from the 7 minute mark to the end, since the beginning is kind of boring, but the extremely fast ending is somewhat entertaining.

Level-By-Level Comments:

...I'm not creating this section for this submission, because this TAS goes through 90 levels! However, each level is basically the same, just a little faster each time. As such, if you can figure out how the game works in level 1, then you'll know how the game works on level 90.

Easter Egg:

Once you reach 999,999 points, the game plays a quick little jingle, so make sure you're paying close attention when I'm about to hit 999,999 points (see if you can recognize where it's from :D )

Encodes:

I have 2 encodes for this TAS: one just shows my TAS, and the other shows my TAS with my lua script running that displays where (if at all) a diver will spawn when you kill a row of enemies on that frame.

TAS Alone:

TAS With Lua Script:

Conclusion:

...And with that, I've done my part to clean up the TASVideos website. I hope you enjoy this TAS!
Samsara: ah, seek west,


feos: Indeed reaching the score cap makes the game completely stop, and complete stop is the farthest ending point for games with no clear ending.

The controversy about the current publication happened because there's no clear ending in this game, only some alleged and unclear one, but back then we didn't have the Kill Screen clause in endless games. What we had in 2014 was: "Games that loop endlessly can still be defined. The completion point is one where there is no new content, and the game is no longer increasing in difficulty." Kill Screen as an ending option was allowed in 2018, and the current pub was effectively made vaultable, we just never noticed. Also it doesn't need the branch anymore.

The emulation bug has also since been fixed, so the new record is unavoidably longer.

While the current movie is very Vault, the new run gradually gets more and more insane and interesting to watch, which the audience noticed and gave this run good feedback.

Accepting to Moons over [2599] A2600 Seaquest (USA) by morningpee in 01:39.8. The tier can be changed in the future if we need, since this counts as fastest completion by the current rules.

Zinfidel: Processing...


Similar submissions (by title and categories where applicable):