Seaside Laboratory

Articles

KFX におけるしゃがみ歩きの作り方

餓狼伝説には、屈んだ状態のままで歩く「しゃがみ歩き」または「しゃがみ移動」と呼ばれるシステムが存在する。KFX でしゃがみ歩き (以下屈み歩き) を作るには少々コツが必要なので、要点をまとめておく。

基本的なこと

キャラクターを移動させるときはニュートラル状態から前進や後退を行うが、これの屈み状態版が屈み歩きとなる。ニュートラルが屈み、前進が屈み前進になっただけで特に変わったことはない。

また、前進や後退の実装にキャンセル等のテクニックが必要ないのと同じように、屈み歩きも特別なテクニックは必要ない。command.lst と motion.lst に単純なリストを記述するだけで実装することができる。

タイトルに「KFX における」と書いてはあるが、KFX は基本移動コマンドがハードコーディングされている関係で屈み歩きを行うことができない。

Command

以下は RYOU の基本移動コマンドを抜粋したものだが、何か不足していることに気付くだろうか。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
     0        n   00000  000      0  -1  ;STA
     1        4   00000  000     10  -1  ;WAK-L
     2        6   00000  000     20  -1  ;WAK-R
     3        2   00000  000     30  -1  ;SIT
     6        8   00000  000     60  -1  ;JMP
     7        7   00000  000     70  -1  ;JMP-L
     8        9   00000  000     80  -1  ;JMP-R

このリストには Command が 1 (左下) と 3 (右下) の行が定義されていない。何故、このようなリストでも動作してしまうのかと言うと、KFX は屈み時に限り左右の入力を参照せず、左下や右下を入力しても全て下として扱われるためである。

拡張エンジンではコマンドの自由度を上げるため、command.lst に記述されたものはそのまま解釈されるようになっているが、本当にそのままだと左下や右下を入力したときに屈まなくなってしまうので、苦肉の策として Command の 2 を D 相当に変換し、拡張性と互換性を両立させている。

このような仕様になっているため、屈み歩き用コマンドの 1 と 3 は優先順位を高くしておく必要がある。例えば右下を入力した場合、3 だけでなく 2 (D) にも反応するので、3 の優先順位が低いと全く発動しなくなってしまう。

Std

立ちから屈みへ移行する際にアニメーション (以下屈みアニメーション) を行っている場合は Std の設定にも気を配る必要がある。以下は、屈み歩きで必要な動作を Command と Std の組み合わせで表したもの。

Command Std 動作
2 001 立ちから屈み
2 010 屈み歩きから屈み
3 001 立ちから屈み歩き
3 010 屈みから屈み歩き

通常時の屈みは「立ちから屈み」しかなかったが、新たに「屈み歩きから屈み」というルートが追加されている。既に屈んでいる状態で屈みアニメーションが行われないよう、屈み動作をアニメーションありの立ち状態版とアニメーション無しの屈み状態版に分ける必要がある。

屈み歩きも理論上は立ち状態と屈み状態が存在するが、屈みアニメーションをさせてもレスポンスが悪くなるだけなので、即座に屈み歩きを開始するモーションだけを用意し、Std を 011 にした行にまとめてしまうのがよい。

Ci

基本移動コマンドと motion.lst の Ci は密接に関係しているので、前進や後退と同じように屈み歩きにも適切な Ci を設定する必要がある。

具体的にどのような値を設定すればよいのかは KFA のマニュアルに書かれていないが、

状態番号部分これまで (ver1.4 以前) も、状態から想定される番号は KFX に存在していなくてもある程度までの処理に対応させていました (当然、正式サポートではないです) が、今回、それとは全く別にメイカーの便のために番号を追加してあります。

という記述から分かるように、暗黙の Ci が存在する。

Ci 意味
10 屈み
11 屈み後退
12 屈み前進

実装例

説明だけでは分かりづらい部分があると思うので、RYOU に屈み歩きを追加する例を書いておく。

command.lst

以下の行の変更と追加を行う。

CmdNum--Command--Cancel--Std-AmnNum--Vx--Comment
     3        2   00000  010     30  -1  ;SIT
     4        2   00000  001     40  -1  ;SIT-ANIM
     5        3   00000  000     50  -1  ;CRAWL

システムモーションからの戻りが 30 番になっている関係で、元からあった屈みコマンドは「屈みアニメーションなし」として使用、空き番号の 4 と 5 に「屈みアニメーション」と「屈み歩き」を追加している。

motion.lst

以下の行を追加する。

-Num---To-Sp-Pic-De-Ci-V---VxRx--VyRy-C-CL-G-Da--Hit-H-Flag-Def1---------Def2---------Att1---------COMMENT
  40   -1  2 241  0 10 9    0 1   0 0 9 -1 0  0    0 9 0001 11203F012000 000000000000 000000000000 ;SIT-ANIM
  41   30  1  38  0 10 9    0 1   0 0 9 -1 0  0    0 9 0001 11203F012000 000000000000 000000000000 ;

  50   -1  6  35  0 12 9   10 1   0 0 9 -1 0  0    0 9 0001 11203F012000 000000000000 000000000000 ;CRAWL
  51   50  6  10  0 12 9   10 1   0 0 9 -1 0  0    0 9 0001 11203F012000 000000000000 000000000000 ;

屈み歩きモーションの Ci には 12 (屈み前進) を設定している。最終行から先頭行へ飛ばしてループさせる点など、基本的には前進と同じような構造になる。