ama.cns

Last-modified: 2015-09-30 (水) 17:09:43

新・擬人化アマテラスの.cnsファイルは主に、墨ゲージを消費して出す特殊技『一閃(空中版)』及び
キャンセルジャンプからの派生先を指定する部分が多い。ダメージ量に大きく影響するのでちゃんと設定する

 

またトリガーでAIを起動させるのなら、『varの持ち越し』設定は入れておいた方が良いだろう


 

[Date];AI用の「var」を次のラウンドに持ち越す

編集前

[Data]
;(中略)
IntPersistIndex = 60
FloatPersistIndex = 40

 
編集後

[Data]
;(中略)
IntPersistIndex = 59;AI用のvarだけ持ち越す
FloatPersistIndex = 40


実は『var』はラウンド終了後にリセットされてしまうので、トリガーと「var」でAIを起動させていると
ラウンド毎にAIもリセットされてしまい、またランダムにAIが起動するのを待たなければいけなくなってしまう
それはあまり良くないので、次のラウンドにAI用の「var」だけは持ち越せるよう設定しておく

 

IntPersistIndexは『リセットするvarの範囲』を指定している、「var」はvar(0)からvar(59)の60個あり
デフォルトでは『全てリセットする』ようになっている、ここを「59」にすることで、リセットされるのは
59個までとなり、60個目の「var(59)」はリセットされず、次のラウンドに持ち越すことができるようになる
(ちなみに見て分かる通り、IntPersistIndexの数字とvarのナンバーは一個ずれているので注意が必要)

 

またこの簡易AIでは「var(58)」「var(57)」は、「var(59)」に連動して入るように設定しているので
ここで持ち越す「var」に含めなくても問題ないのだが、気になるなら含めておいてもまた問題ない

 

[Statedef 1210];特殊技『一閃(空中版)』

編集前

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = command = "y"
trigger1 = stateno =1210
trigger1 = movecontact=[1,100]
trigger1 =animelem =6

 
編集後

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = var(59) <= 0
triggerall = command = "y"
trigger1 = stateno =1210
trigger1 = movecontact=[1,100]
trigger1 =animelem =6


『一閃(空中版)』が当たったら、続けて『一閃(空中版)』でコンボし続けられるという記述
だがこの記述を空中コンボには使用しない、と言うのもすぐ下にこういう記述があるから

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1305
trigger1 = movecontact=3

 

要するに3フレーム目には、別のステートに強制的に移される。そして移された先のステートの方でも
コンボを継続出来る派生先が用意されているし、キャンセルしてゲージ技の「迅雷」や「勾玉」を出せるのも
そのステート。つまりここでコンボしてしまうと、それらの選択肢が消えてしまうので、使わないという事

 

[Statedef 1300];キャンセルジャンプからの派生

編集前

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
trigger1 = command = "a"
trigger1 = time>3

 
編集後

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = var(59) <= 0
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
triggerall = var(59) <= 0
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
triggerall = var(59) <= 0
trigger1 = command = "a"
trigger1 = time>3

 

;相手がスライドダウン中でないなら、とにかく使っていく
[State 1300, 『一閃(空中版)』に派生]
type = ChangeState
value = 1210
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
triggerall = var(40) >= 1000
trigger1 = time > 10
trigger1 = statetype = A
trigger1 = p2stateno != [1170,1179]
trigger1 = random <= 700

 

;それ以外の状況で、タイミングを見計らって使っていく
[State 1300, ホーミングジャンプに派生]
type = ChangeState
value = 1310
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
trigger1 = time > 3
trigger1 = time > 11 || p2stateno = [1170,1179]
trigger1 = p2bodydist y >= -10 || vel Y > -1
trigger1 = random <= 700


p2stateno = [1170,1179]」は、スライドダウン中の相手のステートナンバー

 

『一閃(空中版)』は専用ゲージを使うだけあり強力な技なので、使える状況になったら兎に角使っていく
ただし、スライドダウン中の相手には当たらないという弱点があるので、「p2stateno != [1170,1179]」と
相手のスライドダウン中には使わないように指定しておく(つづら氏のAIだと、スライドダウンを
追いかけるのに使っていたりするが、この簡易AIではこのように使っていくということ)

 

キャンセルジャンプから派生できるホーミングジャンプは、主に『一閃(空中版)』の使えない状況で
タイミングを測って使っていく。まず『一閃(空中版)』は10フレーム目まで使用できないのに
ホーミングジャンプは3フレーム以降から使えるため、普通に使用させていたらホーミングジャンプしか出ない
なので通常時は「time > 11」で、『一閃(空中版)』より遅いタイミングまで待たせている
こうしておいて、かつ『一閃(空中版)』への派生より下においておけば、『一閃(空中版)』への派生が
先に判定されるため、普通は『一閃(空中版)』が高確率で出て、まれにホーミングジャンプが出る形になる

 

ただし「p2stateno = [1170,1179]」で『相手がスライドダウン中の時』は別で、後の条件を満たす限り
最速のタイミングで出すようにしてある(専用ゲージが少ない時は、-3.cnsの『空中突進』で対処する)

 

その『後の条件』は「p2bodydist y >= -10」で、『相手が自身とほぼ同じ高さか、より低い位置にいる時』と
「vel Y > -1」で『キャンセルジャンプの頂点付近』を指定してある。ホーミングジャンプからの派生技には
上方向への攻撃技が無いので、可能な限り相手より高い位置に飛んでから派生させるための記述だ

 

なお『急降下』は使用しない。コンボムービーでは活用されているが、単純に筆者の技量の問題で
(『一閃(空中版)』の使い勝手が非常に良いので、どうしてもこれに頼ってしまいがち)

コンボムービーは、1:52~
 

[Statedef 1302];EXキャンセルジャンプからの派生

編集前

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
trigger1 = command = "a"
trigger1 = time>3

 
編集後

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = var(59) <= 0
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
triggerall = var(59) <= 0
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
triggerall = var(59) <= 0
trigger1 = command = "a"
trigger1 = time>3

 

;相手がスライドダウン中の時にしか使わないので、条件内なら常に最速で派生させる
[State 1302, ホーミングジャンプに派生]
type = ChangeState
value = 1310
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
trigger1 = time > 3
trigger1 = p2bodydist y >= -10 || vel Y > -1
trigger1 = random <= 700


EXキャンセルジャンプは、通常のキャンセルジャンプと違い、色々な状況で使えるようになっているが
このAIでは、それを全て『相手がスライドダウン中に追いかけて追撃』するために使用していく
なので使うのはホーミングジャンプ派生のみ、相手との位置関係が条件内なら常に最速で使用するように

 

[Statedef 1305];『一閃(空中版)』移動先ステート

編集前

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = var(40)>=1000
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
trigger1 = command = "a"
trigger1 = time>3

 
編集後

[State 1000, Jump Strong Punch]
type = ChangeState
value = 1210
triggerall = var(59) <= 0
triggerall = var(40)>=1000
triggerall = command = "y"
trigger1 = time>10
trigger1 = statetype = A

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
triggerall = var(59) <= 0
trigger1 = command = "x"
trigger1 = time>1

 

;kj
[State -1, Light Kung Fu Palm]
type = ChangeState
value = 1310
triggerall = var(59) <= 0
trigger1 = command = "a"
trigger1 = time>3

 

;ガードされているようなら急降下でコンボを中断する
[State 1305, 急降下に派生]
type = ChangeState
value = 1433
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
trigger1 = time > 1
trigger1 = p2stateno = [120,155]
trigger1 = random <= 700

 

;ガードされていないようなら、『一閃(空中版)』による攻撃を継続
[State 1305, 『一閃(空中版)』に派生]
type = ChangeState
value = 1210
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
triggerall = var(40) >= 1000
trigger1 = time > 10
trigger1 = statetype = A
trigger1 = random <= 700

 

;ゲージが少なくなってきたようなら、ホーミングジャンプに派生させる
[State 1305, ホーミングジャンプに派生]
type = ChangeState
value = 1310
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
trigger1 = time > 3
trigger1 = time > 11 || var(40) < 3000
trigger1 = random <= 700


上記で説明したが、『一閃(空中版)』が相手に当たって、3フレーム目に移動させられるステート
『一閃(空中版)』が相手に当たった後ということは、相手がスライドダウン中と言う事は無いと思われる

 

この時点で相手がガード体勢だったら、急降下でコンボを中断し相手の近くに着地、相手はガード硬直中なので
続けて攻撃を加えられる。また急降下と『一閃(空中版)』の派生までの間に9フレームほど猶予があるので
『一閃(空中版)』へ派生可能なときは、だいたいヒット後だと判断して高確率で繋いでいくように
(ブロッキングなど隙の少ない特殊ガードに対しては、急降下は死亡フラグだと思うしそのままコンボ継続で)

 

あとは専用ゲージが減ってきたら、ホーミングジャンプに移行して中断するという部分も同様に記述する
そしてこれらを判定させたい順に並べ替え、同じステート内では上から順番に判定されるのを忘れないように

 

[Statedef 1310];ホーミングジャンプからの派生

編集前

;kj
[State -1, Light Kung Fu Palm];空C
type = ChangeState
value = 630
trigger1 = command = "a"
trigger1 = time>3

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
trigger1 = command = "x"
trigger1 = time>3

 

;kj
[State -1, Light Kung Fu Palm];突進A
type = ChangeState
value = 1432
trigger1 = command = "b"
trigger1 = time>3

 
編集後

;kj
[State -1, Light Kung Fu Palm];空C
type = ChangeState
value = 630
triggerall = var(59) <= 0
trigger1 = command = "a"
trigger1 = time>3

 

;kj
[State -1, Light Kung Fu Palm];急降下
type = ChangeState
value = 1433
triggerall = var(59) <= 0
trigger1 = command = "x"
trigger1 = time>3

 

;kj
[State -1, Light Kung Fu Palm];突進A
type = ChangeState
value = 1432
triggerall = var(59) <= 0
trigger1 = command = "b"
trigger1 = time>3

 

;相手がスライドダウン中ではなくて、かつ攻撃範囲内なら派生
[State 1310, 空中突進に派生]
type = ChangeState
value = 1432
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
trigger1 = time > 3
trigger1 = p2bodydist Y = [-50,50]
trigger1 = p2stateno != [1170,1179]
trigger1 = p2movetype != H || p2stateno = [120,155]
trigger1 = random <= 500

 

;それ以外の場合ならば、こちらに派生させておく
[State 1310, ジャンプ強攻撃に派生]
type = ChangeState
value = 630
triggerall = var(59) >= 1
triggerall = random <= (var(59) * 100)
triggerall = roundstate = 2
triggerall = time > 3
trigger1 = var(13) = 0 && p2stateno = [1170,1179]
trigger1 = random <= 200
trigger2 = var(13) > 0 || p2stateno != [1170,1179]
trigger2 = random <= 300


ホーミングジャンプの設定は割と厄介で、相手との距離が大きく離れていると速く飛び、あまり離れていないと
ゆっくり飛ぶという仕様になっている。なので距離を基準に派生させてもなかなか当たらなかったりするのが
割りと困りものだったり(特にジャンプ強攻撃への派生によるスライドダウン追撃はタイミングが厄介)

 

なのでここではもう『外れても、それはそれで』の精神で、何度もAI戦で試行して見た結果
『だいたい当たったrandomの数値』に任せて、派生させてみている(掟破りの確率任せAIである)
通常のスライドダウン追いかけの際は、追いついてから派生するよう、確率を若干低めに設定してあり
スライドダウンの速度も遅くなる『霧隠』中や、スライドダウン以外の時に派生させる場合は高めにしてある

 

空中突進の範囲は、キャンセルジャンプから直の派生とは違い、下方向へはジャンプ強攻撃への派生が補うので
上方向を攻撃範囲ギリギリまで広げ、下方向は狭めている(とは言えこの辺は感覚なので、実践あるのみだが)

 

なお、ここでも急降下は使用していない。このAIだとキャンセルジャンプは、スライドダウンへの追撃や
コンボの中でしか使わず、飛び込みで出すことはしないので、急降下を使う場面が無かったりする