Difference between revisions of "Hookpush"

From ALttP Speedrunning Wiki
Jump to: navigation, search
(Created page with "Hookpush is a Major Glitch that uses Misslotting to alter the values the Hookshot uses to determine how far and in what direction to pull Link when the ho...")
 
Line 10: Line 10:
  
 
==General Technique==
 
==General Technique==
 +
 +
[[File:Ancilla Watch Labeled.png|thumb|Labeled Ancillae Super Watch]]To best learn this and debug problems that may arise, you'll want to use Ancilla Watch in the Practice Hack. Open the Practice Hack Menu, go to HUD Extras, then Super Watch and toggle to Ancillae. This will draw values important to misslotting and Hookpushing on the left side of your HUD. Reference the image to see what these values are.
 +
 +
In order to Hookpush, we want to do a few different things:
 +
# Misslot a Somaria Block into Slot9. This requires a couple of steps:
 +
## Get the Search Index higher than <code>09</code>. There are multiple ways to manipulate the Search Index, and the best way may depend on the specific Hookpush you're doing. However, the most common way to get a value higher than <code>09</code> is to quickly use the Lamp 3 times while Link is facing any direction except right. Not many things that crop up in normal gameplay write to this address, and only hard resets will put it back to 0. So you can often set this value way ahead of the exact room/moment where you want to do a Hookpush.
 +
## Fill the Front Slots (slots 0-4) with ancillae. This is necessary because Somaria blocks will occupy a Front Slot by default, but we want it to load into Slot9.
 +
## Have an ancilla in Slot 9. When we go to use the Cane of Somaria with the Front Slots filled, the game will take the value of the Search Index and look from that value down until it finds an ancilla to replace. If we have an ancilla in slot 9, the block will load there, which is exactly what we want. Usually, we'll hold a sword charge to do this, since the sparkles that appear on the sword use Slots 7-9 by default.
 +
## With the Search Index set above <code>09</code>, all of the Front Slots occupied, and an object loaded in Slot 9, we can use the Cane of Somaria and a block will be loaded into Slot 9.
 +
# With a block in Slot 9, we now want to set the counters to values that we want. This is going to be highly dependent on your goal with the Hookpush, but generally, we'll want the counters for Slots 1-3 to be non-zero so the Hookpush doesn't end during the frames where the game is using those counters. Then we'll want a high value in Slot 0 to extend the duration of the Hookpush (slot 0 sword beams are often really great for this since they'll write <code>4C</code> to slot 0's counter, which creates 76 frames of Hookpushing). If we want to get pulled into EG, we want a non-zero value in the EG Check, and if don't, we want <code>00</code> there.
  
 
==Applications==
 
==Applications==

Revision as of 20:03, 26 May 2021

Hookpush is a Major Glitch that uses Misslotting to alter the values the Hookshot uses to determine how far and in what direction to pull Link when the hook latches onto something. Because the game mostly ignores collision while Link is being dragged by the Hookshot, this can be a very powerful glitch for bypassing walls and other obstacles.

Loose Explanation

Normally, when Link uses the Hookshot, a Hookshot ancilla is loaded into slot4 and a counter in that slot will immediately be set to 0 and then increment every frame the Hookshot is extending. When the Hookshot connects with an object to pull Link to, the counter will decrement every frame as Link is pulled to the object, with Link stopping when the counter gets back to 0. But what if we can get the Hookshot to look at different counters outside of its current ancilla slot? That's how this glitch is gonna work.

$039D is a memory address where the Hookshot's current slot value is written to when we use the Hookshot, and it is referenced when the game starts pulling Link to determine which slot's counters the game should use. A Somaria block placed in slot9 will decrement the value at this address every frame. This means that if we have a Somaria block in slot9, and we use the Hookshot with no other ancilla loaded, the Hookshot will spawn in slot4 and the counter for slot4 will increment until the Hook connects with an object. For the first frame of pulling, the slot4 counter will be used, but then, because of the slot9 block decrementing the value at $309D, the next frame of pulling will read data from slot3, the 3rd frame of pulling from slot2, then slot1, and then finally slot0, where it will continually use this counter until it reaches 0.

Through using other ancillae in specific ways, we can manipulate the counters in other slots to get the Hookshot to pull us for extended durations and/or in the incorrect directions. Or even have it pull us to EG.

General Technique

Labeled Ancillae Super Watch
To best learn this and debug problems that may arise, you'll want to use Ancilla Watch in the Practice Hack. Open the Practice Hack Menu, go to HUD Extras, then Super Watch and toggle to Ancillae. This will draw values important to misslotting and Hookpushing on the left side of your HUD. Reference the image to see what these values are.

In order to Hookpush, we want to do a few different things:

  1. Misslot a Somaria Block into Slot9. This requires a couple of steps:
    1. Get the Search Index higher than 09. There are multiple ways to manipulate the Search Index, and the best way may depend on the specific Hookpush you're doing. However, the most common way to get a value higher than 09 is to quickly use the Lamp 3 times while Link is facing any direction except right. Not many things that crop up in normal gameplay write to this address, and only hard resets will put it back to 0. So you can often set this value way ahead of the exact room/moment where you want to do a Hookpush.
    2. Fill the Front Slots (slots 0-4) with ancillae. This is necessary because Somaria blocks will occupy a Front Slot by default, but we want it to load into Slot9.
    3. Have an ancilla in Slot 9. When we go to use the Cane of Somaria with the Front Slots filled, the game will take the value of the Search Index and look from that value down until it finds an ancilla to replace. If we have an ancilla in slot 9, the block will load there, which is exactly what we want. Usually, we'll hold a sword charge to do this, since the sparkles that appear on the sword use Slots 7-9 by default.
    4. With the Search Index set above 09, all of the Front Slots occupied, and an object loaded in Slot 9, we can use the Cane of Somaria and a block will be loaded into Slot 9.
  2. With a block in Slot 9, we now want to set the counters to values that we want. This is going to be highly dependent on your goal with the Hookpush, but generally, we'll want the counters for Slots 1-3 to be non-zero so the Hookpush doesn't end during the frames where the game is using those counters. Then we'll want a high value in Slot 0 to extend the duration of the Hookpush (slot 0 sword beams are often really great for this since they'll write 4C to slot 0's counter, which creates 76 frames of Hookpushing). If we want to get pulled into EG, we want a non-zero value in the EG Check, and if don't, we want 00 there.

Applications