Straining is a technique that Mario can use at any point while in midair in most actions. It involves how the joystick is angled relative to Mario's facing direction (which cannot be changed midair in most situations). Because of how the mechanic works, it can often become a trade-off of speed vs distance.

Technical Explanation

When in the air, the game deals with Mario's intended movement in two directions- forward and sideways (when forward speed is negative, it indicates backwards speed). These two different directions behave differently from one another, although the two are not independent. The farther the joystick is held in a given direction, the less of the effect it has on the other. This is true all the way to the point where one direction is maxed, and the other direction is zeroed.

The following calculations allow you to find what the effects of straining will be, but are not separate equations. Both equations are calculated at the same time and use the same values. This is why the two are not independent.

Forwards Movement

Forward movement is cumulative where some speed can be added to the forward speed. The maximum speed that can be added to forwards speed in a given frame is 1.15, although this depends on speed and type of air movement.

The formula for forwards speed is-


Forward Speed = Old Forward Speed + 1.5 * Stick Magnitude * cos(Angle from Forwards) ± 0.35 - Drag


Where angle from forwards is the angle from a vector straight forwards to the joystick direction, and stick magnitude is the magnitude of the stick being held divided by the maximum value. In other words, if the control stick is pushed all the way, the magnitude is 1. The ±.35 always brings the speed towards 0, so minus when speed is positive and plus when the speed is negative.

Drag depends on two things- whether or not Mario is long jumping and what his speed is after the stick magnitude and -0.35 is added to the old speed. The values for drag are-

Condition Drag
Forwards Speed ≤ 32, Non-Long Jump 0
Forwards Speed > 32, Non-Long Jump 1
Forwards Speed ≤ 48, Long Jump 0
Forwards Speed > 48, Long Jump 1
Backwards Speed ≥ -16 0
Backwards Speed < -16 -2

There's a couple important things to note from the drag table. Drag is never zero when considering the .35, you will always slow down if not straining. Drag is not linear, it only changes over certain barriers. The impact of this can create odd movement effects, like the 31.99 Trick. Lastly, the backwards speed drag when faster than -16 is so strong, you cannot actually accelerate faster than it. This creates a soft cap for backwards speed which prevents Mario from moving backwards fast (typically).

Sideways Movement

Sideways movement is a tad simpler than forward movement. Any sideways movement applied gives Mario sideways displacement, but not speed. This displacement is a max of 10 with pure sideways direction being held.

The formula for sideways displacement is-


Sideways Displacement = 10 * Stick Magnitude * sin(Angle from Forwards)


Where angle from forwards is the angle from a vector straight forwards to the joystick direction, and stick magnitude is the magnitude of the stick being held divided by the maximum value. In other words, if the control stick is pushed all the way, the magnitude is 1.

XX.99 Trick

The XX.99 Trick is a way to maximize speed when moving forward or backwards in the air. Due to how drag works during forward movement, maximum forward magnitude can actually be slower than significantly smaller forward magnitudes.[1] For example-

Speed at the start of the frame (normal air movement)- 30.86

New speed with full magnitude-    31.01        (=Speed (30.86) + Stick Magnitude (1.5) - Drag (1.35))
New speed with a lower magnitude- 31.99        (=Speed (30.86) + Stick Magnitude (1.48) - Drag (.35))

Speed lost due to poor straining- 0.98

The barrier in the above case is 32 speed which dictates behavior. It is important to remember that drag is determined after the + stick magnitude - .35, which is why the component is different between the two situations. Essentially, using too much magnitude can push you over the drag threshold (32 here).

Long jumping and backwards movement also have their own versions, 48 and -16 respectively. While the 32, 48, and -16 barriers would work for this purpose, it is not typically possible to hit them exactly and not go over. Because of this, the goal speed is usually to approach 31.99, 47.99, and -15.99 on the last frame before the barrier is hit.[2] The table below breaks down which speed should be aimed for depending on your speed-

Air State Speed Range for Trick Goal Speed for Trick
Normal Forwards 30.85 – 31.85 31.99 (32 exact)
Long Jump Forwards 46.85 – 47.85 47.99 (48 exact)
Backwards -14.85 – -15.99 (-16 exact)* -15.99 (-16 exact)

*Backwards air movement is capped at -16 speed

This trick also allows "free" sideways movement, since the stick magnitude is not maxed. For this reason, if sideways air movement is beneficial, it should be done here.

Hyperspeed

Since you can continue to strain forwards unbounded, many different hyperspeed methods involve using the 0.15 acceleration per frame to build up large amounts of speed. Usually, Mario is somehow kept in an air action with something holding him in place, like a wall. These methods can only build forward hyperspeed, since they are achieved through forward straining. These methods cannot be used to get PU speed, since Mario will bonk on out-of-bounds, removing his speed.

Hyperspeed methods using this method include-

Straining is also important for Backwards Long Jumping. When starting to backwards long jump, it is important maximize your negative speed at the start of the jump. This can be done by using the -15.99 trick. Holding maximum in the direction of movement will actually lower the speed every time -16 speed is passed, which can be incredibly costly given backwards long jumping's exponential behavior.

References