Submission #3132: tall's SNES Dragon's Lair in 09:17.82

Super Nintendo Entertainment System
baseline
Snes9x
33469
60
8289
Unknown
Dragon's Lair (U) [!].smc
Submitted by tall on 4/28/2011 6:11:41 PM
Submission Comments

Emulator Details

  • Snes9x 1.51
  • Left+Right, Up+Down enabled

Objectives

  • Uses hardest difficulty setting
  • Aims for fastest time
  • Takes damage to save time
  • Unlocks a secret message

Special Thanks

I want to put this section first to give recognition to someone really wonderful. marcolaranja and I originally were coauthoring this run. I had more time to work on the run, and after several weeks of a busy schedule, Marco graciously bowed out. You will be hard pressed to find someone as friendly as marco. He was the first to discover the quick way to the first exit, and how to beat the last level without damage boosting. Some of his input remains in level 1-2.
Other thanks to:
  • Tompa, for discovering an even better skip to the first exit
  • StarFighters76, whose maps on gamefaqs saved me the hassle of actually playing the game.

Useful memory addresses

I found an obscene number of memory addresses that were essential in optimizing.
AddressTypeNameDescription
7E054Bb sX-SpeedSpeed along the X-axis.
7E054Ab uX-SubspeedThe fractional value of the player's speed. Unlike other games that only use this for acceleration, different values affect your overall speed.
7E0522w uX-PositionPlayer's exact position on the X-axis
7E0BACw u"X"Player's approximate position. This is strange because this value has dead zones at the beginning and end of a level. Every time the least significant byte of X-position overflows, this increments*.
7E054Db sY-SpeedSpeed along the Y-Axis
7E054Cb uY-SubspeedThe fractional value of the player's speed.
7E0525w uY-PositionPlayer's exact position on the Y-Axis
7E0526w u"Y"Similar to "X," but there appear to be no dead zones.
7E0524b uX-RegionX-Position overflow counter.
7E0527b uY-RegionY-Position overflow counter.
  • In this sense it's similar to pixel and subpixel values, but you can be on different pixels for the same value of "X."
Enemies' HP works the opposite of most games. They start at 0 and go up. There usually will not be more than 4 enemies on the screen, but here are all of them.
EnemyAddress
17E0595
27E05D0
37E060B
47E0646
57E0681
67E06BC
77E06F7
87E0732
Some stages have a movable object that you have to push by running into it. To help with the last such stage, I found these addresses.
AddressTypeName
7E075Eb sObject Speed
7E075Db uObject Subspeed
7E074Bw uObject X-Position (right)
7E0755w uObject X-Position (center)
7E0763w uObject X-Position (left)
It is fun to enable cheats and give yourself infinite health, lives, and time.
AddressName
7E1036# Shields
7E1028# Lives
7E1030# Gold
7E1031Minutes
7E1032Tens
7E1033Seconds
7E0FCCFrames

Tricks Used

Damage Boost
Damage boosting appears in this game. It is best suited for giving the player a super high jump. This is used to skip large sections of levels. The Expert difficulty limits the player to one shield, meaning you can only take 1 hit before collecting another.
Speed Dampening
The player's speed gets butchered in the air. You lose 20 subspeed or more per frame until your total speed hovers around 3.6. However, during your throw or duck animations, you lose only 4 subspeed per frame. Any time you see me throw with no apparent reason, that's what's going on.
Fast Climbing
When climbing, you can start a new climb animation by repressing "up." Release as soon as you've stopped moving from one pull and your next pull will begin 5 frames faster. Over the course of the game, that's no small potatoes!
Level end abuse
There is some weird variation at the end of levels depending on whether you run through, duck, or come to an abrupt stop. These may all result in the same timer value, but some can cause the next level to start 1 or 2 frames faster. I optimized this as much as I could.

Stage by stage comments

...may come later. If you have any questions, put em in the thread.
Last Edited by TASVideoAgent on 8/18/2012 9:06 PM
Page History Latest diff List referrers