「SC-/ReversalDef」の編集履歴(バックアップ)一覧に戻る

SC-/ReversalDef - (2013/06/20 (木) 22:09:52) のソース

戻る→[[ステートコントローラーの一覧]]
----
:※解説修正情報※|
●&font(12,b){2013-02-06:永続ターゲットについて少し追記}
●&font(12,b){2013-01-25:HitDefのStateTyp属性の補完について。}
●&font(12,b){2013-01-24:MoveTypeに依存しないことが判明}

----
*■ReversalDef【当て身投げ用攻撃判定定義】
:▼概要|
''自分の攻撃判定枠''と&b(){相手の[[HitDef>SC-/HitDef]]の指定された攻撃判定枠}とが重なった時にヒットさせる攻撃判定定義。
相手側の[[SC-/HitDef]]で指定された[[攻撃属性]]が合致した場合のみヒットする。
(※[[SC-/HitDef]]の他、Attrの指定された[[SC-/ReversalDef]]の相手にもヒットする。)
[[SC-/Projectile]]は対象外。仕様上HitDefとは併用できない。
ステートが移動するか、HitDefなどが実行されるまで定義は持続する。
オプションのP2StateNo(相手のステートを奪う)と合わせて当て身投げなどに用いられる。 
[[SC-/HitDef]]と異なり[[MoveType>T-/MoveType]]=Iでも機能する。
また相手のMovetypeがIであってもHitDefが実行されていれば機能する。
なおReversalDefに対する無敵は基本的に存在しない。(無いわけではない)
:攻撃定義|
通常攻撃定義:[[SC-/HitDef]]
当て身投げ用定義:[[SC-/ReversalDef]]
飛び道具射出:[[SC-/Projectile]]

:▼必須記述|
&b(){Reversal.Attr = (Attr文字列型)} ;[[攻撃属性]]を指定する
-指定方法は[[HitDef>SC-/HitDef]]のAttrと同様
-自分と相手で指定した属性同士が重なっている場合のみヒットする。
--自分も相手も含め、''攻撃属性にStateType属性の指定が無い場合ReversalDefはヒットしない''。
---ただしHitdefのStateType属性は一定条件で''補完される''ことがあり、その場合はヒットする。
--細かくは[[攻撃属性]]のページを参照。

:▼オプション|
-内約は[[HitDef>SC-/HitDef]]を参照
&b(){PauseTime = (自分側/Int型),(相手側/Int型) }
&b(){SparkNo = (ヒットエフェクト番号or-1 Int型) }
&b(){SparkXY = (ヒットエフェクト位置X/Int型),(Y/Int型) }
&b(){HitSound = (ヒット音声番号or-1 Int型) }
&b(){P1StateNo = (ヒット時に自分が飛ぶステート Int型) }
&b(){P2StateNo = (ヒット時に相手を引き込むステート Int型) }
-と、ステートコントローラー一覧のサイトには書かれている。
--ただ実際はこの他にも細かい数値は指定可能。
--''検証不足''だが、以下のオプションも使用可能。
&b(){ID = (Int型) };
Fall系(この他にも可能そう)
&b(){Fall = (bool型) };
&b(){Fall.recovery = (bool型) };
&b(){Fall.damage = (Int型) };
-なお''Damage''は使用不可。

----
**■Lv1-記述例・補足・注意点
:記述例|
[State a, ReversalDef]
Type = ReversalDef
Trigger1 = !time ;ステートを読み込んだ時点のみ
Reversal.Attr = SCA,AA ;攻撃属性指定:全ての打撃
PauseTime = 30,30 ;一時停止(30/60)秒
SparkNo = -1 ;ヒットエフェクト無し
HitSound = -1 ;ヒット音声無し
P1StateNo = 801 ;自分は801番ステートへ飛ぶ
P2StateNo = 805 ;相手を805番ステートへ引き込む
-打撃に対する当て身投げ。自分を801番へ相手を805番へ移動させる。

:補足|
-[[攻撃属性]]の扱いについて、細かくは該当のページを参照。
-攻撃としての優先度はHitDefよりも高く、ヒットすれば相手の攻撃はヒットしない。
--ReversalDefが出ていても自分の攻撃判定枠に相手のHitDefの攻撃枠が重ならないとヒットしない。
--仮にその状態で自分のくらい判定にのみ相手の攻撃判定が重なっていれば相手の攻撃のみヒットする。
--Projectileにはヒットしないため攻撃属性が合っていても、Projectileが一方的にヒットする。
-トリガーMoveReversedは''ReversalDefに取られた相手側''の情報。
--ReversalDefであたった場合はHitDef同様''MoveHit''が機能する。
-1キャラの中でHitDefとReversalDefはどちらかしか使えない。
--HitDefが既に発生している状態でReversalDefを発生させるとHitDefは消える。
--ReversalDefが発生している状態でHitDefを発生させるとReversalDefは消える。
---なおProjectileは別管理のため両立可能。
--またステートが変更された場合もReversalDefは消える。
-Movetypeには依存しないため事前にMoveType=Aを設定する必要はない。
--ただ慣例的にMovetype=Aであるほうが望ましい、かと。
-一度実行されるとステートが変更されるか、&br()[[SC-/HitDef]]か[[SC-/ReversalDef]]が新たに実行されるまで持続。
--一度の実行では''一人の相手には一回しか命中しない''。
--HitOnceが0の場合、別々の相手であれば同時でなくても''複数回命中する''。
---例:一度ReversalDefがヒットした後ステートを変更せず持続させた場合、&br()同じ相手にはReversalDefが機能せず、それ以外の相手にはヒットできる。

:注意点|
-ReversalDefで取得できるのはあくまで''HitDefに限り''、Projectileにはヒットしない。
--Hitdefがあり攻撃判定さえ重なれば''HitDef側がMovetype=Iであっても取れる''
-HitDefをもっているならHelperであってもステートを奪えてしまう。分身の危険があるため、基本的にAP(飛び道具)は指定する際はP2StateNoは使用しないほうが良い。
--尤も、Helperに使う攻撃属性のStatetype属性が空白であればReversalDefに当たらないが。
-ReversalDefにヒットした相手側のNotHitBy,HitByの無敵を全て消失させる処理を行なっている。
-P2StateNo系統についてはHitDefと同様の注意が必要
-ヒットした後のNotHitByの系統はReversalDefを置いているステートでも行ったほうがいいとのこと。
-Win版以前?ではP1StateNoによるステート移動時[[T-/PrevStateNo]]が更新されないバグがあるとのこと。
--1.0では修正されている、とのこと。

:Attr設定|
-実はAttr=[[攻撃属性]]を設定することが可能。
-ただし''Attrを指定したReversalDefは、属性が一致している相手のReversalDefがヒットする''。
-[[SC-/HitOverride]]による''P2StateNo指定攻撃の無効化''がReversalDefでも働くようになる。

//:AI制作時の注意点|
//-あれば

//----
//**■Lv2-細かいバグ回避
//注意点で書いたことを回避したい場合用。
//#endregion
----
**■Lv3-細かい応用
#region(■Lv3-飛び道具判定消し処理)
**■飛び道具判定消し処理
Helper型飛び道具にP2StateNoを指定してないReversalDefをヒットさせることで攻撃判定を打ち消す手法がある。
その際同時に味方側のHitDefの攻撃判定がそのHelper型飛び道具のくらい判定とも重なっていた場合、NotHitByなどを指定していても、Helper型飛び道具にHitDefの攻撃判定が命中することがある。
(ReversalDefでNotHitByの無敵が剥がれる→無敵が剥がれた所にHitDefが命中してしまう)
Helper側の注意点だがHitOverrideを全属性指定しておかないと通常のくらいステートへ行き分身となってしまう。

#endregion
#region(■Lv3-HitDefのキャンセル)
**■HitDefのキャンセル
HitDefそのものをキャンセルする方法は、Movetype!=Aにしたりステートを移動したりするのが基本だが、
Reversal.Attrを空にして実行することでもHitDefをキャンセルでき、自分の攻撃が一切命中しない状態にできる。
HitDefを更新を行い一定条件でキャンセルするといった処理用。
一応HitDefのHitFlagを空にしても同じようにできる、はず。
欠点として、後述している永続ターゲット状態になるため、Target系の細かい処理をしている場合は注意が必要。
HitDefのAttrを空にするほうが現実的。

#endregion
----
**■Lv-4-バグ応用
#region(■Lv4-永続ターゲット)
**■永続ターゲット
ReversalDefは相手側がMovetype!=Hの状態でもTargetを取ることができる仕様の関係のためか''ReversalDefが発生している間は相手のMovetypeがH以外であってもTargetを失わない''という処理になっている。しかもHitDefでTargetを取った後にReversalDefを出し続けてもTargetを保持できる。
この仕様が通称''永続ターゲットバグ''。
-HelperとTargetLifeAddなどと組み合わせて毒攻撃などを再現したりするのに利用される。
-欠点としてTargetを保持し続けてしまう関係上、画面に表示されるヒットカウントがリセットされない不具合も起きる。Targetを手放せばちゃんとリセットされるようになる。
-ちなみに相手がStateNo=5150(死亡ステート)に飛ばれてもTargetを保持できる。
--それどころかHelperをTargetとした際、相手Helperが消えてもTargetの関係は残る。
:※ただし|
-Reversal.Attrは,AAなど攻撃属性が必要かも?
-ステートを移動した場合はReversalDefが途切れる?ためか
--ステートを移動した時に相手が通常外れる状態ならTargetは外れる?

#endregion
//----
//**コメント
//細かい話し合い・確認が必要な場合に開放しましょう。
//#comment()
----