Posts
KFM 2.16 リリース
主な変更点は以下の通り。
飛び道具種別を追加
打撃可能な飛び道具を KFX の仕様に乗せることができるのか検証するため、プレイヤーと飛び道具で挙動が異なっている箇所をピックアップしたところ、既に KFA に実装されている「ヒットストップ時にモーションを停止する」という基本的な機能が抜けていることが分かったので、まずはこの機能を追加することにした。
KFA では G パラメーターを使ってモーションの進行制御を行っているが、KFM では生成する飛び道具の種別を変えることで制御を行う。キャラクター (飛び道具) 番号の 3 ~ 5 に「非同期飛び道具」、6 ~ 8 に「同期飛び道具」が割り当てられている。
非同期飛び道具
基本的に飛び道具はヒットストップの影響を受けることなくモーションの進行が行われるが、KFM ではヒットストップを延長した関係で強制的に停止される時間が存在する。この停止時間については「KFM 2.15 リリース」を参照。
フラッシュや点滅といった停止すべきでないエフェクトは、この非同期飛び道具で発射すると強制停止の対象から外れ、綺麗に表示されるようになる。もちろん、一般的な飛び道具 (モーションが進行しても攻撃判定や攻撃力が変化しない) にも有用。
このような対応が必要になったのは KFX の飛び道具機能が、エフェクト、お供キャラやスタンド、そして飛び道具とは全く関係のない状態判別用フラグなど、あらゆる用途に使われてしまったためで、作り手からヒント (キャラクター番号) を貰わないと適切な処理を行うことができない。ちなみに MUGEN では Projectile (飛び道具)、Explode (エフェクト)、Helper (分身) の 3 種が用意されている。
キャラクター番号の消費を抑えるため、既存の 3 ~ 5 番を上書きする形で拡張したが、基本的に KFX との互換性が必要なのは 1 番だけであるのと、挙動が通常の飛び道具とほぼ変わらないため、既存キャラへの影響は小さいと考えている。
同期飛び道具
KFA でヒットストップ中に停止するエフェクトを作る場合、G パラメーターにひたすら N2 を設定することになるが、同期飛び道具は何も指定せずともヒットストップでモーションが停止する。「何も指定せず」とは書いたが、エフェクトであれば干渉を抑制するための N といった最低限の指定はすることになる。
KFM で N2 を使った場合、2 の部分は非対応パラメーターとして無視されるので、同期飛び道具のモーションに N2 を指定しておけば全エンジンで動作させることができる。XPlus は N2 以外に対応していないようなので他の値を使うときは注意が必要かもしれない。
相殺改善
相殺分岐が設定されている飛び道具の挙動が KFA と異なっていたので修正した。KFA がどのような処理になっているのかは以下の実験結果を見た方が早い。
同じことを旧 KFM や XPlus で行うと 2 つの飛び道具が同時に消えてしまう。
内部で何が起きているのかというと、相殺分岐が設定されている飛び道具は相殺しても消えないため、別の飛び道具とも相殺を起こし、一度に複数の飛び道具が消えてしまっている。ヒットが同一フレーム内で一度しか行われないのと同じように、相殺も一度しか行わないようにした。
着地改善
キャラ落下時に地面に触れることなく地面と同じ位置でピッタリ停止 (寸止め着地) したときの挙動を改善した。
KFM 2.12 で着地のタイミングを「地面にめり込んだ瞬間」に変更したが、これにより落下中は地面と同じ座標にいても空中と判定されるようになり、寸止め着地が行われるとキャラの状態と位置に齟齬が生じていた。
寸止め着地は、着地しているような見た目であっても着地は行われていないため、砂煙エフェクトの有無で判別することができる。KFA だと砂煙エフェクトが設定されていないスキンもあるので、試す場合は事前確認を忘れずに…。
複合入力改善
方向ボタンと攻撃ボタンを同時に押してコマンドを発動、具体的にはサマソの最後を 8K ではなく 8+K と入力したときに、キャンセルが抑制されてしまうケースがあったので修正した。
8+K という入力はジャンプとサマソの複合入力になるので、基本的なコマンドアルゴリズムに従えば優先順位の高いサマソだけ発動し、ジャンプは無効化されてしまう。ただ、KFX は操作性を高めるため、同一フレーム内で方向コマンドと通常コマンドの両方を処理するので、実際はジャンプした直後にサマソが発動する。
サマソを出すにはジャンプの出際をキャンセル可能にする必要があるが、キャンセルを設定すると希少なキャンセルフラグを消費してしまうので、手練れのナックラーはジャンプ開始行の Ci を 0 にすることで対処する。これは厳密にはキャンセルではなく、歩いている最中であっても攻撃ボタンを押せば基本技が出るのと同じ仕組みを利用している。
今回問題となったのは明示的にキャンセルを設定したケースで、キャンセルが設定されているとコマンドの処理タイミングが変わり、コマンドの暴発を防止する仕組みに引っかかっていた。この暴発防止というのは波動拳と昇龍拳を複合入力 (6236P) したときに昇龍拳だけが出て、その後に波動拳が出ないようにするためのもの。
コマンド処理は KFX と拡張エンジンで大きく異なる部分で、どのように処理するのが正解なのか不明確な部分が多く、結果として挙動に差異が出てしまったが、KFA と同じ処理方法にすることで複合入力が行われても技が出るようにした。