AIスイッチについて

特殊な技やシステムの搭載はキャラによってマチマチですが、
どんなキャラにも搭載の可能性があるのがいわゆるAI。
CPUアルゴリズムって言った方が正しい気もするけど。
そのスイッチの入れ方について解説されてる所を見たことがないので
どーせだからやってみます。
ワリと一般的な知識な気もするけどまあ一応。


人間には入力不可能なコマンドを認識させるという方法があるのですが
これは発動するまでのタイムラグがあり、最悪スイッチが試合終了まで入らないことがあります。

で、もう一つの方法が
「CPUが入力したのか人間が操作したのか入力の違いを認識させる」というモノです。

仮にvar(50)にフラグを立てることを前提とします。

まず透明ヘルパーを召喚。
イントロ時にこの処理をしているキャラもいるようなのですが
イントロを飛ばすと処理が実行されないという現象が起きるようなので
-2で実行するのが良いと思われます。
[State -2,まあこんな感じ]
type = Helper
trigger1=Var(50)=0
trigger1 = NumHelper(9999) = 0
ID = 9999
helpertype = normal
name = "AI"
pos = 0,0
postype =  P1
stateno = 9999
keyctrl = 1;これを1にしないと人間操作時にAIが暴発する。

でもってそのヘルパーのステート。

何故こういう現象が起きるのかよくわからないのですが
人間がキー入力を実行するとキャラ本体とヘルパーが同時に入力を認識し
CPU操作時はキャラ本体のみに認識が発生するようなのです。
[Statedef 9999]
type    = S
movetype= I
physics = N

[State 9999,1]
type =ParentVarSet
triggerall = Var(50) = 0
triggerall = parent,RoundState = 2
trigger1 = parent,command = "a"
trigger2 = parent,command = "b"
trigger3 = parent,command = "c"
trigger4 = parent,command = "x"
trigger5 = parent,command = "y"
trigger6 = parent,command = "z"
trigger7 = parent,command = "start"
trigger8 = parent,command = "holdfwd"
trigger9 = parent,command = "holdback"
trigger10 = parent,command = "holdup"
trigger11 = parent,command = "holddown"
var(50) = 1;CPU操作時はvarに1を

[State 9999,2]
type=ParentVarSet
triggerall = Var(50) = 0
triggerall = parent, RoundState = 2
trigger1 = (command = "a" && parent,command ="a")
trigger2=  (command = "b" && parent,command ="b")
trigger3 = (command = "c" && parent,command ="c")
trigger4 = (command = "x" && parent,command ="x")
trigger5=  (command = "y" && parent,command ="y")
trigger6 = (command = "z" && parent,command ="z")
trigger7 = (command = "start" && parent,command = "start")
trigger8 = (command = "holdfwd" && parent,command = "holdfwd")
trigger9 = (command = "holdback" && parent,command = "holdback")
trigger10 = (command = "holdup" && parent,command = "holdup")
trigger11 = (command = "holddown" && parent,command = "holddown")
var(50) = 2;人間操作時はvarに2を入れる。

[State 9999,3];varが0でなくなったら消す。
type=destroyself
triggerall = parent,RoundState=2
trigger1 = Root,Var(50) != 0

こうしておくとキャラ歩いたりジャンプしたりした瞬間にフラグが立ちます。
ただこの処理にも問題がありまして、トレーニングモードの相手に選択した時
ポーズ中のメニューでガードとかジャンプするような行動を取らせるとフラグが暴発します。
P2を一瞬でも人間が操作すれば以降の暴発は防げますけど。

AIなんざ入れねーよ! て方もいるとは思いますが
例えばフェイロンの烈火拳みたいなコマンド連続入力系の技なんかは
なにも処理しないとCPUはなかなか最後まで出してくれません。
また、start押して技表やオプション画面を表示するようなキャラの場合
CPU操作時の技表暴発を防止できるというメリットがあると思います。
フラグが1の時は実行させないようにしときゃ良いってこってす。
まあCPUが歩いたりジャンプしたりするより先にいきなり挑発したらどうしようもないですが。

人間操作時に2を入れる、ってぇ処理はあんまり見かけない気もしますが
まあちょっとは簡略化できるかなー、て。

追記・・・・・WIN版MUGENNではうまく認識しないよーです。マイッタね。
■トップへ戻る