Horizontal Movement Formulas

__NOTOC_ Horizontal Movement is a bit more complex than Vertical Movement, as it relies on many more factors: player actions, direction, and ground slipperiness.

On every tick, the game does these three steps:
 * 1) Acceleration is added to the player's velocity.
 * 2) The player is moved (new position = position + velocity).
 * 3) The player's velocity is reduced to simulate drag.

We'll start by introducing Multipliers in an effort to make formulas more readable.

Multipliers

 * Movement Multiplier (See 45° Strafe)


 * $$M_{t} = \begin{Bmatrix}1.3 & \textrm{Sprinting} \\ 1.0 & \textrm{Walking}\\ 0.3 & \textrm{Sneaking}\\ 0.0 & \textrm{Stopping} \end{Bmatrix} \times \begin{Bmatrix}0.98 & \textrm{Default}\\ 1.0 & \textrm{45° Strafe} \\ 0.98 \sqrt{2} & \textrm{45° Sneak} \end{Bmatrix}$$


 * Effects Multiplier (See Status Effects)


 * $$E_{t} = (\underset{Decreases \; by \; 15\% \; per \; level \; of \; Slowness}{\underset{Increases \; by \; 20\% \; per \; level \; of \; Speed}{\underbrace{\left ( 1 + 0.2\times Speed \right ) \: \times\: \left ( 1 - 0.15\times Slowness \right )}}} \geq 0$$


 * Slipperiness Multiplier (See Slipperiness)


 * $$S_{t} = \begin{Bmatrix}0.6 & \textrm{Default}\\ 0.8 & \textrm{Slime}\\ 0.98& \textrm{Ice} \\ 1.0 & \textrm{Airborne} \end{Bmatrix}$$

Linear Formulas
Definition:
 * These simplified formulas only apply to linear movement (no change in direction).
 * While this condition might seem very restrictive, these formulas are very useful to analyze conventional jumps and momentum
 * We'll later expand on these formulas by including angles.
 * $$V_{H,0}$$ is the player's initial speed (default = 0).
 * $V_{H,t}$ is the player's speed on tick $t$.


 * Ground Speed:


 * $$V_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} $$


 * Jump Speed:


 * $$V_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} + \underset{Sprintjump \; Boost}{\underbrace{\begin{Bmatrix}0.2 & \textrm{Sprinting}\\ 0.0   & \textrm{Else}\end{Bmatrix} }}$$


 * Air Speed:


 * $$V_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{\underset{ }{0.02 \times M_{t}}}} $$

Complete Formulas

 * Let's introduce two more variables:
 * $ D_{t} $, The player's Direction in degrees (defined by their inputs and rotation)
 * $ F_{t} $, The player's Facing in degrees (defined by their rotation only)

In reality, angles aren't as simple as that, as there are a limited number of significant angles (see Facing and Angles).

For the purpose of simplicity, we'll ignore this fact.

Ground Velocity:
 * Definition:
 * $V_{X,0}$ and $V_{Z,0}$  correspond to the player's initial velocity.
 * $V_{X,t}$ and $V_{Z,t}$  correspond to the player's velocity on tick $t$


 * $$V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3} \times \sin (D_{t}) $$
 * $$V\displaystyle _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} \times \cos (D_{t}) $$


 * Jump Velocity:


 * $$V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3} \times \sin (D_{t}) + \begin{Bmatrix} 0.2 & \textrm{Sprinting}\\ 0.0 & \textrm{Else}\end{Bmatrix} \times \sin (F_{t}) $$
 * $$V\displaystyle _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} \times \cos (D_{t}) + \underset{Sprintjump \; Boost }{\underbrace{\begin{Bmatrix} 0.2 & \textrm{Sprinting}\\ 0.0 & \textrm{Else}\end{Bmatrix} \times \cos (F_{t})}} $$


 * Air Velocity:


 * $$V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.02 \times M_{t} \times \sin (D_{t}) $$
 * $$V\displaystyle _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{\underset{}{0.02 \times M_{t}}}} \times \cos (D_{t}) $$

Stopping Conditions

 * Horizontal speed is set to 0 if the player hits a wall, or if the speed is considered to be negligible.


 * Wall Collision:


 * If the player hits a X-facing wall, then $V\displaystyle _{X,t}$ is set to 0 and the player is placed against the wall.
 * If the player hits a Z-facing wall, then $V\displaystyle _{Z,t}$ is set to 0 and the player is placed against the wall.


 * Negligible Speed Threshold:


 * If $ \left | V\displaystyle _{X,t} \times S_{t} \times 0.91 \right | < 0.005 $, momentum is cancelled and only the acceleration is left.
 * If $ \left | V\displaystyle _{Z,t} \times S_{t} \times 0.91 \right | < 0.005 $, momentum is cancelled and only the acceleration is left.


 * In 1.9+, they are compared to 0.003 instead.

Source Code
[...]