わどるDAILY

つれづれと

ヘルパーの上泳ぎ理論値

結論から言うと、
ヘルパーの上泳ぎは↓キー入力を織り交ぜた方が総合的に速くなります。
これだけじゃ漠然としてるので細かい内容を下に記します。

上泳ぎの仕様

※この記事ではY速度を下向きを正として扱います。
SDXの上泳ぎは左右や下への泳ぎと色々仕様が異なります。
まず、Y速度が0以上の時(下に向かって泳いでる時)にBか↑を押します。
決められた初速で水中を上昇します。
上昇後は重力に従うか、下泳ぎによる加速によって上昇速度が減ってゆきます。
そして、Y速度が0以上になった時にBか↑が押されていると再び決められた初速で上昇します。

上泳ぎ初速・重力(水中)・下泳ぎ加速はヘルパーによって異なります。
(全てのヘルパーにおいて重力<下泳ぎ加速)
また、上記の仕様はカービィにも当てはまりますが、カービィのみ上昇12F後に↑かBを再入力すれば初速で上昇します。無論最速なのでここでは取り扱いません。

計算してみる

(長い上に意味のない部分なので次項まで飛ばして良いです)

とりあえず初速度をv、重力加速度をg、下泳ぎ加速度をa、初速に戻るまでの時間(周期)をtとします。
まず、↓キーを入力しない重力だけを考慮して、時間tまでの移動距離を求めてみます。

移動距離 = v*t/2

で、この移動を繰り返して行うため上泳ぎ速度の平均を出します

平均移動速度 = v*t/(2*t)
 = v/2

恐らく高校物理などやってたら等加速度直線運動や鉛直運動でお馴染みだと思います。
gも全く使わずに計算できます、なので下泳ぎのみの場合でも同じ結果です。

次は途中まで重力による減速、時間t0で下泳ぎに切り替えます。

移動距離 = v+(v-g*t0)*t0/2 + (v-g*t0)*(t-t0)/2

既に見る気すら無くなります。
下泳ぎからは速度0までの計算なので、t-t0を(v-g*t0)/aで代入できます。

移動距離 = v+(v-g*t0)*t0/2 + (v-g*t0)*(v-g*t0)/a*2
 = (v + t0*(v-g*t0) + (v-g*t0)^2/a)/2

平均移動速度 = ((v + t0*(v-g*t0) + (v-g*t0)^2/a)/2) / (v-g*t0)+t0

理論値を求めるための変数はt0のみなので、二次関数と分数関数を合わせたものになります。
が、この式で正確に求められるのかというとそうでもなく、
1秒を60分割したゲームでは連続的な数字を扱うこの式の意味があまりありません。
例えば、上の式では速度が0になった時に初速度vに戻ってますが、
ゲーム内ではF毎の減速によって速度が16とか40とかになってから初速度に戻るのでまず正確な値が出ません。
というわけで方法を変えてみます。

表計算ソフトでの算出

とてもベンリです。それらしい計算式を入れたら必要な数字を入力するだけで
一覧で結果が見られます。
excelなんて知らない


これをこうして


こうじゃ


グラフも見られる!

速度が0を超えた分も考慮してるので正確な値が出せます。
これを全ヘルパーで導出してみます。

ヘルパーごとの最速上泳ぎ理論値

ヘルパー 上泳ぎ初速 重力 下泳ぎ加速 切り替えF 切り替え時速度 平均値
ロッキー 600 40 64 7 320 335
カプセルJ 446 18 64 7 320 290.08
タック 392 8 64 17 256 286.67
プラズマウィスプ 405 11 64 8 317 282.54
ポピーブロスJr. 405 11 64 8 317 282.54
バーニンレオ 405 11 64 8 317 282.54
シミラ 405 11 64 8 317 282.54
ナックルジョー 405 11 64 8 317 282.54
バードン 377 7 64 18 251 279.27
バグジー 403 13 64 12 247 273.5
ブレードナイト 389 11 64 13 246 270.56
サーキブル 389 11 64 13 246 270.56
チリー 384 16 64 8 256 256
ギム 384 16 64 8 256 256
ボンカース 368 10 64 11 248 254.2
バイオスパーク 328 8 64 9 256 241.54
ウィリー 282 8 64 15 192 213.5
ワドルドゥ 312 8 16 17 176 182.71
パラソルワドルディ 312 8 16 17 176 182.71

切り替えFは上昇する直前を0Fとして重力落下から下泳ぎに切り替えるタイミングを示してます。
切り替え時速度も載せているのでメモリ見ながらだとやりやすいと思います。

基本的に初速が速いヘルパーほど平均値が高いです。
あとは重力と下泳ぎ加速の差でも結構変わります。

最初にも書いた通り最速で上に泳ぐには下入力の併用が必要です。
TASにおいて使う機会は少ないですが・・・
どうでもいいですがSFCF-ZEROのTASでも同じことをやってます。
S-JET中にブレーキしたりガードレール擦ってるアレです。
もしかしたら他のゲームでも同じような挙動が見かけられるかもしれませんね。(適当な締め)