AIの常時起動方法

「AIの常時起動方法」の編集履歴(バックアップ)一覧に戻る

AIの常時起動方法 - (2022/07/28 (木) 17:18:19) のソース

----
#contents
----

*AIスイッチの仕様
後述する新MUGEN1.0&1.1では問題ないが、旧来版(DOS版&WIN版)MUGENにはプレイヤー操作とCPUを区別するトリガーが存在しない。
ここでは旧来版(DOS版&WIN版)に関しての項目として、コマンド入力を監視し、その結果からキャラ独自のAIを起動するといった手法がAIスイッチの主流となっているが、
コマンド入力を監視する関係上、AIが起動するまでに避けることが出来ないタイムラグが発生する。

よって、トナメ動画用に対戦を撮影する際などに、AIが起動していない状態が長いとキャラの良さを発揮出来なかったり、
特にチーム戦では先に勝ち残りAIが起動しているキャラが、後続のAIが入ってない相手を無双してしまう場合がある。
このような事態を避けたい場合は常時AIONにしてから撮影すると良いだろう。

&bold(){なお、プレイヤー操作とCPUを区別するトリガーを無視するので、当然プレイヤー操作が行えなくなるため注意すること}

*常時AION化
**オプションを弄る
常時AION化をオプションとして設定しているキャラもいる。このようなキャラは指示に従えば、AIを常時起動させることができる。

例えばCMDファイルにtriggerにAIコマンドの書かれている欄の最後の部分に
 trigger○○ = 1
という風に追加すればOK

**トリガーを弄る(通常AIスイッチ)
&bold(){注意:[StateDef -3]、[StateDef -2]、[StateDef -1]にkeyctrl=1が指定されたType=Helperのステコンがあるキャラは}
&bold(){ヘルパー式AIスイッチを併用している場合があります。下記のヘルパー式AIの項目も読んで下さい。}

&bold(){1.} 常時AION化したいキャラのcmdファイルを開く

&bold(){2.} "AI**"や"CPU**"といった名前のコマンドが羅列されているので
 そのコマンド名でCNSファイル内の[StateDef -1]、[StateDef -2]、[StateDef -3]を検索する。
("AI**"や"CPU**"といったコマンド名が無い場合は下記の トリガーを弄る(ヘルパー式AIスイッチ) へ)

&bold(){3.} トリガーにcommand="AI**"が指定されているType=VarSetのステコンがあるので
 最も大きいtrigger(n)に+1した
  trigger(n+1)=1
 または
  trigger(n+1)=roundstate=2
  trigger(n+1)=ctrl
 を作成する
基本的には前者でいいが、分身が発生する場合は後者を試してみよう。
また後者の方法でも分身が発生するようなら、
  triggerall = !ishelper
を加えることで解決することもある。

>例:
>[STATE AIスイッチ]
>type=VarSet
>trigger1=command="AI1"||command="AI2"||command="AI3"||command="AI4"||command="AI5"
>trigger2=command="AI6"||command="AI7"||command="AI8"||command="AI9"||command="AI10"
>trigger3=command="AI11"||command="AI12"||command="AI13"||command="AI14"||command="AI15"
>&color(red){trigger4=1}
>var(59)=1;←var(XX)はどれでも構いませんが(var(1)とかvar(35)とかでもOK)、殆どの場合『&bold(){var(59)}』(整数varでは末端)が非常に多く使われているので本項目もそれに準拠し、var(59)をAIスイッチとして扱うものとします。0もしくは1の2進法の場合は単にON/OFFの2択になりますが、0のみOFFでそれ以外はONとなる場合はレベル設定を兼用している場合があります。つまり1以上であればONであるが、上限値は製作者で異なり、数値が上であればあるほどより精密な超反応動作をしてくるAIとなります。

**トリガーを弄る(ヘルパー式AIスイッチ)

"AI**"や"CPU**"のコマンドが存在しないキャラのAIスイッチは、ヘルパー式のAIスイッチを利用しています。
//ヘルパー式AIスイッチは非常に起動が早いため、&bold(){AI起動のタイムラグを避けるために常時AION化を行う必要性は殆どありません。}
//運が悪いとイントロ中に起動しないこともあるのでコメントアウト

&bold(){1.} 常時AION化したいキャラのcmd、またはcnsファイルのAI記述を開く。
 (たいていの場合は[StateDef -1]または[StateDef -3]に記述されている)

&bold(){2.} 全てのAI記述に共通したvar(**)を探す。
>例:
>[STATE AI]
>type=ChangeState
>value=200
>triggerall=&color(red){var(59)}
>trigger1=random<100
>trigger1=ctrl&&StateType=S
>trigger1=p2bodydist x<90

&bold(){3.} 「var(**)」か、「v = **」でCNSファイルを検索すると、トリガーに
   command="a"!=root,command="a"
  のように、基本的なコマンドを比較しているType=VarSetか、Type=ParentVarSetのステコンがあるので
  最も大きいtrigger(n)に+1した
   trigger(n+1)=1
  を作成する
例:
>[STATE AI]
>type=ParentVarSet
>trigger1=parent,command="a"!=command="a"
>trigger2=parent,command="b"!=command="b"
>trigger3=parent,command="c"!=command="c"
>trigger4=parent,command="x"!=command="x"
>trigger5=parent,command="y"!=command="y"
>trigger6=parent,command="z"!=command="z"
>trigger7=parent,command="start"!=command="start"
>&color(red){trigger8=1}
>var(59)=1

*新MUGEN1.0&1.1での"AILevel"を用いた起動方法

なお新MUGEN1.0以降では新ステコン"AILevel"が追加されており、本来はMUGEN本体オプションでのレベル設定を1~8までの段階で参照するためのものである。
なおWinMUGENの本体オプションにもAIレベルを設定できる項目が既に存在していたが、
残念ながらそれを試合中にキャラ側で参照する為のトリガー"AILevel"が無かったために&bold(){事実上全く意味の成さない}『&bold(){飾り}』でしか過ぎず、
その為本項目の上記の記述方法が必要であった。またWinMUGENトレーニングモードのAI設定を弄ると、キャラ側でAI設定しているキャラはその内AIが起動しプレイヤーへ攻撃動作を行うが、その後にAIをOFFにしても、キャラ側のAIはそれを完全無視して襲い掛かってくる。

なお1人プレイ等で片方をプレイヤー操作、もう片方をAI操作で対戦する場合においては何ら問題はないのだが、
しかしAI同士の対戦においては不便なことに片方を高く、もう片方を低くする、或いはお互いタッグ戦で1Pを高く、1Pパートナー(3P)を低く、2Pを低く、2Pパートナー(4P)を高くするといった、
所謂「''『個別』設定ができない''」という''致命的な欠点''がある。

むしろこのトリガーの『真価』は&bold(){AI起動・停止スイッチに用いる}ことにあり、本項目冒頭の「&bold(){プレイヤー操作とCPUを区別する}」という使い方が可能でそれにより即座にON/OFFとなるのでタイムラグは全く発生しなくなる上、従来の記述が大幅に省けるといった大変便利なコントローラーである。よって新MUGEN専用キャラとして作成する場合、上記の様な記述は一切不要となる。下記にその例を記述。

>;新MUGEN専用AI ON/OFF スイッチ記述例(-2ステート等に記述)
>[State AI起動(ON)スイッチ]
>type=VarSet
>&color(red){triggerAll=!var(59)};AI停止中の状態
>&color(red){trigger1=AILevel};AI操作フラグ
>&color(red){trigger1=RoundState=2};試合中
>&color(red){trigger1=Alive};生存中
>&color(red){trigger1=Ctrl};行動可能状態
>var(59)=1;AI起動開始
>上記の4つの条件が全て満たされればAIが起動する。
>trigger1=Ctrlは記述しなくても特に問題は無いが、入れておけば万が一の[[フライング]]防止に役立つ。
>
>[State AI停止(OFF)スイッチ]
>type=VarSet
>&color(red){triggerAll=var(59)};AI起動中の状態
>&color(red){trigger1=!AILevel};プレイヤー操作フラグ
>&color(red){trigger2=RoundState!=2};試合中以外(開始前・終了以降)の状態
>&color(red){trigger3=!Alive};死亡
>var(59)=0;AI停止
>上記の3つの内どれか1つでも条件が満たされればAIが停止する。[[ゾンビ]]化バグもこれで防げる。

たったこれだけの記述で準備完了。新MUGEN専用キャラの特権。

&color(#0000ff){&italic(){&bold(){「[[俺はスロースター>エディ]][[ターなんだよ!>エルクゥ]]」}}}