Seaside Laboratory

Posts

KFA の任意コマンドは入力を消費する

KFA で追加された "?" コマンド (以下任意コマンド) は、何にでもマッチする特殊なコマンドとなっている。

「?」は 1 フレームという意味でどんな入力でも構いません (N でもよい)

通常のコマンド定義に任意コマンドを散りばめることで入力猶予を延長させるテクニックが存在するが、このテクニック、実は大きな副作用がある。

入力の消費による弊害

長々と説明するより結果を見せた方が早いので RYOU を使った実験を行う。

まずは command.lst の必殺技コマンド行を全て削除し、以下の行を追加する。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
   101    623?P   00111  011   1010  -1  ;SYO-B-P

次に enemy.lst の全ての行を削除し、以下の行を追加する。

Distance--100--Command------COMMENT
    320   100  NNNNNNNN623P ;

一定間隔で青龍拳が出るように見えるが、結果はどうなるのだろうか。

答えは「アッパーが出る」だった。

何故こんな結果になってしまったのか。コマンドのマッチング過程は以下のようになっている。

処理順 コマンド定義 コマンドバッファ 処理結果
1 623?P 623P マッチしたので次へ
2 623?P 623P マッチしたので次へ
3 623?P 623P マッチしなかったので終了

任意コマンドは何にでもマッチするので一見無害なように見えるが、実際はマッチする度に入力が「消費」されている。人による入力は揺らぎがあるので問題は表面化しづらいが、enemy.lst は揺らぎなしのビタ入力なので、1F でも齟齬が生じればコマンドは出なくなってしまう。

他の弊害

KFA ではコマンドの構成を元にコマンドの最適化が行われる。例えばマニュアルにある、

同じ方向キーを連続で書くと間に 1 フレームでも違う方向キーが入れば入力失敗とみなされるようになっています。

という説明は、タメコマンドを想定した仕組みである。

このような仕組みがあるので、任意コマンドが何にでもマッチするからといって LLL を L?L に書き換えていいわけではない。コマンドの中に任意コマンドという異物が混入すると、KFA はどのようなコマンドなのか判別ができなくなり、結果として最適化が行われなくなってしまう。

これはタメコマンドに限ったものではないので、任意コマンドをいたずらに使用するのは控えた方がよい。