TASVideos

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

Submission #6614: The8bitbeast's SMS Zool: Ninja of the "Nth" Dimension "game end glitch" in 00:21.61

Console: Sega MasterSystem
Game name: Zool: Ninja of the "Nth" Dimension
Game version: Europe
ROM filename: Zool (E) [!].sms
Branch: game end glitch
Emulator: Bizhawk 2.3.2
Movie length: 00:21.61
FrameCount: 1074
Re-record count: 5207124
Author's real name: Jake M
Author's nickname: The8bitbeast
Submitter: The8bitbeast
Submitted at: 2020-02-01 10:12:19
Text last edited at: 2020-02-22 04:07:14
Text last edited by: ThunderAxe31
Download: Download (1281 bytes)
Status: decision: delayed
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:

(Link to video)

Game Description

“Zool – Ninja of the Nth Dimension” is a platformer released in 1993 for various consoles including the Sega Master System. The game varies drastically across platforms. The Game Gear version has similar mechanics to Master System, but entirely different level layouts.

The Master System version was exclusive to Europe, hence the PAL settings were used (sorry encoders :P)

The objective of each level is to collect 99 objects. These objects could be food, z-tokens or items such as super jump. Once you collect 99, the arrow will point to the exit. The exit does not exist until you have 99.

It turns out none of this matters because this game is beatable within 32 frames of actual gameplay. This is the game end glitch category which obseletes #6572: The8bitbeast's SMS Zool: Ninja of the "Nth" Dimension "game end glitch" in 03:10.06 by 8373 frames (a time save of 2:47.46)!

The final time for this TAS is 21.609 seconds, making it the fastest Master System TAS on TASvideos!

This TAS is a 9.88 second time using RTA timing as on https://www.speedrun.com/zool_sega_master_system/full_game It is possible to get a 9.84 time, but that would result in a later final input, meaning a slower TAS timing.

The New Credits Warp

My current published TAS uses a credits warp in 2-1 which involves being hit by an enemy onto a bouncy surface. The earliest this warp can be done is in 2-1 (level 5) as there are no bouncy surfaces in levels 1 to 4. After this TAS, an RTA community for this game emerged. During a run, cxrnxr encountered an earlier credits warp in 1-2 https://youtu.be/pUnCy4g7G08

After this credits warp was found, a gold rush to push it earlier begun. With lots of help from the community, I was able to pull back the credits warp to the start of level 1.

The key to the credits warp is to have Zool teeter on an edge and press up (Note that you can also press P2 Up or P2 Down). Pressing up appears to reset/affect Zool’s teetering animation and doing this with specific positioning at specific spots of the animation will cause the game to warp you to the credits.

There is also a third method of credits warp that has been found by Phozon, but it is slower than the teetering method. In the clip Phozon gets hit by an enemy into a bouncy surface, then grabs a wall. The game warps him to the credits upon him grabbing the wall. It is currently unknown if this is possible without the bouncy surface. https://clips.twitch.tv/WildPunchyStapleAMPTropPunch

Optimizing the Game End Glitch

As the game end glitch has to do with Zool’s teetering animation, causing certain things to happen with the animation can trigger it.

One option is to wait for Zool to teeter and experiment with pressing up at certain points of the animation. This is bad as you have to wait for some time before he will start teetering.

The alternative is to press up on the frame you reach 0 speed. Simply reaching 0 speed from not pressing buttons doesn’t work, but reaching 0 speed through pressing L, R or L+R gives potential to cause the glitch. Therefore, in the TAS, I aim for the fastest time for Zool to be: -In the teeter range of the edge while -Pressing L, R or L+R and -Reaching 0 speed on the same frame (I’ve never seen the glitch occur with nonzero speed)

As such, I hold L at the start of the TAS until Zool has moved to the left enough that letting go of L will allow him to reach the edge. Here is a list of acceleration values with the buttons that are pressed shortly after letting go of L:

Buttons Pressed Acceleration to the right
Neutral 0x48
Right 0x40
Down 0x15
L+R 0x00
L -0x40

It is important to note that shortly after letting go of L, pressing R, L+R or nothing will all have the same effect on speed, which is equivalent to the acceleration of letting go of L. The R or L+R accelerations from the table only come into effect once you have a speed below 0x0200, which occurs 9 frames after letting go of left at top speed (0x400). Despite not affecting speeds when at high speeds, pressing R or L+R has some affect on the glitch as it affects the teetering animation.

Counter intuitively, pressing R actually causes Zool to decelerate slower, making him go more to the left! This can be used to potentially make it to the edge while letting go of left a frame earlier.

This TAS reaches 0 speed on frame 1073, at which point it presses up as it’s last input. The previous input was a R input with some speed about to hit 0. As discussed previously, this can lead to the glitch.

My main concern is that it is possible to reach the edge with 0 speed on frame 1072 by utilizing down presses. However down presses have an acceleration of 0x15, which misaligns your speed value modulo 8 and there is no way to restore the alignment other than hitting 0 speed (using neutral inputs) or using 8 down presses. Unfortunately, it doesn’t seem possible to trigger the glitch by pressing up on the frame you hit 0 speed if you achieved that 0 speed through a neutral d-pad input.

Jumping

Jumping causes faster acceleration and deceleration, but it is not useful as the smallest jump lands later than the last input of this TAS and there does not seem to be a way to trigger the glitch in the air.

Brute Forcing Attempts

In a desperate attempt to save that potential extra frame, I wrote some scripts to brute force this TAS. As mentioned above, we can remove jumping from the search, but each frame we have any combinations of U,D,L,R, shoot to choose from. From here I noticed that down has the highest priority and up has the lowest priority, meaning that I didn’t include any inputs in my brute force that had combinations of up or down with left or right.

I also didn’t do much brute forcing with bullet shooting because it didn’t seem to have a serious impact. Most of my attempts only pressed up at the end of the inputs, since it doesn’t seem to do anything in game apart from messing with your teetering animation and triggering the glitch.

My method for detecting a game end glitch was to look at the level value and check that it wasn’t 0. The glitch always corrupts your level value to something different.

Below I’ll summarize a number of different approaches that I took to brute forcing, but it is likely that I missed some attempts that I’ve forgotten about.

Brute force attempt 1

My first attempt literally started searching the whole d-pad and shooting space before I realized the search reduction methods above. I got about 5-6 frames in with the brute forcing and did not trigger the game end glitch.

Brute force attempt 2

I started the run by holding left for a bit, then went 1-2 frames before this TAS lets go of left and searched the space with the minimizations above. I got 6-7 frames in without triggering the glitch.

I also only allowed neutral and R within 7 frames of letting go of left. Both neutral and R do the same thing to your speed, but have different effects on your teetering and hence the glitch. L+R and R have identical effects in all aspects within 7 frames of letting go of left.

Brute force attempt 3

I held left until the frame before I let go of left in this movie and searched the whole space. I noticed that L+R, R and neutral did the same thing within 7 frames of you letting go of left. Once again, I got 8-9 frames in without triggering the glitch

Brute force attempt 4

Here I assumed that left wouldn’t be used after I let go of left, so I removed this from the search

Brute force attempt 5

I let go of left 1 frame earlier than this movie and removed down from the search space as down results in the speed misalignment. I did not find a solution that was faster than this TAS

Brute force attempt 6

Same as attempt 5 except that I let go of left on the same frame as this movie. Here I reproduced the glitch at the same speed as this movie through the brute forcer. Interestingly, last input was on the same frame as this movie, but the fadeout to the credits happened 2 frames slower. This was because the brue forcer stumbled across a slightly different pattern of pressing right vs pressing neutral in the 7 frame window after letting go of left.

At this point I concluded that the brute forcing attempts were finished and I had not found any improvements to my original solution by hand (this submitted movie). It’s possible that the fadeout could happen quicker than this movie, but not the last input.

I’m extremely confident that I exhaustively searched the space of left, right and left+right inputs. However it was too computationally intense to search the space including down inputs fully. I did however search a large portion of that down input space.

This means that I’m relying on my understanding of the glitch triggering conditions to conclude that this it optimal. Although, the elusive potential frame save still bothers me a lot, hence all the brute forcing attempts and delayed submission.

My original script can be found at this link, but I ended up with about 10 different scripts in the end for different phases of testing. This is just my first script: http://tasvideos.org/userfiles/info/61050675887497989

RTA Community and “Console Verification”

Shortly after my original TAS, an RTA community popped up for this game. This led to many discoveries including the new game end glitch that allowed me to save so much time with this TAS.

After finding the new game end glitch, I quickly made a TAS which matches this submission’s TAS timing. I realized that this would be possible to match RTA as it only relied on hitting 2 frame perfect inputs. After some trying, I managed to get the WR of 9.88 seconds RTA timing. Note: RTA timing starts from pressing 1 on the title screen and ends on the first fully blue frame after the level fades out to the credits.

I made a tutorial on how to achieve 9.88 and we eventually had 40 people tie my RTA world record of 9.88!

Of significant note is btrim who achieved 9.88 on console https://youtu.be/RNwVmRxMNXw Considering he held the 1 button from bootup, he actually completely matched this run in timing from power on. This makes this *technically* the first console verified Master System TAS!

A Faster Run in RTA Timing (9.84)

It’s possible to make the game fade to the credits 2 frames faster than this TAS. You need to pause and unpause frame perfectly within about a 10 frame window near the glitch. This is a general glitch which will make any level fade out 2 frames faster. This is not used in the TAS because it causes your last input to be 2 frames later.

A button file of this 9.84 can be found here: http://tasvideos.org/userfiles/info/61050567104901897

Note: It’s quite possible that there’s an alternate method to trigger the glitch that fades out much faster. As I said in the brute forcing section, I found one with an almost identical setup that fades out 2 frames slower. I haven’t put heaps of effort into finding a faster fade out as that wouldn’t affect the TAS timing.

RAM Addresses

Address Description
0x0AB5,0x0AB4 X Vel
0x0AF8,0x0AF7,0x0AF6 X Position
0x0AB7,0x0AB6 Y Velocity
0x0AF5,0x0AF3,0x0AF4 Y Position
0x0A92 HP
0x0A80 i-frame timer
0x0ADDD Object count
0x0A84 Level
0x0B95,0x0B85 Boss HP

Final Thoughts

Thanks again to Revenged2, greysondn and Synahel for making sure the original game end glitch wasn’t lost. It was finding the post in the TASvideos forum where I actually found out about this amazing TAS game.

Thanks to cxrnxr and the rest of the RTA community for helping to find the faster credits warp

Thanks to EZscape for bringing more attention to this game and the Master System


ThunderAxe31: Judging.

ThunderAxe31: Setting to Delayed, in view of a possible improvement.


Similar submissions (by title and categories where applicable):