Horizontal Movement Formulas/ja

ゲーム内では、以下の3ステップが毎tick実行される:


 * 1) プレイヤーの速度に加速度を加える.
 * 2) プレイヤーを動かす（新しい位置 = 元の位置 + 速度）.
 * 3) 抗力の再現のため、プレイヤーの速度を落とす.

公式をより読みやすくするため、各種倍率の紹介から始める.

倍率

 * 移動方法の倍率（45°Strafeを参照）


 * $$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° Strafe} \\ 0.98 \sqrt{2} & \textrm{45°ス ニ ー ク} \end{Bmatrix}$$


 * エフェクトの倍率（ステータス効果を参照）


 * $$E_{t} = (\underset{\textrm{移 動 速 度 低 下 の レ ベ ル 1 ご と に} \; 15\% \textrm{低 下}}{\underset{\textrm{移 動 速 度 上 昇 の レ ベ ル 1 ご と に} \; 20\% \textrm{増 加}}{\underbrace{\left ( 1 + 0.2\times \textrm{移 動 速 度 上 昇 } \right ) \: \times\: \left ( 1 - 0.15\times \textrm{移 動 速 度 低 下 } \right )}}} \geq 0$$


 * Slipperinessの倍率（Slipperinessを参照）


 * $$S_{t} = \begin{Bmatrix}0.6 & \textrm{通 常}\\ 0.8 & \textrm{ス ラ イ ム}\\ 0.98& \textrm{氷} \\ 1.0 & \textrm{空 中} \end{Bmatrix}$$

直線の公式
以下の簡易式は、直線的な動き（移動方向の変化なし）にのみ適用される. この条件は限定的に思えるかもしれないが、シンプルなジャンプや助走の分析に非常に有用である. 角度を含めた公式への拡張は、後の見出しで行う. 定義:
 * $$V_{H,0}$$はプレイヤーの初速（デフォルト = 0）.
 * $V_{H,t}$ は $t$ tick目でのプレイヤーの速度.


 * 地面での速度:


 * $$V_{H,t} = \underset{\textrm{慣 性}}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} $$


 * ジャンプの速度:


 * $$V_{H,t} = \underset{\textrm{慣 性}}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} + \underset{\textrm{ダ ッ シ ュ ジ ャ ン プ ブ ー ス ト}}{\underbrace{\begin{Bmatrix}0.2 & \textrm{ダ ッ シ ュ}\\ 0.0   & \textrm{そ

れ 以 外}\end{Bmatrix} }}$$


 * 空中での速度:


 * $$V_{H,t} = \underset{\textrm{慣 性}}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{\underset{ }{0.02 \times M_{t}}}} $$

完全な公式
新しい変数を2つ導入する:
 * $ D_{t} $ （Direction）、プレイヤーの動いている角度、単位は度（キー入力と回転角度によって決まる）.
 * $ F_{t} $ （Facing）、プレイヤーの向いている角度、単位は度（回転角度のみによって決まる）.

実際には、significant angleの数が限られているため、角度はそれほど単純ではない（角度を参照）.

簡略化のため、この事実は無視する.


 * 定義:
 * $V_{X,0}$ と$V_{Z,0}$ はプレイヤーの初速に対応する.
 * $V_{X,t}$ と$V_{Z,t}$ は$t$ tick目でのプレイヤーの速度に対応する.


 * 地面での速度:


 * $$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{\textrm{慣 性}}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} \times \cos (D_{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}) + \begin{Bmatrix} 0.2 & \textrm{ダ ッ シ ュ}\\ 0.0 & \textrm{そ れ 以 外}\end{Bmatrix} \times \sin (F_{t}) $$
 * $$V\displaystyle _{Z,t} = \underset{\textrm{慣 性}}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}}  \right )^{3}}} \times \cos (D_{t}) + \underset{\textrm{ダ ッ シ ュ ジ ャ ン プ ブ ー ス ト}}{\underbrace{\begin{Bmatrix} 0.2 & \textrm{ダ ッ シ ュ}\\ 0.0 & \textrm{そ れ 以 外}\end{Bmatrix} \times \cos (F_{t})}} $$


 * 空中での速度:


 * $$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{\textrm{慣 性}}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{\underset{}{0.02 \times M_{t}}}} \times \cos (D_{t}) $$

停止条件
水平方向の速度は、プレイヤーが壁に接触するか、その速度が無視できるほど小さいと判断された場合、0に設定される.


 * 壁の衝突判定:


 * プレイヤーがX方向の壁と接触すると、慣性がキャンセルされ、$V\displaystyle _{X,t}$ に含まれるのは加速度のみになる.
 * プレイヤーがZ方向の壁と接触すると、慣性がキャンセルされ、$V\displaystyle _{Z,t}$ に含まれるのは加速度のみになる.
 * どちらの場合も、ダッシュは途切れる.


 * 無視できる速度のしきい値:


 * $ \left | V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 \right | < 0.005, $ の場合、慣性がキャンセルされ、加速度のみが残る.
 * $ \left | V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 \right | < 0.005, $ の場合、慣性がキャンセルされ、加速度のみが残る.


 * 1.9以降は、このしきい値は0.003となる.

ソースコード
[...]