自分の事を知ってる人がいるなら大体の人がMUGEN関係だと思うのですが、
全然MUGENに関する記事がありませんね、申し訳ありません。
せっかくの機会なのでちょっとタッグAIに関する解説をさせていただきます。
かなり専門的な話になりますので分からない人はとことん分からない話だと思います。
というかMUGENのAIを作成する人以外にはまったく縁の無い記事です。
まずはこちらの動画をご覧ください、少し古いですがご了承を。
[nicodo]sm2786888[/nicodo]
昔自分が投稿したMUGEN動画なのですがこの時に使用したタッグAIには、
お互いのゲージ技を同時に発動する仕組みが搭載されています。
動画内でもここぞとばかりに同時に暗転していますね。これは
「技のモーションに入ってから実際にゲージを消費するまでに若干のタイムラグがある」
「一度モーションに入ってしまえばその時にゲージが無かったとしても技は発動する」
という仕組みを利用しほとんど同時にゲージ技を使用する事で、
1ゲージで両方のゲージ技を発動する事を可能にしたものです。
合体技っぽくて非常に見栄えがいいので個人的なお気に入りです。
で、これ真似しようとした人もいるかと思うんですが、
多分こう思った人がいるんじゃないでしょうか?
「なんでこんなに頻繁に同時に技を出せるの?」
実際にやろうとしても中々綺麗に技を発動させれなかった人もいるのではないでしょうか?
一応理由の1つに「2人とも空中で技を発動可能」というのもあるのですが、
せっかくなので自分が使った同時発動の仕組みを教えたいと思います。
こっからAI作成をしてない人には意味不明の文字列が出ます、ご注意ください
; アークティックアタック
[State -1, Arctic Attack]
type = ChangeState
value = 2000
triggerall = !var(17)
triggerall = command = “ArcticAttack”
triggerall = Power >= 1000
triggerall = MoveType != H
trigger1 = Ctrl
trigger2 = StateNo = [200,250]
trigger3 = StateNo = [400,450]
trigger4 = StateNo = [600,650]
trigger5 = StateNo = 1060
trigger5 = time > 17
trigger6 = StateNo = 1100
trigger6 = time > 17
trigger7 = StateNo = 1110
trigger7 = time > 17
trigger8 = StateNo = [1000,1050]
これはアイスマンの超必殺技「アークティックアタック」の人操作時の発動条件を記したものです。
全部説明するときりがないのですがまず「triggerall」で示された条件を全部達成した場合に、
「trigger1 = Ctrl」今フリーの状態(攻撃食らってないし攻撃してもいない状態、空中でもOK)
を満たしていればアークティックアタックを発動できます。
「trigger1」を満たしていなくてもそれ以外の
「trigger2 = StateNo = [200,250]」(特定の攻撃を出している状態)や
trigger5 = StateNo = 1060(特定の攻撃を出している状態でかつ)
trigger5 = time > 17(その攻撃モーションの17フレーム目移行である場合)
であれば同じようにアークティックアタックを発動できます。
全ての条件の前提となる「triggerall」の方は大雑把に説明するなら
「人操作時」「攻撃食らってる状態じゃなくて」「ゲージが1000以上の時に」「コマンド入力」
となります。
まあ分からない人もいるかもしれませんがAI作成の基本事項なので今回は省略させていただきます。
このうち「コマンド入力」はAI操作時には必要無いものなので省いてOKです。
またAI操作時の行動なので「人操作時」を「AI操作時」に修正します。
修正すると大体こんな感じになります。
; アークティックアタック
[State -1, Arctic Attack]
type = ChangeState
value = 2000
triggerall = var(17)
triggerall = Power >= 1000
triggerall = MoveType != H
trigger1 = Ctrl
trigger2 = StateNo = [200,250]
trigger3 = StateNo = [400,450]
trigger4 = StateNo = [600,650]
trigger5 = StateNo = 1060
trigger5 = time > 17
trigger6 = StateNo = 1100
trigger6 = time > 17
trigger7 = StateNo = 1110
trigger7 = time > 17
trigger8 = StateNo = [1000,1050]
次にタッグ相手である霊夢の連携させたい必殺技を確認します。
;—————————— 夢想妙珠&夢想封印(空中)
[State -1, 3025]
Type = ChangeState
Value = 3025
TriggerAll = Power >= 1000
TriggerAll = Var(41) = 0
TriggerAll = Var(46) = 0
TriggerAll = Command = “236Z”
TriggerAll = StateType = A
Trigger1 = Ctrl
Trigger2 = (((Var(12)=225)&&(StateNo=119))||(StateNo=226)) && MoveContact
Trigger3 = StateNo = 600 && MoveContact
Trigger4 = StateNo = 620 && MoveContact
Trigger5 = (StateNo=[700,729]) && (StateNo%5=1 && Time>0)
Trigger6 = (StateNo=[700,729]) && (StateNo%5=2)
Trigger7 = (StateNo=[1020,1039]) && MoveContact
Trigger8 = (StateNo=1065) && MoveContact
これが霊夢の空中版夢想封印の発動条件ですが、
今回見るべきなのは「Value = 3025」という部分です。
これが空中版夢想封印の番号であり、霊夢はこの番号の行動をしている事を表します。
同様に地上版の番号が3020、他のゲージ技の番号が3040と3060です。
これらが同時発動させたい技になりますのでメモしておきます。
ここからが本題です。
アイスマンのアークティックアタックの発動条件にこの番号を付け加えます。
また同時に「タッグ相手が霊夢である」という条件も入れます。
[State -2, アッチイケアタック]
type = ChangeState
value = 2000
triggerall = var(17)
triggerall = (Partner,StateNo = 3020) || (Partner,StateNo = 3025) || (Partner,StateNo = 3040) || (Partner,StateNo = 3060)
triggerall = Power >= 1000
triggerall = MoveType != H
triggerall = P3Name = “Reimu_Hakurei”
trigger1 = Ctrl
trigger2 = StateNo = [200,250]
trigger3 = StateNo = [400,450]
trigger4 = StateNo = [600,650]
trigger5 = StateNo = 1060
trigger5 = time > 17
trigger6 = StateNo = 1100
trigger6 = time > 17
trigger7 = StateNo = 1110
trigger7 = time > 17
trigger8 = StateNo = [1000,1050]
赤色の部分が修正した箇所です。
「Partner,StateNo = 3020」は「タッグ相手が3020番(夢想封印)の行動をしている」を意味します。
「||」は「または」ですね、他の行動であってもOKという意味です。
「P3Name = “Reimu_Hakurei”」は「タッグ相手の名前はReimu_Hakureiである」を意味します。
これで「霊夢がゲージ技を発動していると自分もゲージ技を発動する」というAI表記になりました。
同様の事を霊夢側にも行います。
;—————————— 夢想妙珠&夢想封印(空中)
[State -2, 3025]
Type = ChangeState
Value = 3025
TriggerAll = Power >= 1000
TriggerAll = Var(41) = 0
TriggerAll = Var(46) = 0
TriggerAll = Var(49) = 1
TriggerAll = StateType = A
triggerAll = (Partner,StateNo = 2000) || (Partner,StateNo = 2010)
TriggerAll = Partner,time <= 5
TriggerAll = Power <1800
triggerall = P3Name = “Iceman”
Trigger1 = Ctrl
Trigger2 = (((Var(12)=225)&&(StateNo=119))||(StateNo=226)) && MoveContact
Trigger3 = StateNo = 600 && MoveContact
Trigger4 = StateNo = 620 && MoveContact
Trigger5 = (StateNo=[700,729]) && (StateNo%5=1 && Time>0)
Trigger6 = (StateNo=[700,729]) && (StateNo%5=2)
Trigger7 = (StateNo=[1020,1039]) && MoveContact
Trigger8 = (StateNo=1065) && MoveContact
「Partner,StateNo = 2000)」というのはやはりアイスマンのゲージ技のモーションです。
霊夢側にはこの他に新たに青色の部分も記述しました。
これはより効率のいいタイミングで必殺技を同時に発動させる為に記述した部分です。
「Partner,time <= 5」というのはタッグ相手の今のモーションが5フレーム以内である事、
つまり「ゲージ技のモーションに入ってから5フレーム以内」である事を意味します。
この5フレームというのは「実際にゲージを消費するタイミング」です。
アイスマンのモーションから5フレーム以内で霊夢が同じくゲージ技を出せれば、
合計で2000ゲージ必要な所を、1000ゲージあれば出せる事になります。
「Power <1800」というのは「ゲージが1800より少ない」という意味です。
2000ゲージ以上あると結局2000ゲージ消費してしまう為、
ちゃんとお得な時に出すようにしようって事ですね。
「格好いいし勿体無くても問題ない!」って場合は省いてOKです。
これが同時に必殺技を発動する仕組みとなります。
発動するタイミングを増やす為に相方がゲージ技を出した場合、
自分がどこにいようが適当に技をぶっ放すようにしていますが、
霊夢やアイスマンのように攻撃範囲の広い技で無い限りはあまりお勧めできません(
そういう意味でも霊夢とアイスマンは同時発動をするのに最適だったわけですね。
これよりしっかりした記述を作ってる人もいるかもしれませんが、
何かの参考になれば幸いです。
超必殺技の同時発動というのはやはり格好いいので、
AI作りに自信ある人は是非一度試してみてください。