ふっとび加速演出


ふっとび加速演出

スマブラSPでは、強くふっとばされたときのふっとびの初速が非常に速く、かつ時間が経つと急激に減速するようになった。
その正体はふっとびアニメーションの序盤を早送りする(コマをスキップする)というものである。*1
この仕様を、ここでは ふっとび加速演出 と呼ぶ。
海外では"balloon knockback effect"などと呼ばれている。

変わったのはアニメーションの早送りが行われるという点のみで、ふっとばし力、ふっとび速度、ふっとび硬直値の基本計算式はforと全く変わっていない。
ファイターがふっとぶ軌跡だけを見れば、forとSPは全く同じである。
ただし加速演出のせいで、 見かけのふっとび速度および実際のふっとび硬直時間はforと大きく異なる。

任意の攻撃で加速演出がどう発生するかを調べるには、 Smash Ultimate Calculator を使うと良い。
Smash Ultimate Calculatorは、ふっとび加速演出を含めたふっとび硬直・ふっとびの軌道を計算できる高機能なWebツールである。
ただし、
  • ファイター座標の計算が、仮想ふっとび時間を整数値に直したもので行われている
  • 壁や床に衝突したときにふっとび硬直が減少しない
  • ふっとび専用重力値の実装が実機と異なる?
といったゲームとの細かい相違点がある(19/5/3現在)。


用語

このページで使用する特殊用語。

ふっとび硬直値
詳しくはふっとび硬直を参照。
「ふっとばし力*0.4」で計算される。 小数点以下の値も計算に用いる。

現在硬直値
初期値はふっとび硬直値。
ふっとび時間とともに減少していき、0以下になった時に硬直が解けて行動可能になる。
後述する仮想ふっとび時間とは、
仮想ふっとび時間 = ふっとび硬直値 - 現在硬直値
の関係がある。

仮想ふっとび
加速演出が無いと仮定した場合のふっとび。スマブラforでふっとばされた時の挙動と同じ。
ふっとび硬直値と同じコマ数を持ち、ファイターの座標・速度は各コマについて計算される。
仮想ふっとび時間 は、あるフレームにおいてファイターが仮想ふっとびの何コマ目に相当する状態にあるかを表す数値とする(小数も取りうるものとする)。
加速演出が発生した場合、仮想ふっとび時間は実際にふっとんだフレーム時間よりも大きい値を取る。
仮想ふっとびフレーム は、特に整数単位で座標・速度計算などを行うことを強調した仮想ふっとび時間のことを指す。

混同を避けるために、以降このページでは時間の単位を
  • ゲーム内の時間:1フレーム、2フレーム
  • 仮想ふっとび時間:単位無し
と表記する。


加速演出の詳細

定性的な解説

ふっとび中は 早送り倍率 が計算され、ふっとびアニメーションがその倍率で早送りされる。
実質的には、ある1フレームにおいてはそのフレームにおける倍率の数値分だけふっとびアニメーションのコマが進むことになる。
早送り倍率は 1フレームごとに更新される。

早送り倍率の初期値は、ふっとび硬直値が30以上の時に1より大きい値を取り、硬直値に対して一次関数的に増加する。
各フレームの早送り倍率はふっとびの時間が経過するにつれて小さくなり、やがて1.0になる。
実際に加速演出が行われているのは(=早送り倍率が1.0超)、ふっとび硬直実時間のおよそ1/3の時間である。

↑ ふっとび軌道をふっとび加速演出の有無で比較。
計算条件は、KB=190, ふっとび角度=40°, 重力値=0.1, 落下速度=1.5。
水色が仮想ふっとび(forと同じ軌道)、ピンクが加速演出込みの軌道(SPの軌道)を示す。
マーカーは、ふっとび始めの座標を(0,0)とし、ファイターが存在する座標を1Fごとに打ったもの。

水色マーカーはおよそ等間隔に並んでいるのに対し、ピンクマーカーを見るとふっとびの序盤ほどアニメーションが高速でスキップされているのが分かる。


計算式

早送り倍率は以下の式で計算される。
初期早送り倍率 =  6 * (ふっとび硬直値 - 30) / (80 - 30)
早送り倍率 = 初期早送り倍率 * (現在硬直値 - ふっとび硬直値*0.3) / (ふっとび硬直値*0.7)
ただし、
1.0 ≦ 初期早送り倍率 ≦ 6.0
1.0 ≦ 早送り倍率 ≦ 初期早送り倍率

↑ 初期早送り倍率のグラフ。
横軸がふっとび硬直値、縦軸が倍率。

↑ 早送り倍率のグラフ。ふっ飛び硬直値60, 初期早送り倍率4.0の場合でプロット。
横軸が仮想ふっとび時間(=ふっとび硬直値-現在硬直値)、縦軸が倍率。

ゲーム中で早送り倍率に関係するのはふっとび硬直値だけ だが、解析値上はふっとび角度も計算に使う用意がある。
45°から90°の範囲で倍率が上がるような実装が考えられていたようだが、角度に関する最大倍率が1になってしまっているため、角度に関しては実質的に何も設定がないのと同じである。


ファイターの速度・座標

ページ: ふっとび速度 も参照。

加速演出中は仮想ふっとび時間が小数単位で推移するが、 ファイター速度・座標の計算は基本的に整数単位 で行われている。
仮想ふっとび時間の小数部分については、「小数第2位以下を切り上げた数値を、本来の整数単位の処理に乗ずる」という処理になる。

例として、X初速が5.0, ふっとび角度が0°のふっとびを考える。
この時のファイターのX座標の推移は下表のようになる。
仮想フレーム X速度 X座標
0 5.0 0.0
1 4.949 4.949
2 4.898 9.847
3 4.847 14.694
4 4.796 19.49

例1:仮想ふっとび時間3.0のとき:
仮想フレーム3における値がそのままファイターのX速度・X座標となる。

例2:仮想ふっとび時間3.22のとき
小数第二位を切り上げ、仮想フレーム3.3のX速度・X座標を計算する。
X速度は、3F目の速度から 0.051 * 0.3 だけ減衰した値となる。
X速度 = 4.847 - 0.051 * 0.3 = 4.8317
X座標は、3F目の座標に "4F目の速度 * 0.3" を加えたものとなる。
X座標 = 14.694 + 4.796 * 0.3 = 16.1328


注意:
この節での"ファイター速度"は、加速演出を無視した仮想的・内部的な速度である。
受け身可否判定などに使われるファイター速度に等しいが、実際に1Fにファイターが画面上を移動する距離とは異なることに注意。
また、ファイター速度・座標の細かい処理は、リザルト画面の最高ふっとび速度表示からの推測である。
ゲーム中とリザルト速度で処理方法が異なる可能性がある。



ソースコード的記述

ソースコードのような書式で1Fごとの加速演出処理を記述した(特定の言語を想定しないフォーマットで書いている)。
加速演出の計算はフレームごとの逐次処理であるため、全体像をとらえるにはソースコードの書式が適している。

###攻撃が当たったフレームにパラメータを初期化###
経過フレーム = 0
現在アニメーションフレーム = 0
ふっとび硬直値' = ふっとばし力 * 0.4
現在硬直値 = ふっとび硬直値
初期早送り倍率 = MAX[ 1 + 5 *(ふっとび硬直値'-30) /(80-30) , 6.0]

###ふっとび中の処理###
While (現在硬直値 > 0)

 経過フレーム = 経過フレーム + 1
 早送り倍率 = max(初期早送り倍率 * (現在硬直値 - ふっとび硬直値'*0.3) / (ふっとび硬直値'*0.7), 1.0)
 現在硬直値 = 現在硬直値 - 早送り倍率
 仮想ふっとび時間_01= ふっとび硬直値' - ROUNDDOWN(現在硬直値, 1) *2*3

 Display: 仮想ふっとび時間_01におけるファイターの状態(速度・座標など)

 if (このフレームに壁・床・天井に衝突) then
  現在硬直値 = 現在硬直値 * 0.8
 endif

end While



計算例

↓ 早送り倍率、仮想ふっとび時間などの推移。



コメント

名前:
コメント: