Difference between revisions of "Spooky Action at a Distance"

From ALttP Speedrunning Wiki
Jump to: navigation, search
(Created page with "ALttP has an array to keep track of the altitude of various objects. {| class="wikitable" style="text-align:center;" |+ Altitude array: |- | $7E029E || $7E029F || $7E02A0 ||...")
 
(No difference)

Revision as of 13:23, 12 May 2019

ALttP has an array to keep track of the altitude of various objects.

Altitude array:
$7E029E $7E029F $7E02A0 $7E02A1 $7E02A2 ...
SLOT0 SLOT1 SLOT2 SLOT3 SLOT4 ...
Bombs Bombs ... lots of stuff ...

Objects have default slots that they try to use, but if their default slot is in use, it will use a different slot.

The important slots are slots 4 (default) and 3. The fire rod glitch happens when there's a leftover value in one of those slots.

The game should initialize the altitude to a sane value when you use an item that has an altitude (e.g. a somaria block gets an altitude of 0 when you place it, and non-zero when you throw it). Fire rod doesn't do this.

There are two parts to the fire rod, the main hit (the fire you see) and some area damage around the impact area. The area damage erroneously subtracts the leftover altitude value when it checks collision.

You can force a slot 4 item into slot 3 by tapping A with the boots before using the item. The dust effect from boots occupies slot 4, and unlike almost everything else, it doesn't overwrite the value. This is important.


There are a few ways to leave a value in a slot:

  • Having a bomb explode midair
  • Popping a somaria block midair
  • Getting picked up/dropped off by the duck
  • Throwing a somaria block or bomb into a hole will set an altitude of FF.
  • Throwing a somaria block and popping it exactly when it hits the ground will set an altitude of FF (frame perfect)
  • Throwing a bomb and having it explode immediatley when it lands will set a value of FF (frame perfect)

Bbomb setups are useless; other items tend not to use slots 0 or 1. Somaria & Flute are important.

The mighty, variable-setting-duck

           ,-.
       ,--' ~.).
     ,'         `.
    ; (((__   __)))
    ;  ( (#) ( (#)	Quack
    |   \_/___\_/|
   ,"  ,-'    `__".
  (   ( ._   ____`.)--._        _
   `._ `-.`-' \(`-'  _  `-. _,-' `-/`.
    ,')   `.`._))  ,' `.   `.  ,','  ;
  .'  .     `--'  /     ).   `.      ;
 ;     `-        /     '  )         ;
 \                       ')       ,'
  \                     ,'       ;
   \               `~~~'       ,'
    `.                      _,'
hjw   `.                ,--'
        `-._________,--'

When the duck drops you off somewhere, it ALWAYS uses slot 4 for its altitude. Oddly, the higher the duck is on screen, the lower the altitude is. If you move to the right, the duck stays on screen longer which causes the altitude to get lower. If you go left, the duck goes off screen faster, which causes a higher altitude.

We make use of this when the duck drops us off at the mire portal. By picking up the dark rock from the bottom side, we keep the duck on screen a bit longer to get an altitude around 135-150 in slot 4. This value stays in memory until we get to the mire basement.

In the first room of the mire basement, we need to place a somaria block on the switch. Somaria uses slot 4 by default, and immediately overwrites slot 4 with 0, this would unglitch the fire rod. To get around this, we use boots right before placing the block to make somaria use slot 3 instead.

For the remainder of the basement, fire rod's area damage will be hitting 135-150 pixels higher than the impact point, allowing us to hit all of the crystal switches from afar.