Discovered by Klydestorm

Regular Superswimming (TAS-only)

Pressing alternate directions on every other frame while swimming will cause Link's speed to increase linearly at 3 units of speed per frame assuming perfect 180 degree turns holding all the way in each direction. If charged up for long enough, this can allow Link to travel between islands of the great sea without needing the sail or the King of Red Lions.

Buffered Superswimming

Using pause buffering, it is possible to gain speed via superswimming by alternating between Up and Down on the control stick between every pause. However, once you gain ~600 units of speed, you can actually just hold Up to continue charging a superswim due to how the games target camera (the default camera when the freecam is off) works. Once you have enough speed, you can release the swim in whichever direction you're facing. Also, it was found that when Link is going at around ~520 units of speed, you can hold up ess and buffer in a one frame target, allowing you to start the up-charge sooner.

Superswim Speed

Although the general trend while charging is a major increase in speed over time, Link's speed while charging does not constantly increase. Link's swimming animation occurs in a cycle, and which frame he is at in the cycle determines the speed he has. As a result, Link's speed will drastically fluctuate depending on which frame in the swimming animation's cycle he is currently in.

There are several ways to make superswim speed and distance more consistent in a speedrun. After releasing a superswim, you will lose three units of speed every frame. If you release too early, you will not have enough speed and will not travel far enough. If you charge for too long, you will not have enough air and will drown too soon. With this in mind, the optimal time to release a superswim for maximum distance is about two-thirds of the total charging time. However, even when releasing at around two-thirds of the total charging time, you can still get low speed and not travel far enough.

The following graph illustrates the correlation of frames and overall velocity for one air gauge worth of time:

Graph courtesy of Abahbob

Superswim Graph

Once you're satisfied with your speed, release the analog stick with Link's back pointing where you want to go, and Link will rocket backward at the speed you attained. You can better judge where you're aiming by looking at your map.

The only limit to the speed you can gain is your air meter, and the positioning of the land, including things you can climb on out of the water. You can continuously refresh your air meter if you happen to swim close to the shore of an island without going on land. If you superswim onto land, your speed is retained, and Link will run backward. If you go off an edge or back into the water while on land, your speed will reset back to 0. With enough speed, it is possible to reach an island before it loads. This allows Link to be loaded underneath an island, similar to a Wind Waker dive.

Superswimming can be used to cross vast amounts of overworld extremely quickly (much faster than sailing). The sail is still a necessary item, however, as not obtaining it will cause softlocks later in the game.

Swimming Animation

Figured out by Trogg

These are the swimming animation and swimming speed equations:


When you hold a stick direction, animation affects speed (this is not the case when you hold neutral). Animation position can be float values between 0 and 23 (of course modulus is unnecessary because of the cosine's frequency). The animation starts at 0 when link is low and his arms are close. Then he bobs up at 23/2 and his arms go out. Then he bobs back down and his arms go back in at 23.

Here is link's swimming animation frames (note 1 frame delay in TWW that is no longer in TWWHD)

discord thingy

In the graph, the horizontal axis represents the animation position, and the vertical axis represents the value the speed would get scaled by due to animation.

equation 1

(only applies when holding a stick direction)

pic 3

The animation position can be determined by adding the animation increment to the animation position of the previous frame. At normal swimming speeds the animation increment is small (<2). However, this is no longer the case at high speeds. The animation increment equation can be represented as a plane in R3. Animation increment is the red axis. Speed is the green axis. Air is the blue axis.

animation increment

equation 2

pic 2

note: When Link changes from the stick direction swimming animation to the neutral swimming animation, since neutral animation does not scale speed, in order to have continuous speed values, the scaled speed from the directional animation becomes the new true speed value. TLDR you loose speed from hitting neutral

Whenever you are in the water, Link's air meter also scales Link's speed. Air starts at 900 and decreases by 1 each frame until it reaches 0 (when you drown). The next graph is an approximation where the horizontal axis is the air, and the vertical axis is the value the speed would get scaled by due to air.

equation 3

pic 4

Speed loss mechanics

After you finish charging speed link lose will lose speed at various rates depending on the inputs on the analog stick.

  1. Holding all the way in a direction on the analog stick (Not ESS) will lead to a loss of 3 units of negative speed per frame.
  2. Holding ESS will lead to a decrease in the rate of speedloss depending on how good the ESS position is. With perfect ESS position the speed loss is 0.11 units of negative speed per frame.
  3. Holding neutral on the analog stick will lead to a fractional speed loss on the first frame of holding neutral followed by 2 units of negative speed per frame on all later frames of holding ESS. The amount of speed loss is determined by where link is in his swimming animation and ranges from half of his current speed value to no additional speed loss other than the 2 units of negative speed per frame.
  4. If you while holding target you hold on the analog stick in the direction link is traveling in it will set link's speed to zero in one frame.
Last updated 11/27/2020 – mralberto