ama.cmd

Last-modified: 2015-08-08 (土) 22:37:06

AIとしての記述は[statedef -3]にしていくので、ここにはトリガーでAIを起動させるための追加記述と
あとはAIが起動したら、コマンドによるランダム操作が入り込まないよう、少し編集を加えるくらい

 

基本的な部分は、名の無限 一からのAI作成講座(1)と、夢幻回廊のAI講座(基本編)そのままです


 

AI起動用コマンド

追加内容

;---|AI起動用コマンド|-----------------------------------------------------------
[Command]
Name = "AI_00"
Command = a, a, a
Time = 0
[Command]
Name = "AI_01"
Command = a, a, b
Time = 0
[Command]
Name = "AI_02"
Command = a, a, c
Time = 0
[Command]
Name = "AI_03"
Command = a, a, x
Time = 0
[Command]
Name = "AI_04"
Command = a, a, y
Time = 0
[Command]
Name = "AI_05"
Command = a, a, z
Time = 0
[Command]
Name = "AI_06"
Command = a, a, s
Time = 0
[Command]
Name = "AI_07"
Command = a, b, a
Time = 0
[Command]
Name = "AI_08"
Command = a, b, b
Time = 0
[Command]
Name = "AI_09"
Command = a, b, c
Time = 0
[Command]
Name = "AI_10"
Command = a, b, x
Time = 0
[Command]
Name = "AI_11"
Command = a, b, y
Time = 0
[Command]
Name = "AI_12"
Command = a, b, z
Time = 0
[Command]
Name = "AI_13"
Command = a, b, s
Time = 0
[Command]
Name = "AI_14"
Command = a, c, a
Time = 0
[Command]
Name = "AI_15"
Command = a, c, b
Time = 0
[Command]
Name = "AI_16"
Command = a, c, c
Time = 0
[Command]
Name = "AI_17"
Command = a, c, x
Time = 0
[Command]
Name = "AI_18"
Command = a, c, y
Time = 0
[Command]
Name = "AI_19"
Command = a, c, z
Time = 0
[Command]
Name = "AI_20"
Command = a, c, s
Time = 0
[Command]
Name = "AI_21"
Command = a, x, a
Time = 0
[Command]
Name = "AI_22"
Command = a, x, b
Time = 0
[Command]
Name = "AI_23"
Command = a, x, c
Time = 0
[Command]
Name = "AI_24"
Command = a, x, x
Time = 0
[Command]
Name = "AI_25"
Command = a, x, y
Time = 0
[Command]
Name = "AI_26"
Command = a, x, z
Time = 0
[Command]
Name = "AI_27"
Command = a, x, s
Time = 0
[Command]
Name = "AI_28"
Command = a, y, a
Time = 0
[Command]
Name = "AI_29"
Command = a, y, b
Time = 0
[Command]
Name = "AI_30"
Command = a, y, c
Time = 0
[Command]
Name = "AI_31"
Command = a, y, x
Time = 0
[Command]
Name = "AI_32"
Command = a, y, y
Time = 0
[Command]
Name = "AI_33"
Command = a, y, z
Time = 0
[Command]
Name = "AI_34"
Command = a, y, s
Time = 0
[Command]
Name = "AI_35"
Command = a, s, a
Time = 0
[Command]
Name = "AI_36"
Command = a, s, b
Time = 0
[Command]
Name = "AI_37"
Command = a, s, c
Time = 0
[Command]
Name = "AI_38"
Command = a, s, x
Time = 0
[Command]
Name = "AI_39"
Command = a, s, y
Time = 0
[Command]
Name = "AI_40"
Command = a, s, z
Time = 0
[Command]
Name = "AI_41"
Command = a, s, s
Time = 0
[Command]
Name = "AI_42"
Command = a, U, U
Time = 0
[Command]
Name = "AI_43"
Command = a, U, F
Time = 0
[Command]
Name = "AI_44"
Command = a, U, D
Time = 0
[Command]
Name = "AI_45"
Command = a, U, B
Time = 0
[Command]
Name = "AI_46"
Command = a, F, U
Time = 0
[Command]
Name = "AI_47"
Command = a, F, F
Time = 0
[Command]
Name = "AI_48"
Command = a, F, D
Time = 0
[Command]
Name = "AI_49"
Command = a, F, B
Time = 0
[Command]
Name = "AI_50"
Command = b, a, a
Time = 0
[Command]
Name = "AI_51"
Command = b, a, b
Time = 0
[Command]
Name = "AI_52"
Command = b, a, c
Time = 0
[Command]
Name = "AI_53"
Command = b, a, x
Time = 0
[Command]
Name = "AI_54"
Command = b, a, y
Time = 0
[Command]
Name = "AI_55"
Command = b, a, z
Time = 0
[Command]
Name = "AI_56"
Command = b, a, s
Time = 0
[Command]
Name = "AI_57"
Command = b, b, a
Time = 0
[Command]
Name = "AI_58"
Command = b, b, b
Time = 0
[Command]
Name = "AI_59"
Command = b, b, c
Time = 0
[Command]
Name = "AI_60"
Command = b, b, x
Time = 0
[Command]
Name = "AI_61"
Command = b, b, y
Time = 0
[Command]
Name = "AI_62"
Command = b, b, z
Time = 0
[Command]
Name = "AI_63"
Command = b, b, s
Time = 0
[Command]
Name = "AI_64"
Command = b, c, a
Time = 0
[Command]
Name = "AI_65"
Command = b, c, b
Time = 0
[Command]
Name = "AI_66"
Command = b, c, c
Time = 0
[Command]
Name = "AI_67"
Command = b, c, x
Time = 0
[Command]
Name = "AI_68"
Command = b, c, y
Time = 0
[Command]
Name = "AI_69"
Command = b, c, z
Time = 0
[Command]
Name = "AI_70"
Command = b, c, s
Time = 0
[Command]
Name = "AI_71"
Command = b, x, a
Time = 0
[Command]
Name = "AI_72"
Command = b, x, b
Time = 0
[Command]
Name = "AI_73"
Command = b, x, c
Time = 0
[Command]
Name = "AI_74"
Command = b, x, x
Time = 0
[Command]
Name = "AI_75"
Command = b, x, y
Time = 0
[Command]
Name = "AI_76"
Command = b, x, z
Time = 0
[Command]
Name = "AI_77"
Command = b, x, s
Time = 0
[Command]
Name = "AI_78"
Command = b, y, a
Time = 0
[Command]
Name = "AI_79"
Command = b, y, b
Time = 0
[Command]
Name = "AI_80"
Command = b, y, c
Time = 0
[Command]
Name = "AI_81"
Command = b, y, x
Time = 0
[Command]
Name = "AI_82"
Command = b, y, y
Time = 0
[Command]
Name = "AI_83"
Command = b, y, z
Time = 0
[Command]
Name = "AI_84"
Command = b, y, s
Time = 0
[Command]
Name = "AI_85"
Command = b, s, a
Time = 0
[Command]
Name = "AI_86"
Command = b, s, b
Time = 0
[Command]
Name = "AI_87"
Command = b, s, c
Time = 0
[Command]
Name = "AI_88"
Command = b, s, x
Time = 0
[Command]
Name = "AI_89"
Command = b, s, y
Time = 0
;---|ここまで|---------------------------------------------------------------------


まず最初に、この「AIを起動させるためのコマンド」をama.cmdファイル内の『コマンド定義パート』に追加する
『コマンド定義パート』は、多くのキャラクターで.cmdファイルの一番上の部分だが、和訳カンフーマンほか
『ボタンリマップ』『デフォルト設定』という項目があるキャラも居るので、追加する場所を間違えないように
とは言え他の[Command]も登録されている場所なので、少し気をつけていればすぐ分かるはず

 

これらのコマンドは『人間にはできないコマンド』であり、プレイヤー操作で実行される事は普通ない
(特に「Time = 0」はゼロ秒でという意味なので、これを入れておくと大抵のコマンドは実行不能になるはず)
しかしMUGEN本体に搭載されているAIは、『登録されているコマンドをランダムで実行する』という物なので
プレイヤー操作では実行不能なコマンドであっても、AIだと問答無用で実行できてしまう仕様となっている

 

これを利用して、プレイヤー操作なのか(ウォッチモードなどの)AI操作なのかを判別し、AIを起動させる

 

というのが、トリガーによるAI起動の基本である。なおその性質上、AIが起動するかどうかはランダムなので
素早くAIを起動させたいのなら、「AIを起動させるためのコマンド」は、なるべく多く登録した方が良い
ただし『コマンド定義パート』に登録できるコマンドの数は128個まで、『新・擬人化アマテラス』には
既に33個のコマンドが登録されているので、ここでは「AIを起動させるためのコマンド」を切り良く90個にした

 

なお『技が多すぎて、AIを起動させるコマンドを追加する余裕が無い』というキャラも時には存在する
そういうキャラの場合は『ヘルパーを利用したAIの起動方法』を調べて搭載するなり(筆者にはちょっと無理)
このwikiで解説している和訳カンフーマンのAIのように、command部分を直接編集してAIとする方が良いだろう

 

AI起動用トリガー&AIレベル

追加内容

[State -1, AI起動用トリガー&AIレベル]
Type = VarSet
triggerall = var(59) <= 0
triggerall = !ishelper
triggerall = alive
triggerall = movetype != H
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_25" || 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_50" || command = "AI_51" || command = "AI_52"
trigger14 = command = "AI_53" || command = "AI_54" || command = "AI_55" || command = "AI_56"
trigger15 = command = "AI_57" || command = "AI_58" || command = "AI_59" || command = "AI_60"
trigger16 = command = "AI_61" || command = "AI_62" || command = "AI_63" || command = "AI_64"
trigger17 = command = "AI_65" || command = "AI_66" || command = "AI_67" || command = "AI_68"
trigger18 = command = "AI_69" || command = "AI_70" || command = "AI_71" || command = "AI_72"
trigger19 = command = "AI_73" || command = "AI_74" || command = "AI_75" || command = "AI_76"
trigger20 = command = "AI_77" || command = "AI_78" || command = "AI_79" || command = "AI_80"
trigger21 = command = "AI_81" || command = "AI_82" || command = "AI_83" || command = "AI_84"
trigger22 = command = "AI_85" || command = "AI_86" || command = "AI_87" || command = "AI_88"
trigger23 = command = "AI_89" || command = "AI_00" || PalNo = 7;7PカラーでAI常時起動
;trigger24 = 1;左端の「;」を消すとAI常時起動
var(59) = 10;AIレベル(1~10で設定、0で起動しない)


MUGEN本体のAIによるランダム選択で「AIを起動させるためのコマンド」が実行されたら、それを判別して
AIを実際に起動させる記述がこの部分。「var(59)」が「0ではなくなる」ことで、AIの起動とする
ちなみに「var(59)」はAIレベル設定用のvarと併用している、varの数は限られているので節約は大事

 

「!ishelper」は自身がヘルパーではない時、「alive」は自身がまだ生きている時、つまりAIの暴発防止用
これらを入れておかないと、ヘルパーが分身化した時にAIが入ってしまい、暴れ始めてしまう可能性がある
「movetype != H」もAIの暴発を防ぐための記述、詳しいことは名の無限 AI暴発について
『3・キャラが投げられるなどでAIが暴発するケース』で説明されているが、投げや当て身を受けているときは
食らい中(movetype = H)になっている事が多いので、食らい中にはAIを起動させない事である程度対処する

 

またAIの起動がランダムなので、AIを常時起動するための記述も加えておくと、大会他でも使いやすくなる
特殊カラーではないカラーがいくつかあるキャラなら、その内の一つをAI常時起動用のカラーにしておくと便利

 

後はこれを他のvarset同様、[statedef -1]の下(何処でも良いが分かりやすい場所)に置けば良い

 

防御レベル&特殊技使用率

追記内容

[State -1, 防御レベル]
type = VarSet
trigger1 = var(59) >= 1
var(58) = 9;1~10で設定、0でガードしない

 

[State -1, 特殊技使用率]
type = VarSet
trigger1 = var(59) >= 1
var(57) = 6;1~10で設定、0で使用しない


[statedef -3]の方に置いても問題ないのだが、設定項目なので分かりやすいようAIレベルの近くに置く
『新・擬人化アマテラス』の場合は「var(59)」「var(58)」「var(57)」が使われてなかったのでこうしたのだが
既にキャラの制御でそれらのvarが使用済みの場合は、まだ使われていないvarを調べて代用しよう

 

ちなみに「防御レベル」は
10で『ガーキャンなど知らぬ(通常使用しない)』
9で『「体当たり」で超反応カウンターあり(デフォルト)』
8で『「かわせ身」を使用』
7で『「天落とし(地上・空中投げ)」をカウンターに使用』
6で『「天落とし(当て身)」を使用』
5で『「迅雷(1ゲージ技)」で超反応カウンターあり』
4で『「バックステップ&ジャンプ」で投げ技を超反応回避』
3で『「ジャンプ」で飛び道具などを回避』
2で『「空中受け身」を使用』
1で『「ガード」を使用』
となっている、基本的には9で調整しているので、そこはよろしく

 

「特殊技使用率」はゲジマユである11Pカラー以外は「霧隠」の使用率、11Pカラーでは当て身一撃技「光明」の
ライフ制限解除(改変)の度合い。ライフが『レベル×100』の値より少なくなったら使用を解禁する
ちなみに10だと『1000未満』ということになるので、何でも良いから一発殴られないといけない
最初から一撃当て身ゲーを開始させたいのならば、値は『11』に設定しておくように

 

その他の記述

編集前

;突進A
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1000
triggerall = command = "QCF_x"
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;Except for sweep kick
trigger2 = movecontact

 
編集後

;突進A
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1000
triggerall = var(59) <= 0
triggerall = command = "QCF_x"
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;Except for sweep kick
trigger2 = movecontact

 

;(以下省略、他の記述も同様に編集していく)


そして一番重要なことだが、[statedef -1]に記述されている他の技の全てに「triggerall = var(59) <= 0
を書き加えていく。これが「AIが起動したら、プレイヤーのコマンド入力を受け付けない」ための記述となる

 

『新・擬人化アマテラス』でも30近くの技があるので、編集にはテキストエディタの置換を利用すると良いかも