こちらも参照
AI戦中に、歩き、ジャンプ、しゃがみ、ガードが意図しない時にやってしまっていることがないだろうか。
(かくゆう私も以前D氏北斗キャラを改変していた時に,ブースト中にキャラがブーストをやめてしまうという事態に遭い,頭を悩ませたことがある)
この現象は、mugenの仕様が原因である。
長くなるので、詳細及び防止方法は続きから
AI戦中に、歩き、ジャンプ、しゃがみ、ガードが意図しない時にやってしまっていることがないだろうか。
(かくゆう私も以前D氏北斗キャラを改変していた時に,ブースト中にキャラがブーストをやめてしまうという事態に遭い,頭を悩ませたことがある)
この現象は、mugenの仕様が原因である。
長くなるので、詳細及び防止方法は続きから
+ + + + + + + + + +
歩き、ジャンプ、しゃがみ、ガードをAI製作者が意図しない時にやってしまうという現象。
この原因は、mugenの内部のAIとコモンステートの仕様である。
・mugen内部のAIはコマンドからランダムに選んで実行しているという性質がある。
・歩き、ジャンプ、しゃがみ、ガードへの移行は、ステート内には書かれていない(mugenに内蔵されている)ため、通常追加するAIオフという条件を追加できない。
これらから、歩き、ジャンプ、しゃがみ、ガードが勝手に・・・ということが起こっている。
というわけで、以下ではこれらを制御する方法を書いていく。
さて,まずは該当アクションが起こらないようにする必要があるため,changestateにより制御する。
どこに入れるかだが,候補は2か所
1.常時ステート
2.しゃがみや歩きなど各ステート全部
どちらにするかはお好みでどうぞ
1.常時ステートに追加
[statedef -1] or [statedef -2] or [statedef -3] いずれかの直下に以下を追加
[State -1, 勝手に・・・防止]
type = ChangeState
triggerall = var(59) > 0 ; AIフラグの変数
trigger1 = state = [10,11] ;しゃがみ開始,しゃがみ
trigger2 = state = 20 ;歩き
trigger3 = state = 40 ;ジャンプ
value = 0
ctrl = 1
2.しゃがみや歩きなど各ステート全部に追加する
[Statedef 11];しゃがみ
[Statedef 20];歩き
[Statedef 40];ジャンプ
など,AIに行わせたくないステートの初めに以下を追加する
※キャラによっては複数のファイルに記述されている場合があるが,
st0>・・・>st9>stcommonという優先順位になっているので注意
また,同ファイル内に複数あった場合は,"上の方が優先される"ので注意
※[statedef -1] と異なり,パラメータが記述されているため,その下に追加する
[State -1, 勝手に・・・防止]
type = ChangeState
trigger1 = var(59) > 0 ; AIフラグの変数
value = 0
ctrl = 1
以上である。
このChangeStateは,該当ステートに飛んだ際に,立ちステートへ戻すというものである。
※statetypeやpos yやctrlに関係なくctrl = 1の立ち状態にするため,適宜修正してください
したがって,この場合はしゃがみや歩き等が出来なくなるため,AIに該当アクションをさせたい場合 新たに記述する必要がある。
(単純に,コピペしてstatedefの数字を変えて,AIでそのステートに飛ぶようにするだけなので割愛)
これで完了である。
・・・さて,ここまでやって解決しねえ?!
という人はいないだろうか。
そんな人はこんなことになっているのではないだろうか。
「ブーストして画面端まで行こうとしてたのに,急に何故か立ち状態になって止まってしまった」
(※私の例改変)
(こんなんじゃねえ,と言う人はごめんなさい)
さて,ではこの問題を解決していこう。
まず,mugenの内部処理での歩き、ジャンプ、しゃがみ、ガードの移行条件は(おそらく)以下の通りである。
・command = "up" or "down" or "fwd" or "down" が真(1)になる(該当の方向キーが押されると同様・それぞれジャンプ,しゃがみ,歩きorガードの方向に相当)
・ctrl = 1である
・statetype = S || statetype = C
・ガードの場合,InGuardDist=1である
この内,commandの方は,mugenのAI仕様から諦めるとして,
ctrl = 1の方に注目してもらいたい。
そう,ctrl = 1である。
該当ステートがこうなっていないか確認する必要がある。
確認は簡単である。
[statedef 1000]
~
ctrl = 1 ←これ
この解決法であるが,以下の通りである。
1.該当ステートをコピペし,statedefの数字を変え,
ctrl = 0にする+AI時はそのステートに飛ぶようにする
2.ctrlの部分を以下の通りにする
ctrl=ifelse(var(59)>0,0,1) ;IF文でAION時には0,OFF時には1になるようにする
※ついでに,下の方にスクロールしてステートの残りの部分も見ておこう
commandがトリガーになっているものがたまにあるのでAIフラグを入れておこう
以上の作業が終わったら,確認して,解決したら終了である。
PR
この記事にコメントする