「ステート奪取」の編集履歴(バックアップ)一覧に戻る

ステート奪取 - (2015/06/02 (火) 19:29:32) のソース

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

:基本的な仕様|
-ステートを奪取する方法は2通り
--1[[SC-/HitDef]][[SC-/Projectile]][[SC-/ReversalDef]]のオプション、&br()P2StateNo(P2GetP1State)を指定してヒットさせる。
--2[[Target]]を取った上で[[SC-/TargetState]]を実行する。
---どちらも最低HitDef、Projectile、ReversalDefのいずれかを命中させる必要がある。
-ステートを奪われている状態では[[常時監視ステート]]の内、-3と-1が読み込まれなくなる。
-ステート奪取で読み込ませるステートは通常のステートの処理と基本変わらない。
--ステート奪取をした状態で使用するステートコントローラーもある>[[SC-/ChangeAnim2]]
--くらい状態用の処理は[[Commonステート]]を見比べながら作ると良い。
-処理が終わったら相手に[[SC-/SelfState]]を実行させ、ステートを戻さなければならない。
--SelfState以外でもHitDefやProjectileを再度ヒットさせればステートは戻せる。

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

-なお''ステート奪取は最低限である方が望ましい''。
--自身の状態に合わせて挙動制御を調整したい場合は&b(){[[Target]]系ステコンを使用する}こと。
--ステートを読み込ませる相手側で制御しようとするのは、相手側の認識がズレると処理が不安定になる。
---[[リダイレクト]]は万能ではありません。

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

-加筆必要かも。

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


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

:ステート奪取をして相手を動かしている時、自分側でしてはならないこと。|
-ヒット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-/HitDef]]か[[SC-/Projectile]]を当てることでもステートを返せる。
--ただしこの手法はタッグ時などで味方の攻撃が当たる可能性もあり注意が必要。

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

:ステート奪取と[[SC-/TargetBind]]|
-下記している例を参照。
--[[SC-/TargetBind]]を受けている最中は、[[GetHitVar(IsBound)>T-/GetHitVar()]]が反応する。
--[[ステート奪取/制御-手動タイプ]]ではTargetBindの常時発動し、&br()GetHitVar(Isbound)でのつかみ確認をさせれば、&br()上手く掴めてない場合即時にステートを戻す処理を作れる。

----
**■Lv2-バグ回避

:上手くステートを奪えなかった・返せなかった場合用の対策|
-相手を掴めていないのに自分は掴んでいるつもり動いてしまう場合の対処
--相手を確実に掴んでいるステートから、NumTarget(xxx)=0&&Timeで立ちステートに戻る。
--相手に''ステートを返した後は戻さないように''注意。返す前である条件も追加すること。
-相手が掴まれている状態なのに自分が掴んだ状態でない場合の対処。
--相手に読み込ませるステート全てに、放置されている場合戻す処理を追加する。
#aa(){
[State a, error]
type = SelfState ;ステートを戻す
trigger1 = Time >= 300 ;5秒経過・動作が長い場合はもっと長く。短くしすぎないように注意。
value = 5050 ;汎用くらい吹っ飛びステートへ

}
-こうした記述を追記することで試合続行が不能になるのを防げる。
-[[SC-/TargetBind]]を毎フレーム指定している間であれば
#aa(){
[State a, error]
type = SelfState ;ステートを戻す
trigger1 = !GetHitVar(IsBound) ;相手がTargetBindを使用していない
value = 5050 ;汎用くらい吹っ飛びステートへ

}
-この記述でも可能。
--ただし最中[[SC-/TargetBind]]を発動し続けることが必要。
-なおNumTarget(xxx)>0などで改めて投げステートへ移動するのは&br()''タッグ時に不具合の起きる可能性が高い''ためNG。

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

//---
//**■Lv3-細かい応用・記述例
//複雑そうなので書いても基本簡単なの。
//
//----
//**■Lv4-バグ応用
//ステ抜けについて?
//


----