+
|
■ガードとヒットが同時に起こった場合のTargetState制御 |
■ガードとヒットが同時に起こった場合のTargetState制御
最中に細かくTargetStateしない+単発用
※完全ではなく、あくまでそれらしく制御できる記述です。
※TargetStateで壁バウンドをさせる技など用。
※長く持続する技だとうまくいかないことがある。
- 飛ばすステートの調整
- 相手を制御するステートの前に【ガード確認ステート】を作りそちらへ飛ばす
[StateDef XXX];ガード確認ステート Type = U ;変更しない MoveType = U ;変更しない Physics = U ;変更しない sprpriority = -1 Ctrl = 0
[State XXX, PosFreeze];保険 Type = PosFreeze Trigger1 = 1 IgnorehitPause = 1
[State XXX, nothitby];保険2 Type = NotHitBy Trigger1 = 1 value = SCA IgnorehitPause = 1
[State XXX, SelfState];相手をガードステートへ戻す type = SelfState Trigger1 = PrevSTateNo = [120,159] ;ガード最中からTargetStateされたか value = 150 + 2*(StateType=C) + 4*(StateType=A) IgnorehitPause = 1
[State XXX, ChangeAnim];相手に専用Animを表示させる場合は、ChangeAnim2で type = ChangeAnim; 2 Trigger1 = 1 value = 5000 IgnorehitPause = 1
[State XXX, ChangeState];相手を制御するステートへ飛ばす Type = ChangeSTate Trigger1 = HitShakeOver value = XXXX ;■←相手を制御するステート番号に IgnorehitPause = 1
- 上記のステートを介することで、ガードしていた場合にガードステートへ戻してしまう。
- TargetStateの記述を調整する
- 上記のガード確認ステートへ飛ばすためのTargetステートも調整する。
[State XXXX, TargetSTate] Type = targetState Trigger1 = Numtarget(XXXX) Trigger1 = MoveContact = 1 Trigger1 =(Target(XXXX),StateNo!=[150,159])||NumTarget(XXXX) > 1 ;相手ガードでないor相手二人以上 ID = XXXX value = XXXX ;■ガード確認ステートへ Persistent = 0 ;処理一度のみ Ignorehitpause = 1
- これだけだと時間差を置いてヒットした場合うまく制御できないので、
- HitDefをNumTarget(XXXX)&&NumTarget(XXXX+1)=0で更新するようにし、
- HitDefのID=XXXX+(NumTarget(XXXX)>0)、NoChainID=XXXXという風に調整を行い。
[State XXXX, TargetSTate 2];2回目用 Type = targetState Trigger1 = Numtarget(XXXX+1) Trigger1 = MoveContact = 1 Trigger1 =(Target(XXXX+1),StateNo!=[150,159])||NumTarget(XXXX+1) > 1 ;相手ガードでないor相手二人以上 ID = XXXX+1 value = XXXX ;■ガード確認ステートへ Persistent = 0 ;処理一度のみ Ignorehitpause = 1
- 2回目用のTargetStateを追記する。
- 性能との上手い兼ね合いができない場合は諦めよう。
- 例えば攻撃判定がガード硬直より長い場合、ガードへ戻した相手のガードが解けた後にもヒットしてしまう。
- ガード可能な技からTargetStateを使いガードした方のTargetのみをふるい落としたい場合・まとめ
- 以下の処理をしっかり整えれば二段型は不要、かもしれない。
- ( Target,GetHitVar(Guarded)=0 && MoveGuarded > 0 )の場合はTargetStateの前に、TargetDropを行う。
- >同時ヒットかつ、ターゲット2人目がガードしている。TargetDropで2人目を放棄する。
- ( TArget,GetHitVar(Guarded)=1 && numTarget = 1 )の場合はTargetStateを発動せず、TargetDropを行う。
- >連続ヒット時の処理を調整するため、可能な限り素早く手放したほうが良い。
- ( NumTarget > 1 && Target,GetHitVar(Guarded) = 1 )の場合は振り分けへTargetStateさせた後、ガードした側の硬直が解けるまで待つ。
- >Target,リダイレクトの相手はくらい状態以外になればTargetから外れる。それ以外に確実な放棄方法は無い。
- >ガード単体の場合即時放せば『ガード・ヒット同時かつ、ガードが1人目』という状態である。
- 追加でTargetStateを発動させるタイプの場合、ガード側のTargetは確実に手放したい。
- 自分がAヒット・Bガードの後に、相方がBヒットさせるとTarget奪い合いが発生してしまう。
- 追加でTargetStateする=自分側が無敵で待機なので「ガード側もガード硬直終了まで無敵にする」か、あるいは「ガード硬直自体を無くしてしまう」とするほうが良い。
- どちらかと言えば後者推奨。相方のガードに対する超必殺技などを防げるので。
- ガード可能な技からTargetStateを使いガードした方のTargetのみをふるい落としたい場合・草案メモ
基本は同じ方法で相手をガードで戻しガードが解けるのを待つ。
ガードがとければTargetは消えるので、それから本来のTargetStateを読みこせればいい。
またTargetStateを繰り返し用いる場合はガード確認ステートのHiiOverでChangeStateする処理は必要はない。
- ※検証不足※他のTargetがいるとTargetの喪失が上手く行われない可能性がある。
- SC-/TargetDropのexcludeIDを利用することで、一人に限り残せる。
- NumTarget>1で、Target,GetHitVar(Guarded)=0(Target相手がガード中でない)と
- Enemy,GetHitVar(Guarded)||Enemy(NumEnemy>1),GetHitVar(Guarded)(相手にガード有り)を条件に、
- 該当IDのTargetDropをTargetStateの直下に置くと「1ヒット・2ガード」のずっと残るパターンを解除できる。
- 3人以上に関しては制御しきれない。
- 「1ガード・2ヒット」は1がmovetype!=Hになれば勝手に解除されるが、硬直が長いと処理に支障がでる。
- 自分側が放しても相方が相手を固め続けたりすると、解けずにTargetが保持されてしまう。
- どうしても処理を安定させたいなら、NotHitByをTime=硬直時間分発生させるか、
ガード硬直そのものをなくしてすぐMoveType=Iに戻すと安定させやすい。- ID指定すれば相方のガード固め~による弊害は考えなくていい確率で、
よほど特殊な状態でなければガード硬直が溶ける時間分待つだけでいいかも。
- ただし同キャラで同じ技を使った場合TargetStateで奪い合いになってしまうため、TargetStateでのガード振り分けを行うつかみ投げは不向き。
- 中段・下段の技で先に相手片方のステートを奪い、相方が残りの相手のステートを奪った場合、そのTargetState奪い合いの状態になってしまう。
- ただその場合、自分側のステートは無敵状態で待機わけなので、ガードしてる側に硬直分のNotHitByを付け加えて放せば、奪い合いにはならない。相方の追撃ができなくなるけど。
|