Seaside Laboratory

Posts

殺意 RYOU とキャンセルバグ

殺意 RYOU は通常の RYOU に豪鬼風の技を追加した CARROT 公式の改造キャラで、斬空波動拳を模した空中白虎掌、竜巻斬空脚から豪昇龍拳へのコンボを再現するために強化された玄武脚が備わっている。

白虎掌だけでなく玄武脚も空中で出すことができる。

ただ、追加された技全てが「キャンセルバグ」の影響を受けるため、技をキャンセルして出すと挙動がおかしくなる問題を抱えている。

キャンセルバグ

KFX にはキャンセルしたときだけ Std が無視されるというバグ (仕様?) が存在する。

コマンド処理は「非キャンセルコマンド」と「キャンセルコマンド」の二つから構成され、どちらも似たような処理を行っているが、プログラムはそれぞれ別のものが使われているため、処理内容の一部に違いが生じてしまっている。

種別 処理内容の違い
非キャンセルコマンド Cancel を参照しない
キャンセルコマンド Std を参照しない

「非キャンセルコマンド」は Cancel を使わないので参照する必要はないが、「キャンセルコマンド」は発動条件から Std が抜け落ちてしまっているので、同じコマンドが割り当てられている必殺技 (豪波動拳と斬空波動拳など) をキャンセルして出すとキャラの状態が無視され、優先順位が高い方のコマンドが一方的に出てしまう。

白虎掌バグ

白虎掌をキャンセルで出すと空中版の方が出てしまうバグがある。これはキャンセルバグで解説したものと同じで、Std が無視された結果、優先順位の高い空中版が出てしまっている。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
   107     236p   00111  011   1070   1  ;HAD-S
   108     236P   00111  011   1080   1  ;HAD-B
   109     236p   00111  100   1120   1  ;HAD-S
   110     236P   00111  100   1130   1  ;HAD-B

空中基本技のキャンセルが無いことを利用し、白虎掌の地上版と空中版の優先順位を入れ替えてやれば command.lst の修正だけで問題を解消することは可能。

KFM はキャンセル時でも Std のチェックを行うので修正せずとも正常に動作する。

玄武脚バグ

玄武脚の最終ヒットには必殺技キャンセルが設定されているので、そこで青龍拳コマンドを入力すれば浮いた相手を追撃することができる。ただ、青龍拳だけでなく白虎掌や玄武脚を出すことも可能なので、そこで白虎掌コマンドを入力すると空中白虎掌が出てしまう。

-Num---To-Sp-Pic-De-Ci-V---VxRx--VyRy-C-CL-G-Da--Hit-H-Flag-COMMENT
1020   -1  5  70  2 43 2    0 1   0 0 9 -1 0  0    0 0 0000 ;TAM-S-K
1021   -1  1  70  2 43 9    0 1   0 0 9  0 U  3    0 1 0000 ;
1022   -1  3  71  2 43 9   40 1   0 0 9  1 U  7    0 1 0000 ;
1023   -1  1  72  2 43 9   40 1   0 0 9 -1 U  0    0 9 0000 ;
1024   -1  1  73  2 43 9   40 1   0 0 9  1 0  7    0 1 0000 ;
1025   -1  1  74  2 43 9   40 1   0 0 9 -1 U  0    0 9 0000 ;
1026   -1  3  71  2 43 9   40 1   0 0 2  8 U  7    0 1 0000 ;
1027   -1  1  72  2 43 9   40 1   0 0 9 -1 0  0    0 9 0000 ;
1028   -1  1  73  2 43 9   40 1   0 0 2  8 U  7    0 1 0000 ;
1029   -1  1  74  2 43 9   40 1   0 0 9 -1 0  0    0 9 0000 ;
1030  111  8  70  2 43 9    0 1   0 0 9  0 0  0    0 0 0000 ;

このバグは KFM でも発生していたが、KFM 2.12 で Std のチェックが厳密化されたことにより正常に動作するようになった。

KFA とキャンセルバグ

KFA では「Std に 000 を設定する」と「キャンセル時に Std が無視される」を組み合わせることで、連続入力を KFX とは違うやり方で実装することができる。Std に 000 を指定したときの挙動は以下の通り。

KFX では状態 (std) が 000 だとキャンセルに関係なく技が無効となっていましたが
キャンセルが設定されていればαでは無効となりません。
000 に設定しているとキャンセルでしか出ない技ということになります。
(KFX と同じでキャンセルにおいて状態は無関係)

KFX 方式

まずは基本となる KFX での連続入力について簡単に説明。題材はフェイロンの烈火拳で、一段目のモーションにリバーサルキャンセルが設定されているという前提。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
   100     236P   00001  011   1010  -1  ;烈火拳(二段目)
   101     236P   00100  011   1000  -1  ;烈火拳(一段目)

烈火拳コマンドを入力すると優先順位の高い一段目が発動し、追加コマンドを入力すると烈火拳モーションを唯一キャンセル可能な二段目が発動する。ポイントは最初に二段目が出ないよう一段目の優先順位を高くしていること。

KFA 方式

次は KFA から使うことができるようになった連続入力。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
   100     236P   00100  011   1000  -1  ;烈火拳(一段目)
   101     236P   00001  000   1010  -1  ;烈火拳(二段目)

一見、最初に優先順位の高い二段目が発動してしまいそうだが、Std が一致しないため一段目が発動する。追加コマンドを入力するとキャンセルになり Std が無視され、二段目が発動する。

この方式のメリットは追加入力がキャンセルでしか発動しないので、コマンドの優先順位について気を回す必要がなくなることだが、KFA は KFX の互換エンジンなので当然 KFX 方式でも動作する。特に理由がなければ KFX 方式にしておいた方が互換性は高く、記述方法が混在するとややこしくなるのでオススメはしない。