MUGENのこととかいろいろ
未分類 | AI関連 | パレット | ポトレ | キャラ紹介 | MUGEN以外 | AI講座的なもの | その他 | キャラ | 
名の無限
≪2017.08  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  2017.10≫
プロフィール

名無し/Nanashi

Author:名無し/Nanashi
MUGENのAIをつくったり

あと自分が他所で名前出すときはこの呼び名に統一します。
他の方が呼ぶ分には名無しで構いません。

公開中のブツのリストなど

AI講座一覧

このブログはリンクフリーです。お気軽にどうぞ。

↓バナー


最新記事
Twitter
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
FC2カウンター
現在の閲覧者数:
検索フォーム
リンク
ブロとも申請フォーム
QRコード
QRコード
--.--.-- --
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告    Top↑

2010.03.25 Thu
一からのAI作成講座1
前にスカドラに公開していた、AI作成ガイドをブログ記事にして再公開してみました。
手直ししてあるけど、それでも昔書いたものなのでミスあるかも。

別記事のAIを作る方々にも合わせて読んで頂くと、よりAI作成がしやすいかと思いますw



一応、この講座ではAIがないキャラを基本として一からAIを作る方法を書いていきます。
すでにAIがあるキャラのAIを作りたい場合は、そのAI記述と一緒にこれをみて何となくわかってみてくださいw

また自分もAI作成について知らないことは多々あり、最低限のことしか書いてません。それに独学も多い。
この記事よりもいい方法もたくさんあると思います。

それを理解の上で御覧下さい

以上を前置きとさせていただきます。
それでは以下本題




1.キャラのバックアップをとっておく。

非常に大事なことです。AIがバグった挙動をした時に、どこの記述がおかしいのかわからなくなった時に見直す意味も大きいです。
キャラのバックアップをこまめにとってる人も、弄るファイルは新規フォルダを作ってその中に予備を入れといたりした方がいいです。



2.キャラのcmdファイルを開く(右クリック→編集)

キャラの中身を開いたこともない人も多いのではないでしょうか?
実際に今、AIを作る気はなくとりあえず知識を得ようって人も、
cmdファイルだけでも開いてくれるとわかりやすいと思います。



3.AIを起動させる仕組みを作る。

[Command]
Name = "なんとか"
Command = ~D, F, D, B, z
Time = 30

とかいう感じの記述がcmdファイルの最初の方に並んでるはずです。

それを確認したらこのすぐ上に

↓ここから
;---|AI Commands|-----------------------------------------------------------
[Command]
Name = "AI_00"
Command = a, a
Time = 0
[Command]
Name = "AI_01"
Command = a, b
Time = 0
[Command]
Name = "AI_02"
Command = a, c
Time = 0
[Command]
Name = "AI_03"
Command = a, x
Time = 0
[Command]
Name = "AI_04"
Command = a, y
Time = 0
[Command]
Name = "AI_05"
Command = a, z
Time = 0
[Command]
Name = "AI_06"
Command = a, s
Time = 0
[Command]
Name = "AI_07"
Command = b, a
Time = 0
[Command]
Name = "AI_08"
Command = b, b
Time = 0
[Command]
Name = "AI_09"
Command = b, c
Time = 0
[Command]
Name = "AI_10"
Command = b, x
Time = 0
[Command]
Name = "AI_11"
Command = b, y
Time = 0
[Command]
Name = "AI_12"
Command = b, z
Time = 0
[Command]
Name = "AI_13"
Command = b, s
Time = 0
[Command]
Name = "AI_14"
Command = c, a
Time = 0
[Command]
Name = "AI_15"
Command = c, b
Time = 0
[Command]
Name = "AI_16"
Command = c, c
Time = 0
[Command]
Name = "AI_17"
Command = c, x
Time = 0
[Command]
Name = "AI_18"
Command = c, y
Time = 0
[Command]
Name = "AI_19"
Command = c, z
Time = 0
[Command]
Name = "AI_20"
Command = c, s
Time = 0
[Command]
Name = "AI_21"
Command = x, a
Time = 0
[Command]
Name = "AI_22"
Command = x, b
Time = 0
[Command]
Name = "AI_23"
Command = x, c
Time = 0
[Command]
Name = "AI_24"
Command = x, x
Time = 0
[Command]
Name = "AI_25"
Command = x, y
Time = 0
[Command]
Name = "AI_26"
Command = x, z
Time = 0
[Command]
Name = "AI_27"
Command = x, s
Time = 0
[Command]
Name = "AI_28"
Command = y, a
Time = 0
[Command]
Name = "AI_29"
Command = y, b
Time = 0
[Command]
Name = "AI_30"
Command = y, c
Time = 0
[Command]
Name = "AI_31"
Command = y, x
Time = 0
[Command]
Name = "AI_32"
Command = y, y
Time = 0
[Command]
Name = "AI_33"
Command = y, z
Time = 0
[Command]
Name = "AI_34"
Command = y, s
Time = 0
[Command]
Name = "AI_35"
Command = s, a
Time = 0
[Command]
Name = "AI_36"
Command = s, b
Time = 0
[Command]
Name = "AI_37"
Command = s, c
Time = 0
[Command]
Name = "AI_38"
Command = s, x
Time = 0
[Command]
Name = "AI_39"
Command = s, y
Time = 0
[Command]
Name = "AI_40"
Command = s, z
Time = 0
[Command]
Name = "AI_41"
Command = s, s
Time = 0
[Command]
Name = "AI_42"
Command = U, U
Time = 0
[Command]
Name = "AI_43"
Command = U, F
Time = 0
[Command]
Name = "AI_44"
Command = U, D
Time = 0
[Command]
Name = "AI_45"
Command = U, B
Time = 0
[Command]
Name = "AI_46"
Command = F, U
Time = 0
[Command]
Name = "AI_47"
Command = F, F
Time = 0
[Command]
Name = "AI_48"
Command = F, D
Time = 0
[Command]
Name = "AI_49"
Command = F, B
Time = 0

;------------------------------------------------------------------------
↑ここまで

コピーしてペーストしちゃってください。(乱入者氏の記述を参考にしています。感謝)
これは要するに"人にはできないコマンド集"です。

(コマンドの最大数は決まってるので、キャラによってはコマンドの数が多すぎてエラーになるときがありますが、
(そのときは後述のAI Command Checkも含め、commandの数を削ってください。


そしたらファイルの途中に

[Statedef -1]

って書いてあるとこがあると思います。

そしたらそのすぐ下から

;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = command = "なんとか"
triggerall = power >= 2000
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200 && movecontact
trigger3 = stateno = 201 && movecontact
trigger4 = stateno = 211 && movecontact

とかこんなような記述が並んでいると思います。


(ちょっと説明すると、キャラの行動や状態にはステート番号ってのがそれぞれ付けられてます。
(一般的共通ステートでいえば、ただの立ち状態は0、ダッシュなら100です。
(
(この記述は"ChangeState"つまり、書いてるtrigger(=条件)を満たす時に、キャラをvalueに書いてある数字のステートにする。
(
(要するに、これはある条件(trigger)で、数字(value)に対応した行動を起こさせる記述なのです。


まあそれは置いといて、
いくつも続くこのような記述の一番下の記述(まあファイルの一番下だと思いますが)

[State -1, 技名 or 何もなし]
以下略

って書かれているのを確認して、このすぐ下に

↓ここから
;AI--------------------------------------------------------------------------

;AI Command Check
[State -1, AI Command]
Type = VarSet
TriggerAll = Var(59)=0 && !isHelper
trigger1 = command = "AI_01" || command = "AI_02" || command = "AI_03" || command = "AI_04"
trigger2 = command = "AI_05" || command = "AI_06" || command = "AI_07" || command = "AI_08"
trigger3 = command = "AI_09" || command = "AI_10" || command = "AI_11" || command = "AI_12"
trigger4 = command = "AI_13" || command = "AI_14" || command = "AI_15" || command = "AI_16"
trigger5 = command = "AI_17" || command = "AI_18" || command = "AI_19" || command = "AI_20"
Trigger6 = Command = "AI_21" || Command = "AI_22" || Command = "AI_23" || Command = "AI_24"
Trigger7 = Command = "AI_24" || Command = "AI_26" || Command = "AI_27" || Command = "AI_28"
Trigger8 = Command = "AI_29" || Command = "AI_30" || Command = "AI_31" || Command = "AI_32"
Trigger9 = Command = "AI_33" || Command = "AI_34" || Command = "AI_35" || Command = "AI_36"
Trigger10 = Command = "AI_37" || Command = "AI_38" || Command = "AI_39" || Command = "AI_40"
Trigger11 = Command = "AI_41" || Command = "AI_42" || Command = "AI_43" || Command = "AI_44"
Trigger12 = Command = "AI_45" || Command = "AI_46" || Command = "AI_47" || Command = "AI_48"
Trigger13 = Command = "AI_49" || Command = "AI_00"
;Trigger14 = 1;AI即起動スイッチ

V = 59
Value = 1
IgnoreHitPause = 1

;---------------------------------------------------------------------------
↑ここまで

をコピペしてください。(これも乱入者氏の記述を参考にしてます。多謝)

これは要するに"人にはできないコマンドを行ったらAIスイッチを入れる記述"です。
ここではvar(59)ってのをAIスイッチにしてます。

(万が一ですが、var(59)がAI起動以外ですでに使われてる場合はあいてるvarを調べて使ってください。


そしたら、

[Statedef -1]以下の

;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = command = "なんとか"
triggerall = power >= 2000
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200 && movecontact
trigger3 = stateno = 201 && movecontact
trigger4 = stateno = 211 && movecontact

のような記述すべてに (command = が書いてある記述すべてって言ってもいいかもしれない)

triggerall = var(59)<=0

をtriggerの列の一番上にコピペしてください。ちょっと面倒ですが必須です。

例、
;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = var(59)<=0
triggerall = command = "なんとか"
triggerall = power >= 2000
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200 && movecontact
trigger3 = stateno = 201 && movecontact
trigger4 = stateno = 211 && movecontact


これは要するに、「人操作時用の記述"AIが起動していない"という条件を足した」ということです。

(ちょっと説明すると、MUGENではCPU操作時、リストにあるコマンドをランダムで選んで実行してるらしいです。
(だからこのような"AIが起動していない"って条件を付けてないと人操作用のコマンドをAIが満たして使っちゃうのです。
(なので基本的にAIをつけるときはcommand = がついている記述にtriggerall = var(59)<=0がついてないとダメなのです。


これで「一切技を振らないAI」が完成したとも言えます。
この時点で実際にMUGEN上で見てみてください。開始後少ししてAIが起動したら,移動以外何もしなくなると思います。
なにか技をするならどこか漏れがあるか、特殊な記述をしてるキャラかでしょう。



4.AIに技を振らせる。

さっきコピペしたAI Command Checkの一番下の;----------------~以下に

;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = var(59)<=0
triggerall = command = "なんとか"
triggerall = power >= 2000
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200 && movecontact
trigger3 = stateno = 201 && movecontact
trigger4 = stateno = 211 && movecontact

このような、
使わせたい技の記述を上から持ってきてコピペします。


そしたら

triggerall = var(59)>0 && roundstate = 2



triggerall = var(59)<=0
triggerall = command = "なんとか"
に上書きする形でコピペしてください。


例、
;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = var(59)>0 && roundstate = 2
triggerall = power >= 2000
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = stateno = 200 && movecontact
trigger3 = stateno = 201 && movecontact
trigger4 = stateno = 211 && movecontact

となります。


あとは、この記述の"発動する条件"をAI用に書き直せばAIがこの技を振るようになります!


ctrlとかstatetypeとかの説明を含め、この記述の仕方なんかは"一からのAI講座2"でやります。

一応例だけ書くと、上のだと

例、
;技名
[State -1, 技名 or 何もなし]
type = ChangeState
value = 数字
triggerall = var(59)>0 && roundstate = 2
triggerall = power >= 2000
triggerall = p2statetype != A && p2statetype != L
trigger1 = statetype != A
trigger1 = ctrl
trigger1 = p2bodydist X = [30,50]
trigger1 = enemynear,ctrl = 0 && p2movetype != A
trigger1 = enemynear,vel x >= 0
trigger2 = stateno = 211 && movehit
trigger2 = p2bodydist X = [-5,50]

とか、かなり適当ですがw


このような記述を技ごとにどんどん追加していけばAIといえるAIを作ることができます。
歩きとかダッシュとかジャンプの制御はまた違うんですがそれも2のほうで。


というわけで

"一からのAI講座1"はこれで終いです。

よし!AIの動きをつくるぜ!って人は"一からのAI作成講座2"をご覧ください。

…と言いたいところですがまだ肝心の記事を書いてませんw
スイマセンが書き上がるまでお待ちください。

スポンサーサイト

AI講座的なもの    Comment(0)   TrackBack(0)   Top↑

Comment

管理者にだけ表示を許可する

Top↑

TrackBack
TrackBackURL
http://nanomugen644.blog54.fc2.com/tb.php/157-0b602822

Top↑

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。