カンフーニー

Last-modified: 2014-09-04 (木) 16:14:25

追加入力で蹴りに派生する飛び膝蹴り、対空に使えなくはないがあまり頼れないし記述も面倒なので
カンフーアッパーに任せても良いのだが、ちゃんと記述すればダメージも伸びるので、挑戦する価値はある

 

<注意点>
「var(1)」は変数、変数元の記述と条件が一致したら使用される。キャラクター作者の方が
記述内容を減らすために使っていることが多いが、AI作成の際には各triggerにそれぞれ条件を設定したい
という場合が多いので、変数元の記述に書き戻してしまうことがほとんどである

 

[State -1, 変数の例2];必殺技の発生条件をチェック
type = VarSet
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;[Statedef 440](足払いのステート)ではない時
trigger2 = movecontact
var(1) = 1

 

変数元の記述はこうなっている、「var(1)」は全てこれに戻してからAIとして作成していく
<注意点>


 

速いカンフーニー

編集前

[State -1, 速いカンフーニー];ゲージ消費
type = ChangeState
value = 1070
triggerall = command = "FF_ab"
triggerall = power >= 330
trigger1 = var(1) ;上で設定した変数が有効になった時

 
編集後

;対空技に使えなくはないが、当たり判定も大きく頼れない、ゲージも消費する
;[State -1, 速いカンフーニー];ゲージ消費
;type = ChangeState
;value = 1070
;triggerall = command = "FF_ab"
;triggerall = power >= 330
;trigger1 = var(1) ;上で設定した変数が有効になった時


この技にゲージを使うなら、我慢して「スマッシュカンフーアッパー」を待つ方が良い
と筆者は判断し、コメントアウトして使用しないことにしておく

 

弱カンフーニー

編集前

[State -1, 弱カンフーニー]
type = ChangeState
value = 1050
triggerall = command = "FF_a"
trigger1 = var(1)

 
編集中

[State -1, 弱カンフーニー]
type = ChangeState
value = 1050
triggerall = command = "FF_a"
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;[Statedef 440](足払いのステート)ではない時
trigger2 = movecontact

 
編集後

;飛距離がカンフーアッパーと大差ないので対空技としては頼れない、とはいえ連続技なので
;コンボに組み込んで使う。空中の相手なら距離は58、地上の相手には48まで届き
;高度は110くらいまで届くが、跳び技ゆえしゃがんだ相手には当たらない
[State -1, 弱カンフーニー]
type = ChangeState
value = 1050
triggerall = roundstate = 2
triggerall = p2statetype != L
triggerall = p2bodydist X = [-10,58]
triggerall = p2bodydist Y >= -110
triggerall = p2statetype != C
trigger1 = statetype != A
trigger1 = ctrl
trigger1 = p2bodydist X >= 20
trigger1 = enemynear,vel Y < 5
trigger1 = (p2bodydist X <= 40 && p2bodydist Y <= -30)||(enemynear,vel X >= 0 &&(enemynear,vel Y < -5 ||(p2bodydist X > 40 && p2bodydist Y <= -50)))
trigger1 = p2statetype = A
trigger1 = p2movetype != A
trigger1 = random <= 300
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;[Statedef 440](足払いのステート)ではない時
trigger2 = movecontact
trigger2 = (movehit && p2bodydist X <= 48)|| p2statetype = A
trigger2 = random <= 500


対空技としては頼りないが、連続技ゆえダメージはカンフーアッパーより伸びるので使いたい
相手がp2movetype != Aのときかコンボ時に使うのならば多少は安全、しゃがんだ相手には当たらないので
そのように記述、またコンボではガードされるとめり込んで反撃確定なのでmovehitの時だけコンボさせる
ただし相手が空中にいるなら、上手く押し出せるのでガードヒット問わずコンボさせるという感じ

 

あとは記述の並べ替えで、置く位置を調整(優先度を低く)することで十分に機能するはず
(基本的な記述は強カンフーニーを参考にしているので、そちらの方も読んでほしい)

 

強カンフーニー

編集前

[State -1, 強カンフーニー]
type = ChangeState
value = 1060
triggerall = command = "FF_b"
trigger1 = var(1)

 
編集中

[State -1, 強カンフーニー]
type = ChangeState
value = 1060
triggerall = command = "FF_b"
trigger1 = statetype != A
trigger1 = ctrl
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;[Statedef 440](足払いのステート)ではない時
trigger2 = movecontact

 
編集後

;初段は空中なら距離80まで届く膝蹴り、高さは140まで届く、ただしめくりには弱い
;また地上で立ち状態の相手なら距離55まで届き、追加入力を含めればダメージは結構高い
[State -1, 強カンフーニー]
type = ChangeState
value = 1060
triggerall = roundstate = 2
triggerall = p2statetype != L
triggerall = p2bodydist X = [-10,80]
triggerall = p2bodydist Y >= -140
triggerall = p2statetype != C
trigger1 = statetype != A
trigger1 = ctrl
trigger1 = p2bodydist X >= 40
trigger1 = enemynear,vel Y < 5
trigger1 = (p2bodydist X <= 60 && p2bodydist Y <= -50)||(enemynear,vel X >= 0 &&(enemynear,vel Y < -5 ||(p2bodydist X > 60 && p2bodydist Y <= -80)))
trigger1 = p2statetype = A
trigger1 = p2movetype != A
trigger1 = random <= 300
trigger2 = (stateno = [200,299]) || (stateno = [400,499])
trigger2 = stateno != 440 ;[Statedef 440](足払いのステート)ではない時
trigger2 = movecontact
trigger2 = (movehit && p2bodydist X <= 55)|| p2statetype = A
trigger2 = random <= 500


飛距離も長く、ゲージ消費も無いのでそこそこ使える対空技。めくりには弱く無敵もないので
当然ながらカウンターでは使えない。なので相手が攻撃態勢ではないときに出すようにしてある
trigger1の「p2bodydist X >= 40」は「カンフーアッパー」の射程距離外のときに使うという意味
「カンフーアッパー」が当たる範囲なら、そちらを使ったほうが良いという判断、めくりへの対処にもなるし

 

triggerallに「p2statetype != C」を入れてあるのは、跳ぶ技ゆえしゃがんでいる相手には当たらないから
基本的に対空で使うので、p2statetype = Aでも良いのだが、地上でもmovehitした時には使うのならば
こうしておくと良いだろう。後は各トリガーで、使用する相手の状態を細かく指定してやれば良い

 

またtrigger1に「enemynear,vel Y < 5」を入れてあるのは、スマッシュカンフーアッパーがヒットした後の
落下中など、高速で落下している状態の相手に反応して、技を出してしまわないようにするためのもの
「enemynear,vel Y < -5」は、相手がある程度以上の速度で上昇中のときにという意味
相手がこちらの技の範囲(高度)に入って来ると予想して、それに合わせて技を出すことで当てる感じ

 

ちなみに速度の例としては、和訳KFMが一段ジャンプした際の着地寸前が約8強、一段ジャンプの頂点で
二段ジャンプした際の着地寸前で約11強、スマッシュカンフーアッパーがヒット後の落下の最高速で
約24~25くらいになっている。上昇中の速度のほうも、これらを参考に逆算できるだろう
(ちなみに和訳KFMが一段ジャンプした際、vel Y < -5(上昇中)のときは高さ50より低い位置にいて
 vel Y < 5(下降中)のときは高さ60より高い位置にいるような感じである、大雑把ではあるが)

 

「(p2bodydist X <= 60 && p2bodydist Y <= -50)」は、相手との距離が60以下であり高度50以上のときに
技を出し、「(p2bodydist X > 60 && p2bodydist Y <= -80)」は、相手との距離が60より離れていたら
高度80以上のときに技を出すという記述。斜め上に跳びつつ出す技なので、元々低空の相手には当てづらいが
飛距離が伸びるに連れて、さらに上昇してしまうので、出す距離と高度を二段階に分けて記述している
もっと細かく分けても良いかもしれないが手間がかかるし、飛距離があっても三段階程度で十分だと思う

 

そして「enemynear,vel X >= 0」は相手が後退していないときという意味、外すと隙の大きい技なので
技の届く距離の端のときや、相手のジャンプに合わせて出すとき、後ろジャンプでないことの確認に使っている
これらを括弧「()」や、「||」「&&」を用いて組み合わせることで、当たる確率を上げている感じ

 

ちなみにここまで記述が難しくなるのは、飛距離が長い上に無敵が無いからというのが大きい
無敵さえあれば相手の「p2movetype = A」に合わせて出すことで「相手が自身の技の当たる位置で攻撃態勢」
=「こちらの反撃も十分当たる位置である」という逆説により、簡単な記述でも当てる事ができるはず