Seaside Laboratory

Post

KFX のヒットストップとコマンド入力

ヒットストップと密接に関係するコマンド入力についてまとめてみることにした。

詳細な仕様がわからなかった KFA については触れていない。

はじめに

説明の題材には KFX の標準キャラである RYOU を使用。

enemy.lst に書かれたコマンドが実際どのように実行されるかを見ることで、各エンジンのヒットストップとコマンド処理の挙動を調べていく。

実験するにあたり、

という条件を満たす必要があるため、「弱パンチ後にジャンプ」という行動をとらせることにした。

弱パンチが終わるのを待ってからジャンプさせる必要があるので、motion.lst の Sp から総フレーム数を算出する。 (当たり判定省略)

-Num---To-Sp-Pic-De-Ci-V---VxRx--VyRy-C-CL-G-Da--Hit-H-Flag-COMMENT
 250   -1  2  25  1 40 9    0 1   0 0 9 -1 0  0    0 0 0000 ;STA-S-P
 251   -1  2  26  1 40 9    0 1   0 0 2  0 U  4    0 1 0000 ;
 252   -1  2  26  1 40 9    0 1   0 0 9 -1 0  0    0 9 0000 ;
 253    0  1   1  1 40 9    0 1   0 0 9 -1 0  0    0 0 0001 ;

モーションのタイムチャートとコマンドを図式化すると、

このようになるので enemy.lst には、

Distance--100--Command--COMMENT
    320   100  p5555558 ;弱パンチ後にジャンプ

と記述すればいいことが分かる。

KFX

攻撃がヒットすると、そのフレームからヒットストップが始まり、KFX では 2 フレームの間、全キャラクターの動作が停止する。

タイムチャートの区切りが斜めになっているのは、実際のプログラムの動きを模したもので、ヒットストップはフレームの途中から始まり、フレームの途中で終了する。

最初に書いた enemy.lst はヒットストップが発生すると入力がズレてしまうので、正常に動作させるには延びたフレーム数の分だけニュートラルなどのコマンドを間に挟む必要がある。

XPlus

XPlus は標準のヒットストップが 4 フレーム に変更されている。

KFX とフレーム数が違うので、仮に enemy.lst からの入力を単純にコマンドバッファへ流した場合、正常に動作しなくなってしまう。そこで XPlus は KFX との差分である後半 2 フレーム (拡張ヒットストップ) の間に行われる、コマンド入力やコマンドバッファの更新といったコマンド全般の処理を停止させることで互換性を維持している。

ただ、この方式はコマンド処理が停止している間の入力を全て取りこぼしてしまうので、コマンド受付は相当悪い。

KFM 1.92

KFM はヒットストップが可変なので、XPlus と同じヒットストップが発生した時の説明をする。

XPlus と同様に KFX とヒットストップのフレーム数に差はあるが、KFM は拡張ヒットストップ中であっても入力を受け付けている。ヒットストップによる入力時間延長効果もあり、コマンド入力はかなりやり易い。

その代償として enemy.lst の互換性は低下している。

KFM 1.96

XPlus と KFM 1.92 のハイブリット仕様で、コンピューター (enemy.lst) からの入力は XPlus 方式、人間 (コントローラー) からの入力は KFM 1.92 方式で処理している。

コンピューターは言葉通り機械的に入力することができるので取りこぼしは発生せず、人間からの入力は互換性もくそもないのでコマンド処理を行っても問題がない。