簡易AIテンプレ等

まずはこれらのサイトを見て回ることをお薦めします。




  • 夢幻回廊のAI講座(⑨氏のサイト)
    page.freett.com/mugen9/から※ 移転済
    諸事情により、現在のページのアドレスは伏せておく。









掲示板より引用

+ MUGENについて語るスレpart10 より
537 名前: no name [sage] 投稿日:2007/11/25(日) 13:20:51 ID:/+KHwFpW
AI動画上げたら、AIうp希望者が多くて吹いたw
強AI程度なら、慣れたら2~3時間で簡単に作れるんだが・・・・・・最果てとかを参考にしながらw

某動画でうpられたKFMとかは、良AIで、製作者のセンスが出てるから、欲しがる理由も分かるが、
簡易~狂AI程度なら、誰が作っても大差ないだろうにww

独断と偏見による、AIの定義

簡易AI :特定の条件下で、特定の技を一定確率で繰り出す。
(対空に昇竜拳、離れてたら波動拳、立ち大パンチ→強昇竜拳など)
強AI  :上記の条件指定を厳しくして、高確率~100%で繰り出す
(間合いに入ったら即投げ。小足見て昇竜拳、ウメハラ・ブロッキングなど)
狂AI  :強AIに加えて、ステータスが変化する
(攻撃力や防御力上昇。ゲージの自動回復など)
良AI  :簡易AIに加えてチャーンコンボやエアリアルなどを一定確率で入れてくる
(下段弱キック2発→下段中キック→波動拳など。目押しコンボやオリコンも含む)
凶AI  :狂AI+良AI。さらに、通常では不可能なコンボや、CPU専用技などを使ってくる
(歩きサマー、メガロマニアなど)

AI作成難易度
↑ 低い
↓ 高い

簡易、強、狂の製作は簡単。0からはじめても三日もあればできるようになるはず
つっても、良AI、特にオリコンとかは、かなり複雑で、ちゃんと繋がるようにするのはかなり面倒だがw

ちなみに、リトライ前提なら、簡易AIでも十分見られる試合を撮れると思われ

541 名前: no name [sage] 投稿日:2007/11/25(日) 14:00:01 ID:/+KHwFpW
statetype = *  自分の体勢。A:空中 S:立ち C:屈み L:ダウウン
p2statetype = * 敵の体勢。↑と同じ
p2movetype = * 敵の状態。A:攻撃中 H:やられ中(ガードも含む) I:その他(棒立ち、パワー貯め、挑発など)
p2bodydist X = [*,*] 敵との相対距離。-5,5:ほぼ密着。10,20:打撃距離。80,160:端から真ん中くらい。160,320:真ん中から画面端
InGuardDist ガード可能範囲にいる状態。= 0で攻撃範囲外も検出可
Random <= * 0~999の範囲。300~700くらいが妥当
RoundState = 2 戦闘中のみ。これがないと延々と死体殴りしたり、やられたはずなのに起き上がったりする
BackEdgeBodyDist <= * 20~50で、画面端に追い詰められた状態
FrontEdgeBodyDist <= * 20~50で、画面端に追い詰めた状態
MoveContact キャンセル用。statenoと併用しないと認識しないっぽい。攻撃が当たった時(ガードも含む)
! ~以外
&& ~と同時に
|| ~もしくは、~

簡易なら、とりあえずこれだけ覚えればおk 詳しくはググれw

注意点としては、MoveContactとctrl = 1を一緒に使わないこと
statetype != Aは、SとCだけでなく、Lも含むので、ctrlと併用しないと起き上がりキャンセル暴発してしまうこと
【】を使った後は、()で括らないと、&&や||を置いても、エラーが出ること。
「p2bodydist X = [*,*] && statetyep = *」だとエラー。「(p2bodydist X = [*,*]) && statetyep = *」ならおk
空白スペースでも、全角だと、エラーがでること
!は=の前に置くこと 「=!」ではなく「!=」


542 名前: no name [sage] 投稿日:2007/11/25(日) 14:04:27 ID:8urY39hy
 >>541
P2BodyDist X = [*,*] && StateType = *
の部分は
StateType = * && P2BodyDist X = [*,*]
という風に順番を変えるだけでもいける。
既に知っているだろうとは思うけど補足として。


543 名前: no name [sage] 投稿日:2007/11/25(日) 14:21:20 ID:/+KHwFpW
手順としては、cmdファイルをコピーしてバックアップ。
codを開く→statedef -1のステートの,、command ="****"を含むtriggerに「;」をつけて無効化
全「ctrl」に&& random <=**を追加

あとは、各種条件をtriggerに振って完成
ただし、これだとCPU専用になるので、それが嫌なら、var(**)を併用すること。詳しくは「最果て」でおk

;三烈カンフー突き手(ゲージレベル1)
[State -1, Triple Kung Fu Palm]
type = ChangeState
value = 3000
triggerall = command = "TripleKFPalm"
triggerall = power >= 1000
trigger1 = statetype = S
trigger1 = ctrl
trigger2 = statetype != A
trigger2 = hitdefattr = SC, NA, SA
trigger2 = movecontact

↓ 近くに居る倒れてない、何もして無い相手、または、何らかの攻撃が当たった相手に超必殺技を使用

;三烈カンフー突き手(ゲージレベル1)
[State -1, Triple Kung Fu Palm]
type = ChangeState
value = 3000
;triggerall = command = "TripleKFPalm"
triggerall = power >= 1000
trigger1 = statetype = S || statetype = C
trigger1 = ctrl && random <=100 && (p2bodydist X = [0,10]) && p2statetype = S && p2movetype = I
trigger2 = statetype != A
trigger2 = hitdefattr = SC, NA, SA
trigger2 = movecontact
trigger3 = ctrl && (p2bodydist X = [0,10]) && p2statetype != L && p2movetype = H

558 名前: no name [sage] 投稿日:2007/11/25(日) 15:33:14 ID:/+KHwFpW
とりあえず、簡単な奴を置いとくぜ?w
共通テンプレ
trigger1 = ctrl && random <=700
対空用テンプレ
trigger1 = statetype != A && p2statetype = A
trigger1 = p2movetype = I ;対空技が無敵時間ありなら「A」でおk
trigger1 = p2bodydist X = [10,30] ;相手の高さの指定はしなくても、たいていの場合は普通に機能する
trigger2 = p2movetype = H ;対空技が非キャンセルでも繋がるなら
trigger2 = statetype != A && p2bodydist X = [0,10]
飛び道具用テンプレ
trigger1 = statetype != A && p2movetype = I ;飛び道具が強力なら「A」でおk
trigger1 = p2statetype = S || p2statetype = C
trigger1 = p2bodydist X >= 60 ;飛び道具の出が遅いなら80~160で、逆に早いなら削除
trigger2 = p2movetype = H && p2bodydist X <= 80 ;出が遅いなら削除
小足用テンプレ
trigger1 = statetype != A && p2movetype = I ;判定が強力なら「A」でおk
trigger1 = p2statetype = S || p2statetype = C
trigger1 = p2bodydist X <= 10 ;リーチが長いなら、20~30でもおk
小足からの連携用テンプレ(statenoとMoveContactを併用すれば、簡単なコンボなら設定可能)
trigger1 = statetype != A && p2movetype = I ;判定が協力なら「A」でおk
trigger1 = p2statetype = S || p2statetype = C
triggerall = p2bodydist X = [10~20] ;小足と重ならないように
trigger2 = p2movetype = H && p2statetype != L ;繋ぐのが下段技なら、(p2statetype = S || p2statetype = C)でおk

562 名前: no name [sage] 投稿日:2007/11/25(日) 15:42:17 ID:/+KHwFpW
ガード用テンプレ(テレポートや緊急回避にも応用可能)
value = Ifelse(EnemyNear,StateType = C,131,130) ;デフォの場合。131が屈み、130が立ちガードに当たる
triggerall = ctrl && StateType != A
trigger1 = Random <= 700 && P2BodyDist X <= 50
trigger1 = Enemy, HitDefAttr = SCA, AA, SA ,HA ,AP, SP, HP ;うまく機能して無い気もするが一応w
trigger1 = MoveType = I && ((EnemyNear, MoveType = A || p2movetype = A) || (Enemy, NumProj >= 1))
trigger2 = InGuardDist = 1 && p2movetype = A || (Enemy, NumProj >= 1) :&&を ||に変えると、より硬くなるが、固まり易くなるw
trigger2 = P2BodyDist X >= 50

各種ステート(statedef)は、実行の優先順位があり、上から順番に高くなる
条件がかぶってる場合、複雑なほうを↑に配置して、簡潔な奴を↓に配置する事
テンプレはテンプレ、微調整は必須だぜ? あと、キャンセルできない技をキャンセルしないように、ctrlの適用範囲をちゃんと確認するように
それと、全角が混じってるかもしれないから、コピペするときは要注意なw