AIガードテンプレ

  • ガードステートについて  最終更新2011 6/16
これらはあくまでテンプレです。
必ずRandomやP2BodyDistなどのトリガーを用いて調整して下さい。
特にキャラのコンセプトなどに合わせることは重要だと思います。
あるいは紙装甲だからその分ガードを堅く・・・などといった配慮による調整もありますが。
けど立ち回りや切り返しなどがちゃんと出来ていたらあまり堅くなくても大丈夫な気はします。


『StateDef 120用ステート』

EnemyNear,HitDefAttr中心のステート

[屈み移行ステート]
TriggerAll = AIフラグON
TriggerAll = StateType != A
TriggerAll = Time > 0;ループ防止
Trigger1 = Enemy,NumProj > 0
Trigger2 = EnemyNear,HitDefAttr = C,AA,AP || EnemyNear,HitDefAttr = SC,AP
Trigger3 = EnemyNear,HitDefAttr = S,AA
Trigger3 = EnemyNear,Time <= *
Trigger3 = EnemyNear,Vel Y <= 0
Trigger4 = EnemyNear,StateType != S
Trigger4 = EnemyNear,HitDefAttr = S,AA
Trigger4 = EnemyNear,Time > *
Trigger4 = EnemyNear,Vel Y <= 0

[立ち移行ステート]
TriggerAll = AIフラグON
TriggerAll = StateType != A
TriggerAll = Time > 0;ループ防止
Trigger1 = EnemyNear,HitDefAttr = A,AA,AP
Trigger2 = EnemyNear,HitDefAttr = S,AA
Trigger2 = EnemyNear,Time > *
Trigger2 = EnemyNear,StateType = S
Trigger3 = EnemyNear,HitDefAttr = S,AA
Trigger3 = EnemyNear,Time <= *
Trigger3 = EnemyNear,Vel Y > 0
Trigger4 = EnemyNear,StateType != S
Trigger4 = EnemyNear,HitDefAttr = S,AA
Trigger4 = EnemyNear,Time > *
Trigger4 = EnemyNear,Vel Y > 0

あとはこれを各ステート(130~155)用に修正すればOK。
TriggerAll = Time > 0はループを防ぐため急遽入れました。

ただしこれはあくまで暫定なのでもっと変わっていくと思います。

P2StateType中心のステート

[屈み移行ステート]
TriggerAll = AIフラグON
TriggerAll = StateType != A
Trigger1 = P2StateType = A
Trigger1 = EnemyNear,Vel Y = 0
Trigger2 = P2StateType = C
Trigger3 = P2StateType = S
Trigger3 = EnemyNear,Time < *

[立ち移行ステート]
TriggerAll = AIフラグON
TriggerAll = StateType != A
Trigger1 = P2StateType = A
Trigger1 = EnemyNear,Vel Y != 0
Trigger2 = P2StateType = S
Trigger2 = EnemyNear,Time >= *

EnemyNear,HitDefAttrよりは簡易的になったがその分少しだけ対応できる攻撃が少なくなります。
まあ大して変わらないのですが。
これらのステートの補足説明はこちらで。

numhelperトリガーは相手が特殊ゲージやAI補助のヘルパーなどを起動していると常に成立するため、
ヘルパー飛び道具に対するトリガーとしては信頼できません。
またhitdefattr=SCA,APなどの飛び道具属性のhitdefトリガー検知は、projectileやヘルパー飛び道具に対しては反応しません。
projectileに対してはnumprojをトリガーを使い、ヘルパー飛び道具に対しては飛び道具検知ヘルパーを準備して下さい。


ついでにガード移行等のトリガーを

[空中移動投げ対策(このステートは実験段階ですが)]
Type = ChangeState
Value = 任意のステート
TriggerAll = AIフラグON
TriggerAll = Ctrl
TriggerAll = InGuardDist
Trigger1 = EnemyNear,Vel X > 0
Trigger1 = EnemyNear,HitDefAttr = A,AT
Trigger2 = Enemy,HitDefAttr = A,AT
Trigger2 = Enemy,Vel X > 0

[地上移動投げ対策(InGuardDistが有効なとき)]
Type = ChangeState
Value = 任意のステート 迎撃系がオススメ
TriggerAll = AIフラグON
TriggerAll = Ctrl
TriggerAll = InGuardDist
Trigger1 = EnemyNear,Vel X > 0
Trigger1 = EnemyNear,HitDefAttr = SC,AT
Trigger2 = Enemy,HitDefAttr = SC,AT
Trigger2 = Enemy,Vel X > 0

[地上移動投げ対策(InGuardDistが無効なとき)]
Type = ChangeState
Value = 任意のステート 回避系がオススメ
TriggerAll = AIフラグON
TriggerAll = Ctrl
TriggerAll = !InGuardDist
Trigger1 = EnemyNear,Vel X > 0
Trigger1 = EnemyNear,HitDefAttr = SC,AT
Trigger2 = Enemy,HitDefAttr = SC,AT
Trigger2 = Enemy,Vel X > 0

[ガード移行]
Type = ChangeState
Value = ガードステート
TriggerAll = AIフラグON
TriggerAll = Ctrl
Trigger1 = InGuardDist
Trigger2 = !InGuardDist
Trigger2 = Abs(P2Dist X) < 60
Trigger2 = EnemyNear,MoveType = A


裏周り対策をAbs(P2Dist X) < 60に変更しました。
InGuardDistの条件からしてP2Distの方が安定しそうなので。

2011/06/16
hitdefattrとnumprojを利用したトリガーから、InGuardDistトリガー単独に変更。
ヘルパー飛び道具に対しても問題なくガードできますが、
相手の技の発生フレームによって攻撃が刺さる可能性が全く異なるので、
timeや変数による確率の管理が必須になります。