■リダイレクトについて


※解説修正情報※
2014-10-12:Targetのリダイレクト先について。Targetスロットの概念
2013-01-15:Targetのリダイレクト先について修正。
2013-01-14:Helperのリダイレクト先について修正。


トリガー情報の前につけることで指定した相手のトリガー情報を利用できる。
P2系との違いの解説も。

リダイレクトの種類
  • 大原則
    • リダイレクトの相手が存在しない場合、条件は上手く処理されない。(0)扱い?
    • デバッグ表示時エラーが流れるため 必ずリダイレクト相手を確認してから使用すること。
      • Triggerは一行ごとの参照のため、確認は前の行でNumXXX>0~1を行うこと。
    • リダイレクトのリダイレクトはできない。Enemy,Helper,XXXは不可。
  • ヘルパー専用
    • Parent,:ペアレント(親)。自分を射出したキャラを参照。Helperからの射出ならその親Helperを。
      • 親がHelperで既に消失していて存在しない場合エラーが流れるため注意。
      • 親自体の存在を参照するトリガー情報は存在しない。
    • Root,:ルート(管理者)。自分を管理しているプレイヤーキャラを参照。Helperからの射出でも本体を。
    • ParentとRootの違い。例えば本体からHelperA、AからHelperB、BからCを射出した場合、
      • 本体→A→B→Cの内、 ABCどれからも本体を参照するのがRoot,
      • Aから本体、BからA、CからBを参照するのがParent,
  • ヘルパーを
    • Helper(ヘルパーID),:指定したヘルパーIDを持つHelperを参照。
      • NumHelper(ヘルパーID)>0で数を確認してから使うこと。
      • 参照できるのは「自分側のHelper」に限る。
        • 一応、自分のHelperから他の自分のHelperを参照することは可能。
          • 本体が同じなら、Helperから射出されたHelperでも参照可能。
        • パートナーのHelperは参照できない。
      • なお該当Helperが複数ある場合は、その中で最もスロットIDの若いHelperを参照する。
  • 味方を
    • Partner,:タッグ時のパートナーを参照。
  • 相手を
    • Enemy,:相手を参照。()省略時は(0)と同様。
      • Enemy(0),:相手の中の1人目を参照。
      • Enemy(1),:相手の中の2人目を参照。
    • EnemyNear,:近くの相手を参照。()省略時は(0)と同様。
      • EnemyNear(0),:相手の中で(X軸基準の)一番近い相手を参照。
      • EnemyNEar(1),:相手の中で(X軸基準の)二番目に近い相手を参照。
    • (1)系の二人目認識はNumEnemy>1を確認して使うこと。
      • (0)用のNumEnemy>0は気にする必要はないがしてもよい。
      • 特殊な状況でなければEnemy(0),がいないことは無いが。
  • Targetを 詳しい仕様は該当ページを参照
    • Target,:攻撃を当てた相手を参照。
      • Target(ヒットID),:特定の攻撃を当てた相手を参照。
    • NumTarget>0、NumTarget(ヒットID)>0を確認して使うこと。
    • 該当するTargetが複数の場合
      • 参照先は基本「先にTargetを取った相手」を参照するが、厳密には異なる。
        • 実際はABCとTargetを取った後、ABがTargetから外れて、
          新しくDをTargetに取った場合、Target,で参照するのはDとなる
        • 詳しくはTargetのページ中程のTargetスロットについてを参照。
      • 同時ヒットの場合攻撃を当てた時点のGameTimeの奇数偶数
        スロットIDの若い方・大きい方どちらかが決まる。
      • 同時時:GetHitVar(Damage)反応時点で偶数ならスロットIDの若い方。奇数ならスロットIDの大きい方。
      • 同時の対象が3体以上いる場合、スロットIDの一番小さい方・一番大きい方以外は参照されない。
      • T-/MoveHit/T-/MoveGuardedなどヒット・ガードで処理が異なるものすべて、
        Target,で参照する側を基本として、もう片方側は反応しない
        • ヒットガードが同時でもTargetで参照する側がガードなら
          T-/MoveGuardedなどガード系のみ反応しT-/MoveHitなどヒット系は反応しない。
        • その際攻撃のPauseTime系もTargetで参照する側ヒットガードを基準とする。
    • またステートコントローラーのパラメータ内でTarget,リダイレクトを行うとフリーズすることがある。
      • Varに格納して直接パラメータ内への記述を避けることで回避できる。
  • 特定のキャラを
    • PlayerID(キャラID),:指定したキャラID(T-/ID)のキャラを参照。
    • キャラIDを指定できれば相手のHelperでも参照できる。

  • なお()内に入れる数字は数式・条件式などでも良い。


■Lv1-使用例・補足・注意点

記述例

[State 190, test]
Type = varset
TriggerAll = !time
Trigger1 = NumPartner > 0
Trigger1 = Partner,Name = "Apple"
Trigger2 = Enemy,Name = "Apple" || Enemy(NumEnemy>1),Name = "Apple"
var(12) = 1
;他のプレイヤーキャラの中に「Apple」というNameのキャラがいないかどうか。
;Trigger2はのEnemy(numenemy>1)は「相手が二人以上なら1=二人目へリダイレクト」の記述。
;相手が一人の場合は(NumEnemy>1)=0なのでEnemy(0),のリダイレクトになる。


Enemy系リダイレクトとP2系トリガー情報の違い
  • P2系トリガーの情報
  • 参照できる相手
    • Enemy系:Helperでないプレイヤーキャラに限る相手の状態に関わらず参照
    • P2系:プレイヤーキャラ加えHelperType=PlayerのHelperも含む最もX軸の近い相手を参照。
      • ただしP2系はStateNo=5150(死亡ステート)にいる相手を参照できない。
      • 反対にEnemy系は、相手が死んでいても参照してしまう為、制御する必要がある。
  • どっちがいいの?
    • P2系の利点:記述が簡素・Player型分身Helper相手にも対応できる
    • P2系の欠点:得られる情報が一部のみ・Player型Helperに誤作動する。
    • Enemy,利点:自分と同等の情報を得られる・Player型Helperに誤作動しない。
    • Enemy,欠点:記述・制御が面倒・Player型分身Helperに対応できない。
      • 簡素な仕組みを予定していればP2で構わない。
      • 参照を制御できるならEnemyNearを利用する方が良い。Dist系はP2でいいが。
      • Player型Helper極めて特殊な相手のため度外視しても基本的には問題ない。
  • なお、P2系は相手の情報を表示するが「自分のトリガー情報」のため、リダイレクトは使用可能。

ヘルパーからRoot,Perent,系リダイレクトをする際の注意点

(未確認)特殊な環境
  • (改造されたmugenなどで?)同時4人対4人での対戦では、
Enemy(2),やEnemy(3),のリダイレクトは機能するらしいが、
EnemyNear(x),は2~3(3~4人目)のリダイレクトは機能しないとのこと。


■Lv2-バグ回避


Parentの存在確認
エラー自体を確実に回避したい場合は同種HelperのHelperID個別管理を徹底しT-/NumHelperを用いる。
あるいは、消失する予定のHelperからHelperを射出しない、親が消失するHelperでParentを使わない。
エラーが流れても簡単かつ確実に回避したい場合はT-/IDを参照する。
「 Parent,ID > 0 」で親が存在していることを認識できる、はず。それがNum系の役割を果たす。
存在しない場合エラーは流れるが、Parent消失による不具合を抑えられる。


■Lv3-細かい技術


EnemyNear,リダイレクトの制御
準備:Varを1つ用意する。例では11を使用。実際には空きVarを利用すること。

[State -3, EnemyNear Alive];-3ステートに置く。
Type = varset
Trigger1 = 1
var(11) = ( NumEnemy > 1 && EnemyNear,Alive = 0 )
;相手が二人以上で一番近い相手が死んでいるなら(1)を、そうでないなら(0)を指定。
;EnemyNearをEnemynear(var(11)),とすることで、生きている一番近い相手を参照できる。



最終更新:2018年12月11日 21:22