分身

広義の意味

ぶんしん 【分身】
(1)一つの身体や、一つのものが、二つ以上に分かれること。また、その分かれ出たもの。
「主人公は作者の—だ」
「我国の神仏は…幾柱にも—して/当世書生気質(逍遥)」
(2)〔仏〕 仏や菩薩が衆生(しゆじよう)を教化するために慈悲によって種々の姿をとって出現すること。また、その姿。化身。
大辞林 第二版より

様々な分野で使われる言葉だが、格闘ゲーム界では忍者キャラが使う忍術「分身の術」で見かける事があるかと思われる。
この「分身の術」に限って説明すると、
  • 敵を騙す用途として、本体のみ攻撃可能な防御型(他は全て残像か幻)
  • 分裂した全ての分身が攻撃可能な攻撃型
の2種類に分けられる。しかし絵面的な問題のせいか、防御型の方は数が少なく、攻撃型の方が多く見受けられる。
実際にいた忍者なら、防御型かつ逃げるために使うだろうが(実際に出来るかどうかは、また別の問題)。


MUGENにおける分身

「馬鹿め!そっちは本体だ!」
キャラクター本体と同じ姿の「Helper」(ヘルパー)を「分身」と呼ぶ(ただ広義の意味だとスタンドも入る事がある)。
元々原作で分身を使う技を持つキャラや、製作者がきちんと意図して分身を出すキャラを作る事はある。
だが、そのつもりでは無いHelperが何らかの理由で分身になってしまうという事もあり、この場合「 分身バグ 」と呼ばれる。

「Helper」の外見がキャラ本体と同じになってしまうと、まず第一に「 見た目が非常に滑稽 」という問題がある。
「DestroySelf」が実行されない(つまり消えない)場合がほとんどで、そうなってしまうとそのラウンド中は雰囲気台無しといえるだろう。
問題はそこだけではない。このバグが起こったということは本来、その「Helper」が担当する筈の処理が完遂されなかったということなので、
その「Helper」が担当していた処理次第では、 どんなひどい不具合を招くか分からない という問題があるのだ。

この「分身バグ」は、「Helper」側が適正に「HitOverride」を使っていない場合や、
ちゃんと「HitOverride」を使っていても、「Helper」が直に「HitDef」を出しており、
なおかつ相手側が適切に「attr」を設定していない「ReversalDef」を使用した場合*1などに起こってしまう。
わかりやすい例 分身が無敵でない場合は試合にも影響する

よって防止するためには
  • 「Helper」には 必ず 「HitOverride」*2を使わせる。
  • 「Helper」には なるべく 直接「HitDef」を持たせない。
    JOJOキャラでスタンドを再現しようとしたりするとそうも言っていられなくなるのだが、それでも最低限に抑える努力はした方が良い*3
  • 「ReversalDef」で「P2StateNo」を使用するときは 必ず 「attr」を適切に設定する。
などが必須である。

また防止策だけでなく起こってしまった場合の対処として、コモンステートのどこかに
「IsHelper」をトリガーにして、「DestroySelf」や「ChangeState」を記述しておく事が推奨される。
これは「StateNo 0」や「StateNo 5120」など、投げ技を作る側が「SelfState」の移行先に選択しがちなステートに記述しておくのが望ましい。
一箇所でなく複数のステートに記述しておいても構わない。これにより、想定外のステートに移行し分身になってしまった「Helper」を、
任意で消滅させたり元の処理に復帰させたりできる。特に「Helper」に直接「HitDef」を持たせているキャラの場合、この記述の有用性が高い。

なお投げ技や当て身技を利用した側が、独自判断で投げ・当て身ステート内で「Helper」を消滅させることは推奨されない。
これは自由度の高いMUGENでは、例えばボーナスカンフーマンのように、あえて「Helper」に「HitOverride」をかけずに
投げ・当て身投げを受けつけるようにしているキャラも存在するからである。

「P2StateNo」、「TargetState」に関連した注意事項
  • -2ステートに「ChangeState」を記述すると相手にステートを奪われているときも作動してしまい、
    勝手に相手のcnsの該当ステートに移行してしまうという双方にとって予想外のことが起きかねません。
    記述の位置を-1ステート*4か-3ステートに移すと防止できます。
  • 着地の内部処理は「ChangeState」命令なので、ステートを奪っているときに着地の内部処理が割り込むと
    自分のcnsの52ステートに移行してしまうため、注意が必要です。「Physics = N」にして「VelMul」や「Gravity」で摩擦、重力処理するのが無難。
  • 「P2StateNo」、「TargetState」で指定したステートでは「VarSet」、「VarAdd」、「ParentVarSet」、「ParentVarAdd」を使わない
    (Var、FVar、SysVarの変更をしない)ようにしましょう。予期せぬ不具合の原因になります。これは公式のドキュメントにもある通り相手に大変失礼です。
  • 「P2StateNo」、「TargetState」で指定したステートで「NotHitBy」のSCAを使うときは「SelfState」までの流れを邪魔されないようにしましょう。
    無敵のまま固まって勝負がつかなくなる可能性があります。

豆知識
「P2StateNo」と一緒に「P2GetP1State = 0」を設定すると、相手のcnsの該当ステートに移行させることができます。
コモンステート以外では使い道が難しそうですが。

なお意図的に分身バグを発生させたネタ動画も存在するが、自分のMUGENで再現する際は自己責任で。
D4C
ちっけーね


*1 「HitOverride」は相手の「HitDef」および「ReversalDef」の「attr」を指定して使用するものなのだが、
その「attr」が未設定の「ReversalDef」に対しては指定のしようが無いためそうなってしまう。

*2 「ReversalDef」に「HitDef」を取られた同フレームは「ReversalDef」の仕様の為、「NotHitBy」等の効果が無効になる。
その為、「HitDef」を持つ「Helper」では「NotHitBy」を設定してあるからと適切な「HitOverride」の記述を怠ると分身を誘発させてしまう可能性がある。
(打撃と投げに無敵の「Helper」の飛び道具で相殺の為に飛び道具のみに「HitOverride」を設定していると、飛び道具を取れる「ReversalDef」で当て身投げされたときに「NotHitBy」等の無敵が無効になりタッグ等でその飛び道具に同時に重なっていた本来当たらないはずの打撃などが当たり分身してしまう)

*3 DOS版の頃にはそうではなかったのだが、Win版MUGENでは「Projectile」が
本体の「PalFX」の影響を受けるようになった。しかも 必ず である(「Explod」や「Helper」と違い「ownpal」を設定できない)。
なおMUGEN1.0でもこの「Projectile」が本体「PalFX」の影響を受ける問題は未解決のままである。
それを嫌ってかWin版MUGEN用のキャラでは、ただまっすぐ飛んでいくだけの波動拳程度の飛び道具でも
「Projectile」ではなく「HitDef」を持たせた「Helper」で作られている場合がある。
これは分身バグ回避のためも勿論だが、「Helper」では「projpriority」を設定できないなどの問題もあるので可能な限り避けた方が良い。
しかしMUGEN1.1では本体「PalFX」の影響を受ける問題は修正されている。
例えば悪咲氏のカプエスキャラに見られるような 「Projectile」に攻撃判定を担当させ、外見を「Helper」に担当させる という処理が、
一番手軽に見た目の良さと処理の安全性を両立させられるだろう。

*4 ちなみに「Helper」の場合に、-1ステートに置いてある記述を実行するためには「keyctrl」を1にする必要がある。
この場合「HelperType」が「Player」か「Normal」かは無関係である。