p2Name

「p2Name」の編集履歴(バックアップ)一覧に戻る

p2Name - (2020/06/06 (土) 12:52:32) のソース

//&bold(){[[キム>キム・カッファン]]のCNSファイルにp2name登録されていないキャラとの対戦時のイントロ}
//#image(キムVSテリー.png,width=160,title=未登録キャラとの対戦時イントロはコレ。「いくぞぉッ!」)
//&bold(){キムのCNSファイルにp2name登録されているキャラとの対戦時のイントロ}
//#image(キムVS悪.png,width=160,title=「悪は許さんッ!!」)
//
//画像は一例です
//
//画像の削除やCOは絶対にしないでください。なお、無断削除はどんな理由であれ、悪意ある愚民の荒らし行為と変わりません。
//↑一方的にコメントアウトを削除してる時点でそちら側も荒らしです。これ以上の議論は談話室orスレへどうぞ
//一方的な削除を再び行った場合このページの編集凍結などもありえますので。
//
//
// 現在、編集合戦が発生してますが、
// 必要派も不要派も編集の意図・正当性をキチンと伝えておらず、お互いに編集の正当性が薄い状態です。
// 編集時にコメントアウトにて編集の意図を書き、意思の疎通を取る事を提案します。
// (片方がキチンと説明して、もう片方が問答無用であれば、
//  どちらが荒らしかハッキリしますし。)
// あと、編集合戦を談話室に持ち込むのはやめてください。他の談話を阻害する原因となります。
//
//
//
// で、ここからは一個人としての意見ですが、
// 自分は「画像は必要だが今の画像は微妙」かと。
// p2nameの利用例を図解で示す事自体は問題ないでしょうし、
// サイズの問題は、横並びにするなり縮小するなりで修正可能です。
// ただ、現在の参照画像がどこがどう違うのか分かり辛く、
// 加えて、特殊イントロは別項目として存在するのに、参照画像が特殊イントロであり、被ります。
// そのあたりを改良できればいいのではないかな、と。
//
//私はトリガーの説明に画像なんかいらないと思う。だってトリガーなんて工夫次第でなんにでも使うものだよ。しかも内部的に。画像で説明するもんでもないと思う。
//
&b(){P2name}とは、敵の情報を参照して結果を返すトリガーの一つで、&b(){「P2」}の&b(){「name」}、
即ち「最も近い敵&link_anchor(*1){*1}」の「名前(表示上のではなく内部的な)」を参照するためのトリガーである。
当然ながら敵が一体の時は、距離に関しては意味が無くなる。
P2と言うと、P2distなどのトリガーではhelpertypeがplayerになっているヘルパーもその対象となるのだが、
このトリガーの対象はあくまで敵本体に限定され、敵ヘルパーには適用されない。
本体かヘルパーかを判別する場合は『!IsHelper』(本体)、『IsHelper』(ヘルパー)で判別し、[[永続ターゲット>オメガトムハンクスキラー]]等ではこの記述が必須となる。
記述の形式は以下の通り。ダブルクオートで名前を囲むのを忘れずに。
>trigger1 = P2name = "Kung Fu Man"
//上の画像の場合はこのようにすると良い
//>trigger1 = P2name = "Rera"

類似のトリガーに自分自身の名前を参照する&b(){P1name}というトリガーがある。
これはP1を省略し&b(){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),となる記述。

>; タッグ用生死判別式(敵が二人いる時)
>[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),となる記述。

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

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

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

特に[[勝利デモ]]を搭載しているキャラで倒した相手が該当する特定キャラであった場合、
P2Nameだと倒した相手(即ちAlive=0)を認識できず、専用台詞が表示されない。
ただしタイムオーバー等の判定勝ちであった場合、相手はAlive=1の状態であるためP2Nameで相手を認識できるが、
どちらにしてもこのように&b(){生死が関わる状況}では、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>新バージョンmugenについて]]であっても例外なくこの記述順番は絶対厳守しなければならない。

このように、違いを知っていれば立場、距離、生死の条件を組み合わせることが可能である。
もう少し複雑に「敵側リーダーがシンで、そのリーダー側のシンが生きており、かつ生存中の敵の中では自分に一番近い場合に発動可能」
としたい場合はどうするか。
>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)かを返すだけで「○○を含む」などの使い方は不可能、と少々使い勝手が悪い。

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

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

なお[[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]]等の組み手など)。
-通常時と特定相手時で違う技演出をさせる&br()([[レイ]]の[[一撃必殺奥義>テーレッテー]]を[[ユダ]]もしくは[[マミヤ]]に喰らわせた時、[[ケンシロウ]]の一撃を[[ハート様]]または[[シン>シン(北斗の拳)]]に喰らわせた時など)。
などなど。

他に特殊な用途でP2nameを使用している場合もある。
並キャラが所謂神キャラと称される凶悪系キャラと対戦する場合、そういった対策の一環として用いられる場合がある。
ただし、根本的にランク違いであるため、大会等では&b(){「無差別級」}にでもしない限りこういう組み合わせは有り得ないが…。

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

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


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

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

----
&aname(*1,option=nolink){&color(red){*1}} 
X軸のみでY軸の距離は無視される。また敵に前後から挟まれている場合には前方の敵が若干優先される。

//アーマーキャラ相手の対応等、様々なバリエーションを持たせることが出来る。これで一部の[[AI殺し]]にも対抗できる。
//しかしP2Name使っただけでは無理なAI殺しな攻撃もある。
//当然、設定したキャラ以外には意味をなさないので注意。
//[[ダン]]の挑発伝説に対抗して挑発繰り返させるとかそんなことも可能だぜ!
//
//p2nameは上記のように、キャラの行動や魅力を引き出す重要なトリガーであるということを認識しておこう。
//(p2nameによるキャラへの個別対策は「ずるい」「卑怯」だという印象を持ってる人も居るが、
//戦闘の広がりやバリエーションやAI殺しの対策を持たせるためには欠かせないものだということは忘れずに。
//ただ勝つためだけに設定するものではないのだ。容量、用法は正しくご使用ください。) 
//内容の大部分が上の文章に含まれてるのでコメントアウトしたままでOK。そもそも個人的な「オススメの使い方」を書くページじゃあないし。
//
//使用例:
// trigger1 = p2Name = "kfm"
//
//
//;相手が一定のキャラだったら対策フラグ(var(11))をオン
//
//[State -3];リセット これがないと下記を満たしたときそれ以降解除されない
//type = varset
//trigger1 = 1
//var(11) = 0
//
//[State -3];弾幕キャラ
//type = varset
//triggerAll=!var(11)
//trigger1 = p2Name="waki"
//trigger2 = p2Name="yandere"
//trigger3 = p2Name="thief"
//trigger4 = p2Name="magaki"
//trigger5 = p2Name="paddocyo"
//trigger6 = p2Name="chugoku"
//trigger7 = p2Name="moyashi"
//trigger8 = p2Name="remirya"
//trigger9 = p2Name="⑨"
//trigger10= p2Name="myon"
//trigger11= p2Name="dreamcast"
//trigger12= p2Name="syaseimaru"
//trigger13= p2Name="Misae Nohara"
//trigger14= p2Name="mimasama"
//trigger15= p2Name="zun"
//var(11) = 1
//
//;相手が一定のキャラである行動したら対策フラグ(var(12))をオン
//
//[State -3];リセット これがないと下記を満たしたときそれ以降解除されない
//type = varset
//trigger1 = 1
//var(12) = 0
//
//[State -3];全画面攻撃
//Type = varset
//TriggerAll=!var(12)
//Trigger1 = P2Name="orochi"
//Trigger1 = P2StateNo=3000;無に還ろう
//Trigger2 = P2Name="magaki"
//Trigger2 = P2StateNo=3000;ワキガ
//Trigger3 = P2Name="mukai"
//Trigger3 = P2StateNo=3000;全体石化
//Trigger4 = P2Name="mizuchi"
//Trigger4 = P2StateNo=3000;混
//Trigger5 = P2Name="Ciel"
//Trigger5 = P2StateNo=2000;ヘブンズ
//var(12) = 1
----