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

Submission #1035: Luke's NES Excitebike in 05:35.38

Console: Nintendo Entertainment System
Game name: Excitebike
Game version: USA
ROM filename: Excitebike (JU).nes
Emulator: (unknown)
Movie length: 05:35.38
FrameCount: 20123
Re-record count: 1547
Author's real name: Luke Gustafson
Author's nickname: Luke
Submitter: Luke
Submitted at: 2006-03-31 03:29:32
Text last edited at: 2006-03-31 07:00:28
Text last edited by: Bisqwit
Download: Download (3065 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:
Track times (gain over previous run)

  0 ― 37.50 (1.42)
  1 ― 39.21 (4.53)
  2 ― 40.43 (4.78)
  3 ― 42.00 (2.59)
  4 ― 41.04 (3.69)
  5 ― 31.76 (4.75)
I figured out some of the programming for this game, which allowed me to discover various tricks to preserve speed.

First, I found out where your speed is kept in memory, so I could watch my speed while I played. This was very useful, obviously. For example, in level 2, I found out it is just barely worth it to slow down so you can hit the 2nd ramp (about .24 pixels per frame speed is gained).

The most important thing I noticed is that input affecting your speed is only checked every four frames. So, you only have to push B every 4th frame, which prevents engine overheating. When you're in the air, you only need to press Right every 4th frame to maintain your speed.

Now, input affecting the slant of your bike is also only checked once in a while. In the air, it's every 4 frames since you last inputted something changing the slant of your bike. On the ground, it's every 6 frames (or 13 if you're doing a big wheelie). In this run, I tried to keep this slant-timer out of synch with the speed-timer, so that I could slant my bike however I wanted without losing speed. Sometimes when you see me doing a wheelie before going over a ramp, it's to keep the slant-timer and speed-timer out of synch.

Besides simply avoiding speed loss, knowing these input timers also allows for some nice tricks. Left and Right affect your bike's arc while in the air, so I was able to greatly lengthen or shorten my jumps. If you jump too high, you'll wrap around to the bottom of the screen, and then eventually end up back on the track. I use this to my advantage to hit some ramps I wouldn't have been able to hit otherwise (for example, hitting all three ramps on the second lap of tracks 0 and 1).

Fun facts: Your usual max speed is 3.25 pixels per frame. Going over a ramp increases your speed by 1 pixel per frame. If your speed exceeds about 8 pixels per frame, there will be some graphical glitches eventually--this happens a couple times in my run. I get up to 9.25 pixels per frame in the final race.

For reference, here's the memory addresses I used:

0094 (high byte) and 0090 (low byte) are your speed

00B0 is whether you are in the air

0026 is the slant-timer. When this is 0 or 1, your input will be accepted for changing the slant of your bike.

004C is the speed-timer. When this is 3, your input will be accepted for affecting your speed.

0098 is whether you are crashing :)

Bisqwit: Accepting for publication to replace the previous short Excitebike movie.

Similar submissions (by title and categories where applicable):