AI作成の前準備のときに作成した、AI用フォルダ「simple-ai」内のkfm.cnsの中身を記述する
記述しなくても問題の無い項目も多いが、やはり記述しておいた方が見栄えは良いので頑張ろう
<注意点>
[State 821, ステート変更]と[State 821, 相手ステートに戻す]の項目のcommandには触らないこと
[Statedef 821]の項目は「相手側2(放り投げられた)」とメモされているとおり、投げ技をかけられた
相手側が参照し、受け身を取るか否かを決める項目である。ここを下手に弄ると受け身不能な凶悪技になったり
逆に何度仕掛けても受け身を取られる弱い技になったりしてしまう。もしすでに記述を変更してしまった後なら
バックアップから該当の記述をコピーしてきて、上書きすることで元に戻しておこう
<注意点>
カンフースルー:掴み
編集前 |
[State 810, 変数];「holdfwd」のコマンドが入力されているかどうかを判断する
type = VarSet
trigger1 = Time = 0
var(2) = command = "holdfwd"
編集後 |
;前に投げるか後ろに投げるかを決める項目、追い込まれていないなら前に投げるようにする
[State 810, 変数];「holdfwd」のコマンドが入力されているかどうかを判断する
type = VarSet
triggerall = roundstate = 2
trigger1 = Time = 0
var(2) = BackEdgeBodydist > 30
カンフースルーは前キーを入れながらだと前に投げ、後ろキーを入れながらだと後ろに投げるタイプの投げ技
なので追い込まれていない時は前に投げて相手を画面端に追い込み、自分が追い込まれているときは後ろ投げで
お互いの位置を入れ替え逆転を狙う。「BackEdgeBodydist」は自分の後方の画面端との距離を測るトリガー
(あくまで画面の端で、ステージの端ではない点には注意)それが30よりも大きければ、追い込まれていない
と判断して前投げの方を行い、そうでなかったら追い込まれていると判断し後ろ投げを行うという記述
カンフーニー(弱)飛び膝蹴り
編集前 |
[State 1051, ステート変更];追加入力
type = ChangeState
trigger1 = Command = "a" || Command = "b"
trigger1 = Vel y < -1
value = 1055
編集後 |
;飛び膝蹴りから追加で蹴りを放つ、連続技を行うか否かの項目
[State 1051, ステート変更];追加入力
type = ChangeState
triggerall = roundstate = 2
trigger1 = p2movetype = H || Vel y > -2
trigger1 = random <= 700
trigger1 = Vel y < -1
value = 1055
カンフーニーは飛び膝蹴りと追加入力で放つ蹴りの二段技なので、初段の飛び膝蹴りが当たったら
追加で蹴りを放つ、もしくは追加入力できる終わり際ならカス当たりだろうと期待して
蹴りに派生させるという記述をしておく、多少なりともリーチは伸びるし
AI製作開始でコンボ記述にもランダム要素を入れたのは、コンボルートにもランダム性を入れるためだが
ここでは他のコンボルートなど存在しないので、実はランダム要素は入れなくても全く構わない
しかし入れないと、条件が成立した場合は確実に成功してしまう。それが少し強すぎると思うならば
多少なりともランダム要素を入れて、失敗の要素を残しておくというのも一つの考えだ
ここでは「random <= 700」と『高確率で成功する(失敗は稀)』ように設定した
【追記】
この記述の直前に、hitdefを継続させる「hitdefpersist = 1」があったため、movecontactが
使えるものと思っていたが、そうではなかったらしい。よって『おそらく相手に当たっただろう』と推測して
使わせるよう「p2movetype = H」に記述を変更した。2年以上も放置していて申し訳ない
カンフーニー(強)飛び膝蹴り
編集前 |
[State 1061, ステート変更]
type = ChangeState
trigger1 = Command = "a" || Command = "b"
trigger1 = Vel y < -1
value = 1055
編集後 |
;飛び膝蹴りから追加で蹴りを放つ、連続技を行うか否かの項目
[State 1061, ステート変更]
type = ChangeState
triggerall = roundstate = 2
trigger1 = p2movetype = H || Vel y > -2
trigger1 = random <= 700
trigger1 = Vel y < -1
value = 1055
カンフーニー(弱)と同じように編集する
速いカンフーニー:飛び膝蹴り
編集前 |
[State 1071, ステート変更]
type = ChangeState
trigger1 = Command = "a" || Command = "b"
trigger1 = Vel y < -1
trigger1 = Time > 0
value = 1075
編集後 |
;飛び膝蹴りから追加で蹴りを放つ、連続技を行うか否かの項目
[State 1071, ステート変更]
type = ChangeState
triggerall = roundstate = 2
trigger1 = p2movetype = H || Vel y > -2
trigger1 = random <= 700
trigger1 = Vel y < -1
trigger1 = Time > 0
value = 1075
少し条件が増えているが、やることは変わっていないので、カンフーニー(弱)&(強)と同様に編集する
パワー溜め(特殊行動)
編集前 |
[State 700, ステート変更]
type = ChangeState
trigger1 = command != "hold_c" ;「hold_c」のコマンドではない時(Cボタンが離されたら)
trigger2 = Power >= 3000 ;パワーゲージがレベル3まで溜まったら
value = 0
ctrl = 1
編集後 |
;パワー溜め行動を、どのタイミングで止めるかの設定
[State 700, ステート変更]
type = ChangeState
trigger1 = RoundState != 2 || p2movetype = A || InGuardDist || p2bodydist X <= 60
trigger2 = Power >= PowerMax
value = 0
ctrl = 1
「||」は要するにor、『○○、もしくは△△のとき』という意味、あとは順をおって説明する
「RoundState != 2」は『試合中でないとき』、つまり試合が終わったときは止める
「p2movetype = A」は『相手が攻撃態勢のとき』、パワー溜めを続けるのは危険なので止める
「InGuardDist」は『ガード体勢を取れる範囲内』、つまり相手の攻撃予定圏内に入ったことを表している
もちろん危険なのでゲージ溜めも止める(この「InGuardDist」は防御関係でよく使われるので覚えておこう)
「p2bodydist X <= 60」は『お互いの距離が60以内』、接近されているので危険と判断し中断する
という事で、そんなに難しい記述はしていない、明らかに危なくなったら止めるということ
また「PowerMax」は、パワーゲージが満タンのときを表す。MUGENではパワーゲージの上限が
1~2本しか無いキャラもいれば、5本や10本も持てるキャラもいたりするので、タッグ戦のことを考えると
「Power >= 3000」と上限が通常の3本なのを前提にするのはよろしくない。なので「Power >= PowerMax」
と編集して、相方のゲージ本数の上限が自分より大きくても小さくても対応できるようにしておくと良い
板投げ(必殺技)
編集前 |
[State 1300, 変数];Bボタンが押されたら1、それ以外なら0
type = VarSet
trigger1 = Time = 0
v = 5 ;変数用パラメータの記述方法その2
value = (command = "b") ;(その1はコマンドファイルにて)
編集後 |
;板投げを弱で出すか強で出すかを決める設定
[State 1300, 変数];Bボタンが押されたら1、それ以外なら0
type = VarSet
triggerall = roundstate = 2
trigger1 = Time = 0
v = 5 ;変数用パラメータの記述方法その2
value = p2bodydist X >= 160
板投げは弱と強で飛距離の違う飛び道具、隙は小さいが飛ばない弱と、隙は大きいがよく飛ぶ強なので
距離で使い分ける。ちなみに板投げ(弱)の飛距離は180程度はあるのだが、悩むほど遠いようなら
板投げ(強)の方を使えば良いので、確実に当たるように160を使い分けのラインにしてある