※解説修正情報※
2016-03-25:「Projectileの場合P2GetP1State=1(ステート奪取設定)でもHitOverrideに命中する・ステート奪取しない攻撃と同じ処理となる」
2015-09-28:ステート奪取時のcommandの扱いについての文言修正


■ステート奪取

相手に自分側のステートを読み込ませること・読み込ませている状態のこと。
投げ技の細かい動作やワイヤー吹っ飛び~壁バウンドなどを再現するために用いる。

基本的な仕様
  • ステートを奪取する方法は2通り
  • ステートを奪われている状態では常時監視ステートの内、-3と-1が読み込まれなくなる。
  • ステート奪取で読み込ませるステートは通常のステートの処理と基本変わらない。
    • ステート奪取をした状態で使用するステートコントローラーもある>SC-/ChangeAnim2
    • くらい状態用の処理はCommonステートを見比べながら作ると良い。
  • 処理が終わったら相手にSC-/SelfStateを実行させ、ステートを戻さなければならない。
    • SelfState以外でもHitDefやProjectileを再度ヒットさせればステートは戻せる。

基本
  • ステート奪取の方式は大きく2種類ある。
    • 投げ技・ロック技ステート奪取/制御-手動タイプ
      • ステートを奪ったら自分も専用ステートへ移行しTargetStateなどで相手を操作するタイプ。
      • 相手側に読み込ませるステートは最低限、アニメ表示を切り替える程度でもいい。
    • ワイヤー吹っ飛び・特殊やられステート奪取/制御-自動タイプ
      • ステートを奪った後は細かいTargetStateなどをせず読み込ませるステートだけで動くタイプ。
      • 相手に読み込ませるステートが複雑化しやすいが、仕様上自分側が自由に動けるようにできる。

  • なおステート奪取は最低限である方が望ましい
    • 自身の状態に合わせて挙動制御を調整したい場合はTarget系ステコンを使用すること。
    • ステートを読み込ませる相手側で制御しようとするのは、相手側の認識がズレると処理が不安定になる。


■Lv1-注意点

ステート奪取の最中には「やってはならないこと」があり、
それをしてしまうとうまく処理をできないこともある。

  • 加筆必要かも。

P2StateNo(P2GetP1State)とTargetStateの違い
  • 攻撃のP2StateNo指定(正しくはP2GetP1State=1指定)の場合
    • ヒットした時点でステートを奪う。※内部処理としては汎用くらいステートへ飛んだ後に変更※
    • ヒットしている・していない相手を区別する。
    • ただしSC-/HitOverrideを発揮する対象にはSC-/HitDefの攻撃自体が当たらない
      • ちなみにSC-/Projectileによる攻撃の場合はステート奪取をしない攻撃と同じ処理になって命中するが、
        ※処理の関係上バグを誘発しやすいためProjectileでP2StateNoは基本使うべきでない
  • SC-/TargetStateの場合
    • 最速でヒットした直後のフレームでステートを奪う
    • ヒットしている・していない相手を区別できない
    • SC-/HitOverrideを発揮した相手はTargetを取れていないため不可。
      • 攻撃自体はヒットする。
P1StateNoの相打ちバグ
P2StateNo指定同士で相打ちした場合は自動で戻すようにしておけば問題ないが
P1StateNoが絡んだ相打ちは非常に危険であるため、P1StateNoを指定する場合は
SC-/HitDefPriorityはMissかDogeにすること。
  • P2StateNo指定を受けると相手側のステートを読み込むわけだが、
    • P1StateNo指定している技でその攻撃と相打ちしてしまうと
      P1StateNoで指定した番号の、相手側のステートを読み込もうとする
    • 存在しないステートを読み込むどころか技のステートを読み込む可能性もあり、
      Varが変更される可能性もあるなど非常に危険
  • 安全策をとるならP1StateNoを使わずに、SC-/ChangeStateを使う手段もある。
    • とはいえ確実には相手の状態を確認できないため、基本P1StateNoの方が良い。
      • 処理上でヒット・ガード同時の時にT-/MoveHitは反応しないがヒットしている場合もあるため。
      • ヒット・ガード同時でも、ヒットさえしていればP1StateNoは機能する。
  • なおSC-/ReversalDefは相打ちの危険はないため気にしなくても良い


ステート奪取をした側で、読み込ませるステートでしてはならないこと
  • 多くありますが「移動させる」「体力を減らす」だけならほとんど問題ない。
    • 相手を移動させる・体力を減らす以上のことをすると途端に怪しくなる。
  • Varを変更すること。
  • ChangeAnimで存在しないAnimを表示させること。必須アニメのみを指定すること。
  • ChangeAnim2で存在しないスプライトを表示させる。必須スプライトのみを指定すること。
  • CtrlSetでCtrl=1にすること。
  • ChangeStateでステートを返そうとすること。返せてません。次の処理に移行するCSなら可。
  • HelperやProjectile、Explod系のステートコントローラー・トリガー情報全て。
    • 汎用エフェクトを表示させたい場合はGameMakeAnimを使用する。
  • Pause、SuperPause
  • HitOVerrideを実行する。
  • 不安定なトリガー情報を条件に用いること。Varなどは論外。
  • 相手を戻す時、Common系以外へ戻す。
  • 相手をHitPauseの最中に返す?
  • Command="recovery"以外の[[T-/Command]]を指定すること。
    • コマンドの仕様上recovery以外は処理が安定しない。
    • ステートを奪った側の方で判定するので問題なく動くが、
      例外としてrecoveryは奪われた側の設定コマンドも機能する。
  • 以下グレーゾーン しないほうがいいかもしれない・注意が必要
    • 最中に相手のMovetypeをH以外にする。あるいはStateNo=5150へ飛ばす。
      • Targetが外れてしまう。完全に手放すタイミングならセーフ。
    • DestroySelfをかけること。分身対処で使われるケースもありますが。
    • 自分側でScreenboundを実行しScreenboundを使わず○○EdgeDist<xx条件を用いること。
      • どちらかが画面を固定しないとステージの横幅によってはどこまでも飛んでいく危険がある。
    • StateTypeをL(倒れ)に設定すること。
      • 倒れの特殊な無敵や、追撃関係で不具合がでる可能性があるとのこと。
      • 倒れ待機へしたい時、5100か5070を経由させずに5110などに相手を戻すことも。
        • その場合ダウン追い打ちに対する防御力上昇が機能しない。
    • リダイレクトやP2系トリガー情報を重要な要素に用いること。
      • 用いる場合は対象が本当に自分であるか確認させなければならない。
      • T-/Name系・T-/NumTargetT-/StateNoなど組み合わせて確認。
ステート奪取をされている側でしてはならないこと
  •  -2ステートで状態が変化するステートコントローラーを実行すること全般。
    • 特殊システムの処理以外は-3ステートに移すこと。
  • 位置が移動してしまうステートコントローラー
    • Pos系 Vel系 Pause系 Turn Width Screenboundなど
  • 状態が変化してしまうステートコントローラー
    • CtrlSet StateTypeSet ChangeState SelfState HitOverride
    • HitDef ReversalDef
    • 特にChangeStateは論外。奪われた状態で相手側の指定したステートを読み込んでしまう。
    • ステートを自分で取り戻すSelfStateは別名ステート抜け。通常やってはならない。
  • 状態で認識を行うトリガー情報も使用不可。
    • 代表例はStateNoやAnim。必ずしも自分側の番号ではないため。
      • T-/Commandも相手側の判定を基準とするため正常に作動しない。
    • なおHelperからリダイレクトRoot,などで本体を参照させている場合は常に注意が必要。
      • 特にステートを奪われている本体へリダイレクトでT-/Commandを参照するのはNG。
        コマンドの判定が不安定になっているため正常に処理できない。

ステート奪取をして相手を動かしている時、自分側でしてはならないこと。
  • ヒットIDを指定せず、TargetStateなどを使用すること。
    • タッグなどの場合ステートを奪う技が当たらなかった方も奪えてしまうことがあるため。
    • ヒット・ガードが同時だった場合についてはTargetのページを参照。
  • 相手へのリダイレクトに、Targetリダイレクトに合わせないこと。
    • NearEnemy,などのみで処理する場合、相手に位置によって状態が変化してしまう。
  • LifeAddやPowerAddで減らしつづけLife<xxxやPower<xxxといった条件。
    • LifeやPowerが変化する相手の場合、処理が安定しない。Time>xxなどの保険が必要。
  • Screenboundを使わず○○EdgeDist<xxで壁際を確認する条件。
    • ステージの横幅が非常に長い場合、延々と待ち続けることになるため。
    • TimeなどでScreenboundを実行するなどの保険が必要。

相手をSC-/SelfStateで返すステート
  • 地上状態へ:0(立ち),11(屈み),51(空中) ※空中以外、必ずCtrl=1オプションを付ける
  • 空中ふっとびへ:5035,5050
  • 倒れバウンド:5100  ※着地エフェクトが起きる。
  • 倒れ待機:5081  ※着地エフェクトを抑制したい場合。
  • 起き上がり:5120
  • 受身:5200,5210
  • 殺害系:5150
    • ※相手を空中ふっとびなどへ戻す場合攻撃自体のFall系パラメータを記述しておくこと
    • ※戻った後の挙動は攻撃で設定された数値を認識するため
  • なおSelfState以外でも
    • 相手にSC-/HitDefSC-/Projectileを当てることでもステートを返せる。
    • ただしこの手法はタッグ時などで味方の攻撃が当たる可能性もあり注意が必要。

※バグ:ChangeStateとCtrl
  • もし相手をSC-/ChangeStateのCtrl=1で待機ステートの戻したりした場合
    • -1ステートを読み込まないため、mugen側のCtrl=1での動作のみ可能
    • mugen側のCtrl=1での動作についてはCommonステートを参照
      • つまり移動することしかできない。
  • またSC-/SelfStateへ待機ステートへ戻したとしてもCtrl=0が無い場合、
    • 基本的にその状態から動くことができない無防備な状態となる。

ステート奪取とSC-/TargetBind


■Lv2-バグ回避


上手くステートを奪えなかった・返せなかった場合用の対策
  • 相手を掴めていないのに自分は掴んでいるつもり動いてしまう場合の対処
    • 相手を確実に掴んでいるステートから、NumTarget(xxx)=0&&Timeで立ちステートに戻る。
    • 相手にステートを返した後は戻さないように注意。返す前である条件も追加すること。
  • 相手が掴まれている状態なのに自分が掴んだ状態でない場合の対処。
    • 相手に読み込ませるステート全てに、放置されている場合戻す処理を追加する。

[State a, error]
type = SelfState ;ステートを戻す
trigger1 = Time >= 300 ;5秒経過・動作が長い場合はもっと長く。短くしすぎないように注意。
value = 5050 ;汎用くらい吹っ飛びステートへ

  • こうした記述を追記することで試合続行が不能になるのを防げる。
  • SC-/TargetBindを毎フレーム指定している間であれば

[State a, error]
type = SelfState ;ステートを戻す
trigger1 = !GetHitVar(IsBound) ;相手がTargetBindを使用していない
value = 5050 ;汎用くらい吹っ飛びステートへ

  • この記述でも可能。
  • なおNumTarget(xxx)>0などで改めて投げステートへ移動するのは
    タッグ時に不具合の起きる可能性が高いためNG。

ガード・ヒット同時のTargetState制御について
  • TargetのページのLv3を参照