p2Name

P2nameとは、敵の情報を参照して結果を返すトリガーの一つで、「P2」「name」
即ち「最も近い敵*1」の「名前(表示上のではなく内部的な)」を参照するためのトリガーである。
当然ながら敵が一体の時は、距離に関しては意味が無くなる。
P2と言うと、P2distなどのトリガーではhelpertypeがplayerになっているヘルパーもその対象となるのだが、
このトリガーの対象はあくまで敵本体に限定され、敵ヘルパーには適用されない。
本体かヘルパーかを判別する場合は『!IsHelper』(本体)、『IsHelper』(ヘルパー)で判別し、永続ターゲット等ではこの記述が必須となる。
記述の形式は以下の通り。ダブルクオートで名前を囲むのを忘れずに。
trigger1 = P2name = "Kung Fu Man"

類似のトリガーに自分自身の名前を参照するP1nameというトリガーがある。
これはP1を省略しNameと記述しても同じ役割のトリガーとして使用可能。
滅多に使わないトリガーだが、投げ技などの敵を処理することを想定したstateでは使い道がある。
また、敵の情報を参照するための「Enemy,」「Enemynear,Name」や、
パートナーの情報を参照するための「Partner,」と組み合わせた使い方が可能。

trigger1 = Enemy(0),Name = "Kung Fu Man"
あるいは
trigger1 = Enemynear(0),Name = "Kung Fu Man"
このように記述した場合、P2nameを使った記述と近い意味になる。ただし近いだけで違いはある(詳しくは後述)。
上記例の、Enemy(0),やEnemynear(0),の(0)とは「一番目」を意味し、この場合前者なら「『一番目』の『敵』=『敵リーダー』」、
後者なら「『近さ』で『一番目』の『敵』」という意味。
Enemy(1),なら「『二番目』の『敵』=『敵サブ』」、Enemynear(1),なら「『近さ』で『二番目』の『敵』」である。
Enemy(0),はEnemy,と、Enemynear(0),はEnemynear,と記述した場合と意味は完全に同じで、無駄に文字数がかさむので省略することが多い。
この記事でも以降(0)は省略する。
ただし、(0)をvar変数を利用して臨機応変に対応する手法があり、
Enemynear(0),をEnemynear(var(XX)),という記述を用いれば生死の判定を自動判別でき、特にAIのタッグ戦で効果を発揮する。

直近の相手が生きているか既に死んでいるかを判別する記述は、-2ステートに以下の記述を入れると簡単に生死自動判別式が作れる。
; タッグ用生死判別式(敵が一人だけ、もしくは直近の敵が生きている場合)
[State -2]
Type = VarSet
TriggerAll = !IsHelper
Trigger1 = NumEnemy = 1
Trigger2 = NumEnemy = 2
Trigger2 = RoundState = 2
Trigger2 = EnemyNear(0),Life > 0 || EnemyNear(0),Alive
Trigger3 = RoundState != 2
v = XX
Value = 0
;相手が一人だけの時、もしくは二人いて直近の相手が生きている場合。即ち自動的にEnemyNear(0),となる記述。
;なお原則的にEnemyNear(1),となるのは相手が二人いることが絶対条件であるため、それ以外は基本的にEnemyNear(0),となる。

; タッグ用生死判別式(敵が二人いる時)
[State -2]
Type = VarSet
TriggerAll = !IsHelper
Trigger1 = NumEnemy = 2
Trigger1 = RoundState = 2
Trigger1 = EnemyNear(0),Life <= 0 || !EnemyNear(0),Alive
v = XX
Value = 1
;相手が二人いて直近の相手が死んでいる場合。即ち自動的にEnemyNear(1),となる記述。
;上記同様、相手が二人いる事によって初めて適用されるため、それ以外は常時EnemyNear(0),となる。

これを1つ入れておくだけで、後述するNumEnemy=2を各々項目毎に記述する煩わしさを解消できる。

チーム戦用に、パートナーの名前を参照するP3nameと、
敵側のパートナーの名前を参照するP4nameというトリガーもある。
P3NamePartner,Nameの記述で代用しても意味はほぼ同じである。
しかし、P4NameEnemynear(1),Nameで代用すると、P2nameの時と同じでやはり違いがある。

それぞれのトリガーの意味の詳細

  • 本人の名前(生死不問):P1Name または Name
  • パートナーの名前(生死不問):P3Name または Partner,Name
                                                      (ただし、Partner,Nameの方はパートナー不在時に使用するとエラーメッセージが出るので、
                                                          単体では用いず、NumPartnerと併用するのが基本となる)
  • 生存中の一番近い敵の名前:P2Name
  • 生存中の二番目に近い敵の名前:P4Name
  • 敵側のチームリーダーの名前(生死不問):Enemy,Name
  • 敵側のサブメンバーの名前(生死不問):Enemy(1),Name
                                                                     (ただし敵側のパートナー不在時に使用すると上記同様エラーメッセージが出るので、NumEnemy>=2と併用)
  • 一番近い敵の名前(生死不問):Enemynear,Name
  • 二番目に近い敵の名前(生死不問):Enemynear(1),Name
                                                              (ただし敵側のパートナー不在時に使用すると上記同様エラーメッセージが出るので、NumEnemy>=2と併用)
P2NameとP4Nameは敵の生存が関わり、他はそうではないのが少々複雑である。
例えばすぐ側にKO済みの敵が倒れていて、遠くにもう一人生きた敵がいるという状況でP2nameを使うと
「遠いが生きている敵」を、Enemynear,Nameだと「死んでいるが近い敵」の名前を参照することになる。
なお、敵が二人共死んでいる状況ではP2nameではそのどちらの名前も参照できなくなる。

特に勝利デモを搭載しているキャラで倒した相手が該当する特定キャラであった場合、
P2Nameだと倒した相手(即ちAlive=0)を認識できず、専用台詞が表示されない。
ただしタイムオーバー等の判定勝ちであった場合、相手はAlive=1の状態であるためP2Nameで相手を認識できるが、
どちらにしてもこのように生死が関わる状況では、EnemyNear,NameもしくはEnemy,Nameを使った方が無難である。

このように案外細かな違いがあるので、チーム戦での敵の判別ではきちんと使い分けた方が良い。
ここで一つ例を挙げてみると、『北斗の拳』に登場するジャギ究極奥義である「今は悪魔が微笑む時代なんだ!」は、
シン専用の技であるが、
Trigger1 = Enemy,Name = "Shin"
この記述では「シンが敵側リーダーであれば発動可能」という意味になる。この場合シンの生死や近さは不問。
これを「敵側にシンがいればリーダーか否か不問で発動可能」にしたいなら、
Trigger1 = Enemy,Name = "Shin";←1人目(リーダー)の名前
Trigger2 = NumEnemy = 2;←後述
Trigger2 = Enemy(1),Name = "Shin";←2人目(サブ)の名前
このように記述すれば良い。

また、「一番近い敵が生きたシンならばリーダーか否か問わず発動可能」としたければ、
Trigger1 = P2Name = "Shin"
こうである。

「NumEnemy = 2」や「NumPartner」について

前者は相手が2人いることを判別するトリガー、後者はパートナーがいることを判別するトリガーとなっており、
これを入れないと相手が1人だけの場合や相方不在の場合にデバッグエラーメッセージが延々と表示されてしまうのを防止する。
しかし使い勝手が非常に悪く、下記の記述では正しく機能しないので注意。

  • 間違った記述例その1
Trigger1 = NumEnemy = 2 && Enemy(1),Name = "Shin";←同一行に纏めるのは×

  • 間違った記述例その2
Trigger1 = Enemy(1),Name = "Shin";←こちらを上の行に記述して、
Trigger1 = NumEnemy = 2;←こちらを下の行に記述するのも×

パートナーに関するPartner,Nameも全く同じことでNumPartnerが必須であり、
Trigger1 = NumPartner
Trigger1 = Partner,Name = "Shin"
↑これが正しいのだが、
Trigger1 = NumPartner && Partner,Name = "Shin"
↑この記述(同一行纏め)や、
Trigger1 = Partner,Name = "Shin"
Trigger1 = NumPartner
↑この記述(優先順位逆)はNGとなる。

なお上記のvar変数を利用した生死自動判別式を用いていれば-2ステート内で常時NumEnemy=2を監視しているため、各々項目に記述する必要は無い。
これは最新版であるMUGEN1.1であっても例外なく、この記述順番は絶対厳守しなければならない。

このように、違いを知っていれば立場、距離、生死の条件を組み合わせることが可能である。
もう少し複雑に「敵側リーダーがシンで、そのリーダー側のシンが生きており、かつ生存中の敵の中では自分に一番近い場合に発動可能」
としたい場合はどうするか。
Triggerall = Enemy,Name = "Shin"
Triggerall = Enemy,Alive = 1
Trigger1 = Enemynear,id = Enemy,id
Trigger2 = NumEnemy = 2
Trigger2 = Enemy(1),Alive = 0
そこまで複雑になるとName系のトリガーだけでは無理で、このように他のトリガーも組み合わせることになるだろう。

上記の生死自動判別式を用いて「敵側のどちらかがシンで、そのシンが生きており、かつ生存中に発動可能」としたい場合はどうするか。
Trigger1 = EnemyNear(var(XX)),Name = "Shin"
Trigger1 = EnemyNear(var(XX)),Alive = 1
;var(XX)=0の時は直近1番目の敵が生きているシン(=P2Name="Shin"と同等)となり、
;var(XX)=1の時は直近1番目の敵がシン以外の別キャラの遺体が転がっている状態で、2番目を生きているシンと自動判断(=P4Name="Shin"と同等)する。

なおこれらName系のトリガーは、どれも「完全一致するか」のみを見て(ただし大文字と小文字の区別は無い)、
真(1)か偽(0)かを返すだけで「○○を含む」などの使い方は不可能、と少々使い勝手が悪い。

ちなみにキャラの名前ではなく製作者名を参照するAuthorNameというトリガーもある。
Nameと同じで普通に使うと自分自身がその対象だが、これもやはり「Enemy,AuthorName」や、
「Partner,AuthorName」とすることで対象を指定して、製作者の名前を問うことが可能。

また、敵の名前以外の情報を参照するためのトリガー(例えばP2LifeやP2StateNoや製作者名のAuthorNameなど)には、
P3、P4用のものは無いのだが、これも「Partner,」や「Enemy,」と組み合わせて工夫すれば色々と参照できる。
特にP4の場合は上記の生死自動判別式を用いた方が色々と対処できる。
上の説明で用いたEnemy,Aliveもその一種である。

P3NamePartner,Nameはほぼ同じであると先述しているが、
こちらも状況次第で使い分ける必要性が僅かながらある。
Trigger1 = !NumPartner || (NumPartner && Partner,Name = "Shin")
;このような記述をする場合、意味としては「パートナーが不在」、または「パートナーがシン」の場合を示しているのだが、この記述だと同一行纏めになるのでエラーが出てしまう。

Trigger1 = !NumPartner || (NumPartner && P3Name = "Shin")
;このように同一行纏めにする場合は「Partner,Name」ではなく「P3Name」とすることでエラー表示を回避できる。

なお4人制タッグの場合は敵側の3人目をEnemy(2),もしくはEnemyNear(2),、敵側の4人目をEnemy(3),もしくはEnemyNear(3),と記述することになる他、
NumEnemy=3もしくはNumEnemy=4といった記述となる。
またパートナーの2人目(自チーム3人目)をPartner(1),3人目(自チーム4人目)をPartner(2),と各々記述することとなるが、
Enemy(2),やPartner(1),といった記述は本来使う事を想定したトリガーでは無いため、色々と問題がある。


これらのトリガーは主に特殊イントロ特殊やられ、あるいは勝利演出等に用いられる。

また、更にP2statenoを用いて組み合わせることで、特定の相手の特定の行動に対して特定の対応をさせたり、
能力を付加させることも可能。
例として、
  • 特定相手時の攻防、パワー、ライフの増減。
  • 反射攻撃を予め登録しておき、特定相手の飛び道具と同様の形状の飛び道具を返す。
  • 特定相手の飛び道具をダッシュで無効化できるようにする等。
  • 特定相手に挑発された時、自分のパワーを減らす。もしくは増やす。
  • 特定相手との条件成立で特殊な動作をさせる(シエルアルクェイド・ブリュンスタッドのクロスカウンターやELLA等の組み手など)。
  • 通常時と特定相手時で違う技演出をさせる
    レイ一撃必殺奥義ユダもしくはマミヤに喰らわせた時、ケンシロウの一撃をハート様またはシンに喰らわせた時など)。
  • 勝利デモを搭載しているキャラで該当する相手の場合に(ボコボコにされた)敗北グラフィックを表示させる。
などなど。
他に特殊な用途でP2nameを使用している場合もある。
並キャラが所謂神キャラと称される凶悪系キャラと対戦する場合、そういった対策の一環として用いられる場合がある。
ただし、根本的にランク違いであるため、大会等では無差別級にでもしない限りこういう組み合わせは有り得ないが…。

また、MUGENには性別を判別できる項目が無いのだが、このP2nameを使用して相手キャラの性別を擬似的に判別することができる。
…が、男とも女とも取れるNameにはフルネームやAuthorNameを組み合わせる必要がある
(例:まこと(Makoto)溝口誠(ファイターズヒストリー)(男)、まこと(ストリートファイターIII)(女)、菊地真(アイドルマスター)(女))。
ゆ~とはる氏のサイトに性別別にまとめたP2name一覧が公開されているので、男女で演出が変わる要素などがあった場合に利用してみるのもいいかもしれない。
大まかに男女別、年齢別(子供、大人、老人)、種族別(人間、吸血鬼、ロボット・アンドロイド)など。
ただし、メスケモ系など外見が人間に近いキャラ以外のマイリトルポニーのキャラ達(何れも♀≒女性)は一時対象外となっていたが、
現在は女性キャラとして認識するように修正されている。ただしこの修正以降は人間か否かは区別しないとのこと。

AI時においては、㍻㌢氏のAI説明書で有名になってきている、中段攻撃対応、瞬獄殺対応、グレイズできるキャラの飛び道具対応、
アーマーキャラ相手の対応等、様々なバリエーションを持たせることができる。
上手くいくとかなりシステムの格差が激しい組み合わせのAI戦も魅力的に見せることができるのだが、
元々この手の個別対策というのは、かつて製作者らの間では可能なのは分かりきっていても、敢えて手を出さないようにされてきた領域だったりする。
そんな経緯から(今のようなAI同士の対戦の場合であっても)あまり好まないという人もいる。
これは結構デリケートな問題なので注意しよう。


特殊イントロにせよAIにせよ、P2nameで指定する相手側のキャラが更新されると、
それまでの記述では通用しなくなることがある。
それを避けるためには事前に相手側の製作者に連絡を取って了承を得ておくのがいい。
上手く使えばキャラの魅力を引き出し得る重要なトリガーである。


ちなみにありそうで無かったのがステージの名前を参照するトリガーである。
キャラセレの後ステージを選ぶ時、その設定しているステージ名が表示されるが、WinMUGENには試合中これを参照するトリガーが存在しない。
このため特定ステージのみ使用可能な技を持つキャラなどがWinMUGENでは再現ができない。
例:バルログの金網よじ登りジャンプ、マグニートー(『X-COTA』)やユンヤン両者共2nd以前)のホームステージ限定の特殊イントロ
サウザーのホームステージ限定の一撃必殺奥義演出など。
…が、新バージョンMUGENにてとうとうステージを参照するトリガーが追加されたので、
このような技も新バージョンMUGENでならば追加可能となった。


*1
X軸のみでY軸の距離は無視される。また敵に前後から挟まれている場合には前方の敵が若干優先される。


最終更新:2022年11月26日 09:37