Horizontal Movement Formulas/zh

在每 tick，游戏会进行如下三个步骤：


 * 1) 将加速度加到玩家的速度中.
 * 2) 移动玩家（新的位置 = 原位置 + 速度）.
 * 3) 降低玩家的速度以模拟阻力.

我们将从介绍各种乘数开始，尽力使公式可读性更强.

乘数
：移动乘数（参见 45°斜跑）


 * $$M_{t} = \begin{Bmatrix}1.3 & \textrm{疾跑} \\ 1.0 & \textrm{行走}\\ 0.3 & \textrm{潜行}\\ 0.0 & \textrm{停止} \end{Bmatrix} \times \begin{Bmatrix}0.98 & \textrm{正常}\\ 1.0 & \textrm{45°斜跑} \\ 0.98 \sqrt{2} & \textrm{45°潜行} \end{Bmatrix}$$

：效果乘数（参见状态效果）


 * $$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
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. Definition:
 * $$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.


 * 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$


 * Ground 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}) $$
 * $$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 momentum is cancelled and $V\displaystyle _{X,t}$ only includes acceleration.
 * If the player hits a Z-facing wall, then momentum is cancelled and $V\displaystyle _{Z,t}$ only includes acceleration.
 * In either of these case, the player stops sprinting.


 * 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
[...]