AI作成の準備&解説

Last-modified: 2015-07-13 (月) 10:34:49

「トリガーを使ったAI起動方法」と「varを利用したAIレベルの設定方法」の解説のため
リアス式海岸氏製の『新・擬人化アマテラス』を使用して、簡易なAIを作っていこうと思います

 

キャラ選は筆者の趣味と言いますか、MUGENキャラのAI作成という趣味自体を
このキャラのために始めたようなものですので、一番馴染み深かったりするのが理由です


 

編集の必要なファイルを集める

『新・擬人化アマテラス』には、空中ダッシュやパワー溜めやストライカーなど、搭載予定の技が多くあるため
現時点では編集する必要の無いファイルも混じっているので、まずはama.cmdを開いて「使われている技」を確認
そして指定されているステートナンバーから、「使われているファイル」を判別する作業が必要になる

 

ama2.def」「ama.cmd」は当然として、「ama.cns」「ama-newskill.cns」に記述された技が使用されており
コモンステートファイルはMUGEN本体の「common1.cns」を使用しているので、コピペして持ってこよう
そして重要なのが、[statedef -3]のある「-3.cns」をAIを記述する場所として使用すること
理由は後述するが、トリガーでAIを起動させる形をとる場合は[statedef -3]に記述するのが良いとされている

 

なお[statedef -3]の場所はキャラ毎に違う(和訳KFMだとkfm.cne内にある)ので注意

 

ファイル構成は和訳KFMと同様で、あとはselect.defへの登録に「ama2/ama2-ai.def」と指定すれば良い

配布フォルダReadme.txt
ama2ama2-ai.def
simple-aiama.cmd
ama.cns
-3.cns
ama-newskill.cns
common1.cns
 

[statedef -3]について

このwikiで解説している和訳カンフーマンの簡易AIのように、command部分を直接編集する形なら問題ないが
トリガーでAIを起動させる形の場合は、AI記述は[statedef -3]にするのが良い、とされている理由だが

 

それはMUGENにおける記述の読み込み順が、下記のように
[statedef -3] → [statedef -2] → [statedef -1] → その他のstatedef
という形になっており、コマンド入力の行われる[statedef -1]より先に読み込まれるため
AIが起動したなら(コマンドの操作を受け付けること無く)確実にAIに行動させることが出来るからである
またコマンドより先に読み込まれるということは、AIが暴発していないかどうかの確認も容易となる

 

何よりわざわざトリガーでAIを起動させるということは、プレイヤー操作に使えるようキャラ本来の記述
(コマンド入力)を残しておくのが目的なので、その本来の技の記述を崩してしまう可能性のある
同じ場所(.cmdファイルの[statedef -1])に記述を行うのは、あまりよろしくないといえる
なので[statedef -3]という別の場所にAI記述を行い、本来の記述に触らないようにするのが良いのだ

 

トリガーによるAI起動と、AIレベルの設定

トリガーによるAI起動の方法は、基本的に名の無限 一からのAI作成講座を参考に記述するので
そちらを見てもらえれば理解できると思うが、より詳しい説明が必要なら、直接ama.cmdを読んで欲しい

 

AIレベルの設定の方はvarを3つ使い、「行動の確率」「ガードレベル」「特殊行動の確率
で調整する。「行動の確率」による調整は、和訳カンフーマンの記述を例に上げると

 

;距離は53まで届くローキック、残念ながら立ち下段ではない
[State -1, 立ち弱キック]
type = ChangeState
value = 230
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
triggerall = p2statetype != L
triggerall = p2bodydist X = [-10,50]
trigger1 = statetype != A
trigger1 = ctrl
trigger1 = p2statetype != A
trigger1 = p2movetype != A
trigger1 = random <= 200
trigger2 = (stateno = 200) && time > 7
trigger2 = movecontact
trigger2 = random <= 500
trigger3 = (stateno = 230) && time > 9
trigger3 = movecontact
trigger3 = random <= 500

 

この記述を(確率で使用させる)全ての行動に追加することで、AIレベル=var(59)を上下させれば
攻撃を振る確率やコンボの精度が変わるため、大雑把な強さの調整に使えるという単純な手段
確率は下がっても、その行動(例えば超反応カウンターとか)をしなくなるわけではないので
本当に大雑把な調整なのだが、それだけに設定するのも楽なので、とりあえず入れておくと良い感じ

 

ガードレベル」はガードする確率というわけではなく(元々ガードは下段ガードしないザルなので)
超反応カウンターなどを、どこまで使用するかを各技ごとに設定する、という形で使用する

 

;非ロック式の高火力乱舞技、初段にのみ無敵あり、全段当てるなら距離100以内
[State -1, 三烈カンフー突き手];ゲージレベル1
type = ChangeState
value = 3000
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = power >= 1000
triggerall = roundstate = 2
triggerall = p2statetype != L
triggerall = statetype != A
triggerall = p2bodydist X = [-10,100]
trigger1 = var(58) >= 3
trigger1 = ctrl
trigger1 = p2statetype != A
trigger1 = p2movetype = A
trigger1 = p2bodydist X <= 80
trigger1 = random <= 200
trigger2 = hitdefattr = SC, NA, SA, HA
trigger2 = stateno != [3000,3050)
trigger2 = movehit
trigger2 = stateno = 1010
trigger2 = random <= 700
;trigger3 = (StateNo = 1300) && (Time = [12,38])

 

このように設定しておくことで、ガードレベル=var(58)が3以上でないと、三烈カンフー突き手の
超反応カウンターを行わなくなるため、そのぶん切り返しが弱くなり守りが弱くなる、といった感じで使う

 

特殊行動の確率」は、「行動の確率」と同じく確率を設定するだけだが
各キャラクターに一つはあるであろう『特筆して強い行動』に対して追加しておく

 

;敵の攻撃を完全に防御、連続で使えないし、投げも防げないので過信は禁物
[State -1, シールド];ちょっとこ丸が追加した技
type = ChangeState
value = 701
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = var(58) >= 5
triggerall = var(57) >= 1
triggerall = random <= (var(57) * 100)
triggerall = roundstate = 2
triggerall = ctrl
triggerall = stateno != [701,702]
triggerall = EnemyNear,Facing != Facing
trigger1 = random <= 30 || enemynear,HitDefAttr = SCA, NA,SA,HA
trigger1 = p2movetype = A || InGuardDist
trigger2 = InGuardDist || enemynear,NumProj > 0
trigger2 = p2bodydist X >= 90 || statetype = A
trigger2 = random <= 50

 

和訳カンフーマンの『特筆して強い行動』というと、やはり敵の攻撃を受け止める『シールド』だろう
こうしておくことで、他の技の確率はそのままに『シールド』の確率だけ上下させることが出来る

 

これらのAIレベル設定はごく単純なもので、例えば対人AIにおいて『反応を遅らせる』などといった
上等なものでは全くないのだが、多少なりともキャラクターの強さの調整には使えるだろうと思う