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

Submission #6570: The8bitbeast's SMS Enduro Racer in 10:12.84

Console: Sega MasterSystem
Game name: Enduro Racer
Game version: JPN
ROM filename: Enduro Racer (J) [!].sms
Emulator: Bizhawk 2.3.2
Movie length: 10:12.84
FrameCount: 36723
Re-record count: 25249
Author's real name: Jake M
Author's nickname: The8bitbeast
Submitter: The8bitbeast
Submitted at: 2019-12-15 06:54:31
Text last edited at: 2019-12-31 11:06:10
Text last edited by: Spikestuff
Download: Download (14930 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:
Enduro is a symbolic journey through life via the media of a race.

The results are insignificant and what really counts is competing.

Of particular importance are the lessons to be learned concerning one’s self from the various encounters you experience along the way.

There is no victor or loser in this test of endurance.

The only thing that really matters is that you make a commitment to begin the long and trying trek.

This game TAS is then dedicated to all of the “Life Riders” who have started out on the solitary trip to find their own individual limits.

Last, but not least, may we sincerely congratulate you on a perfect run.

(Link to video)

The Game

Enduro Racer was originally a 1986 Sega Arcade game. It was later released on various home consoles including the Master System. The arcade and master system versions are entirely different games. I decided to TAS the Master System version because I’m a Bizhawk/SMS fanboy. The Japanese Master System version differs significantly from the other regions. The non-Japanese versions only have 5 courses, which repeat, whereas the Japanese version has 10 unique courses. The Japanese version was used for this TAS to show off the variety of courses. If a US TAS was submitted, it should be considered a different category, as on https://www.speedrun.com/enduro_racer

Upgrade System

Every time you pass an opponent you receive 1 point. These can be used to buy upgrades. Some upgrades such as handling and tyre are useless in a TAS because I can just steer carefully and avoid rough terrain. The most useful upgrade is engine, as it increases your top speed by 33%. A downside to engine is that it costs 10 points, which is difficult to achieve in a single race without heavy manipulation. Another theoretically useful upgrade is acceleration. This would save some time at the start of each race, but is overshadowed by engine’s usefulness. Another possible upgrade is suspension. This makes you leave ramps at full speed rather than having to time a down press to remain at full speed. This is useless for the vast majority of the run, but could be theoretically useful to end inputs early (as you could just ride a few ramps with no input to the end). Even though this is theoretically faster with TAS timing, it is once again overshadowed by the engine upgrade.


After completing 10 courses you receive a final time and congratulations screen. If you continue playing, you complete courses 11-20. These are identical to the first 10 courses, except that upgrades cost twice as much and there are roughly twice as many opponent racers. After completing race 20 you get a different ending screen with a deep life lesson (see the top of the submission text). I chose to play just one loop and end the TAS after round 10. This is because 11-20 are identical apart from some different opponent manipulation. This lines up with the RTA category definition and makes sense as your in game time total and points are reset after race 10.

Game Time vs Real Time

I chose to optimize for real time for one simple reason. The in game time is broken as heck. Take for example level 1. My timer starts at 60 and ends at 29. This means that my total seconds is 31 for the level, which the game calculates correctly. However, the game flips the centiseconds incorrectly for the final calculations, and essentially takes my timer value of 29.xx and gives me a time of 31.xx (same centisecond value). This means that finishing with the clock reading a high 29, will give me a high 31 and finishing with a low 29 (slower race) will give me a low 31. As a result, for every race it is best to finish with the clock just about to tick over to the next second, giving you a race time of xx.01. So essentially every level’s in game time is on a frame rule of 60 frames. While my final TAS aims for real time, it does optimize for game time as a secondary goal. But my real time TAS does not obtain the best possible game time (see below).

Game Time TAS

Although I made the final submission in real time, there is some tech that is used for optimizing for in game time that is slower in real time. See the tricks and techniques section for more information. As such, I’ve also made a TAS optimizing for in game time which can be found here:



Real Time TAS Game Time TAS
Game Time 4:10.10 3:59.10

RAM Values

Address Description
0322 Speed (Maj)
0321 Speed (Min)
031A,0302,0318,0316 Race progress (position)
040D Y (Height off the ground)
0372 Opponents passed
0353 Opponent spawn timer
0392,0391 Timer

Tricks and Techniques

Opponent manipulation

0x372 tracks the number of opponents you have passed. 0x353 is a timer that will tick down 128 frames before another opponent can appear. The timer begins once opponent “n” leaves the screen and opponent “n+1” will not appear until the timer reaches 0. The timer for the first car will begin once the course is 6% complete, this then ticks down 128 frames until the first opponent appears. No opponents can appear after the course is 96% complete. The opponents spawn position depends on where you are in the track and it partially depends on RNG. The easiest way to manipulate RNG is to use up presses on player 1 as this has no in-game effect (apart from negating left and right presses). By using up to manipulate RNG, you can usually choose between 2 starting positions of the opponent. The only way to obtain more possible starting positions is to encounter your opponent on a different part of the track by getting the other RNG pattern on the previous opponent(s) or by sacrificing real time. As the engine upgrade costs 10 points, you need to have passed an everage of 10 cars per level after every level. Some tracks (such as track 5) are very treacherous, which makes it easy to pass opponents quickly. As a result, it’s possible to pass 11 cars on track 5. Some other tracks (such as tracks 7 & 8) have many ramps, which cause the opponents to go in the air and stay on screen for longer. These tracks make it very difficult to reach the goal of 10 passes.

In tracks 7 & 8, I only managed to get 9 points without slowing down. Only one of these tracks could have 9 points because I had only one extra point from track 5. I tried optimizing a 10 point run by slowing down on each track. It was 58 frames faster in real time to get the 10 points on track 7 compared to track 8.

Ramp Tech

When jumping over a ramp you will lose 25% of your speed. You can avoid this by having a suspension upgrade or by pressing down while going over the ramp. If you are pressing down shortly after leaving the ramp, you will lose 25% of your speed. These 2 speed losses can compound to make your new speed (0.75)^2 = 0.5625 times your old speed (a low of 44% of your speed). Obviously keeping your full speed is desired in the majority of cases, unless you are slowing down to manipulate cars, or not pressing down due to ending inputs early.

Super Jumps

After reaching the peak of your jump from a ramp, you can press the buttons 1 or 2 to partially reset your y-velocity. The results of this seem inconsistent. Sometimes this is more effective than others in RTA.

Although this is difficult to pull off RTA, there’s a very easy method to optimize it in TAS. You should alternate mashing the 2 and 1 buttons. This will cause some periodic lag, which is speed dependant. At the full engine upgrade, the game will consistently lag every 4 frames at full speed. You can negate this lag by pressing down the frame beforehand. This means you can have a 1 or 2 press every frame, resulting in the slowest possible falling speed. You can often span over 20% of the course off a single ramp in this method, but it is only used to that extent in the game time TAS, as each ramp gives you a 1 frame boost in real time.


A note on lag is that it won’t affect real time or game time, so it is not often necessary to reduce it. The way that the game deals with lag is to make you move twice as far in the frame before, then not at all during the lag frame.

In game time optimization

As mentioned previously, the in game time essentially runs on a 1 second frame rule. But there are a few strategies to always hit the .01 centisecond mark without sacrificing real time.

The main method for manipulating IGT is ramps. After leaving a ramp optimally (by pressing down while going over it), you will retain your regular speed through the air. However, while in the air the game time runs half as fast. This essentially means that you should spend as much time as possible in the air to optimize game time. Using this strategy (as in my IGT TAS), allows you to get faster times than my real time TAS. The only reason that I don’t spend more time in the air in the real time TAS is that every ramp gives you a 1 frame time save in real time (but results in your IGT running at regular speed for a few frames).

Game Crash

The level won’t end until you’re touching the ground. This can be used to exceed the finish line by using a super jump. This usually results in a game crash, but results can vary. Often the game will hard lock, or it will reset. If a reset occurs, there will sometimes be garbled graphics post-reset. The effect of the crash seems to depend on the level and partially on your position (but it seems to pick from 2 scenarios). The only somewhat useful version of the crash is in the last level. In this level, instead of the game resetting, the course itself will reset with corrupted graphics. Along with the graphics, the times for the other 9 tracks are also corrupted. This leads to a total time of over 70 minutes, but perhaps it could be changed to make a very low in game time. As of writing this, I haven’t found a way to cause the times to corrupt differently. Even if I did, it would probably be banned or separated from my in game time TAS.

feos: Optimizing for in-game time doesn't make sense if instead of making the competition more fair (like in Sonic, where you just ignore the score tally) it requires simply wasting some real time (like in Arcade Arm Wrestling). So this movie is good.

It also ends input early so it gets lower real time, even though it requires getting to the ending a little bit later than if it kept driving forward. It's a valid approach to end a movie, we use to trust the author's taste unless it wastes unreasonable amount of time that way.

The jumps were really cool, and even though I found it hard to watch due to diagonal scrolling and the character moving up and down across the whole screen all the time, the audience really liked the movie.

Accepting to Moons.

Spikestuff: Published.

Similar submissions (by title and categories where applicable):