MUGEN State Controller

MUGENで良いキャラを作るポイントは… 「良いキャラのソースコードを読む」->「コピペ」->「記述を理解」->「自分でアレンジ」

Type = Helper

Helper > 飛び道具・分身・特殊ゲージ等のサポート | 実装されたバージョン: 2002.04.14 | 対象: 召喚


プレイヤー以外のキャラクターを出現させます。Helperが参照するステートを別に記述する必要がありますが、様々な動きが可能。複雑な動作の飛び道具・プレイヤーについて動き回るサポートキャラ特殊ゲージなどの特殊システム自分自身の分身などに利用します。

攻撃判定や当たり判定を持たせることが可能ですが、攻撃を喰らったり、当身をされた場合予期せぬステートに飛ぶことがあり、対策をしていないとプレイヤーの全く動かない分身が生まれてしまいます。

Helperは、プレイヤーとはシステムが独立しているため、変数・ヒットフラグ・ジャグルやターゲットなどは、ヘルパー固有のものとなります。Helperが消滅すると、ターゲットも存在しなくなるため、敵がのけぞり中でもコンボカウンターが途切れます。但し、消滅前に別キャラが攻撃を当てた場合や、別キャラのターゲットに対してヘルパーが攻撃した場合は、そのキャラのターゲットとして継続しますので、コンボカウンターは途切れません。

なお、全プレイヤーのHelper合計数には上限があり、初期設定は32個で最大56個まで増やせます。上限はmugen.cfgにて設定可能。設定数を超えるとHelperを射出できなくなります。

関連するステートコントローラー:
関連するトリガー: NumHelper


バージョンごとの変更点・バグ・エラー・仕様

内容
-Helperが射出したProjectileは、プレイヤーの管理。
Version1.0からPauseMoveTime-1を指定しても効果時間は永続にはなりません。
Version1.1からReMapPalが追加されました。
警告文NEGATIVE HELPER ID: IDに-1以下
警告文ILLEGAL HELPER STATENO: StateNoに-1以下
警告文ILLEGAL SUPERMOVETIME: SuperMoveTimeに-1以下(mugen1.0では警告文が出ないが機能していない)
警告文ILLEGAL PAUSEMOVETIME: PauseMoveTimeに-1以下(mugen1.0では警告文が出ないが機能していない)


パラメーター

HelperType = ヘルパーの種類 (文字列)

ヘルパーのタイプをNormalPlayerで選択します。

タイプ 詳細
Normal カメラはヘルパーを追いません。飛び道具等はこれを使います。
Player プレイヤーと同様自動で基本ステートを参照、カメラが追うなど、通常のプレイヤーと同じ扱いとなります。特殊な処理のため、基本的に使用は推奨できません。
Proj<英数字なら何でもOK> Normalと変わらない。使う意味なし?
省略時のデフォルト値: Normal
Name = "ヘルパー名" (文字列)

ヘルパーの名前を付けます。

Name(トリガー)による探知や判定枠表示(Ctrl+C)でのヘルパー判別に利用します。

選択可能な文字列: 英数字なら何でもOK
省略時のデフォルト値: "<ヘルパーを呼び出したキャラ名>"'s helper
関連するトリガー: Name

OwnPal = 独自パレットフラグ (0か1)

子が親と共通のパレットを持つか持たないか、フラグを指定します。

0で共通にした場合、親が燃えやられや金カラー(PalFX)で色に変化があると子も同様の変化を受けます。また、子でPalFXを使用しても有効になりません。特殊ゲージや飛び道具等、やられ演出の影響を受けたくない場合、1を指定しましょう。

パレット 効果
0 子は親と共通のパレットを持ちます。(子のPalFX無効)
1 子は独自のパレットを持ちます。(子のPalFX有効)
最小値: 0 , 最大値: 1
省略時のデフォルト値: 0
Size.XScale = 横縮尺 (浮動小数点数)

水平方向の縮尺

省略時のデフォルト値: ;親から継承

Size.YScale = 縮尺 (浮動小数点数)

垂直方向の縮尺

省略時のデフォルト値: ;親から継承

Size.Ground.Back = 前ぶつかり判定 (整数)

キャラクターの幅(後方、地上)を指定。

Nomalヘルパーは、ぶつかり判定がありませんので、気にする必要は、あまりありません。判定を持たせたい場合は、PlayerPushを使用します。

ちなみに、Ground.BackHeightまで、すべて0にした場合、PlayerPushでぶつかりを発生させても、相手をすり抜けるようになります。

省略時のデフォルト値: ;親から継承

Size.Ground.Front = 後ぶつかり判定 (整数)

キャラクターの幅(後方、地上)を指定。

Nomalヘルパーは、ぶつかり判定がありませんので、気にする必要は、あまりありません。判定を持たせたい場合は、PlayerPushを使用します。

ちなみに、Ground.BackHeightまで、すべて0にした場合、PlayerPushでぶつかりを発生させても、相手をすり抜けるようになります。

省略時のデフォルト値: ;親から継承

Size.Air.Back = 空中での前ぶつかり判定 (整数)

キャラクターの幅(後方、空中)を指定。

Nomalヘルパーは、ぶつかり判定がありませんので、気にする必要は、あまりありません。判定を持たせたい場合は、PlayerPushを使用します。

ちなみに、Ground.BackHeightまで、すべて0にした場合、PlayerPushでぶつかりを発生させても、相手をすり抜けるようになります。

省略時のデフォルト値: ;親から継承

Size.Air.Front = 空中での後ぶつかり判定 (整数)

キャラクターの幅(前方、空中)を指定。

Nomalヘルパーは、ぶつかり判定がありませんので、気にする必要は、あまりありません。判定を持たせたい場合は、PlayerPushを使用します。

ちなみに、Ground.BackHeightまで、すべて0にした場合、PlayerPushでぶつかりを発生させても、相手をすり抜けるようになります。

省略時のデフォルト値: ;親から継承

Size.Height = 縦ぶつかり判定 (整数)

キャラクターの高さを指定。

省略時のデフォルト値: ;親から継承
Size.Proj.DoScale = 飛び道具縮尺適用フラグ ()

XScale, YScaleの設定が発射物にも適用するかどうか(1で有効)

省略時のデフォルト値: ;親から継承
Size.Head.Pos = 頭の位置 (整数, 整数)

頭の大体の座標(BindToTarget使用時に必要)を指定。

省略時のデフォルト値: ;親から継承
Size.Mid.Pos = 体の中間の位置 (整数, 整数)

体中心の大体の座標(BindToTarget使用時に必要)を指定。

省略時のデフォルト値: ;親から継承
Size.ShadowOffset = 影の表示位置 (整数)

影の垂直方向オフセットを指定。

省略時のデフォルト値: ;親から継承

StateNo = ステート番号 (整数)

ヘルパーが参照するステート番号を指定。

省略すると立ちステートに飛ばされるので、基本的に省略することはほとんどない。

省略時のデフォルト値: 0 ;通常モーション
KeyCtrl = コントロールフラグ (0か1)

Helperがコマンド操作を受け取るかどうかを指定します。

フラグ 状態
0 Helper自身の[Command],Commandトリガー,[StateDef -1]が無効になる。
1 Helper自身の[Command],Commandトリガー,[StateDef -1]が有効になる。
省略時のデフォルト値: 0
ID = ヘルパーID (整数)

ヘルパーのIDを指定。

HelperリダイレクトやIsHelper・NumHelperトリガーで、ヘルパーの状態を取得したりする際に必要。プレイヤーID・ヒットIDとは別物なので注意。

省略時のデフォルト値: 0
Pos = x座標, y座標 (整数, 整数)

ヘルパーの初期出現位置を指定します。

最小値: -2147483647, -2147483647 , 最大値: 2147483647, 2147483647
省略時のデフォルト値: 0, 0
PosType = 基準点の位置 (文字列)

ヘルパーを出現させるための基準点(0,0)をどこにするか、以下の文字列から指定します。

タイプ 基準
P1

実行者が基準点(0,0)になります。X軸の正数は実行者の正面・Y軸の負数は実行者の頭上。

MUGEN PosType P1
P2

実行者に最も近い敵が基準点(0,0)になります。X軸の正数は最も近い敵の正面・Y軸の負数は最も近い敵の頭上。

MUGEN PosType P2
F

FはFrontの略。実行者の正面の画面端が基準点(0,0)になります。X軸の負数は基準点から実行者の方向・Y軸の負数は地面から上。

MUGEN PosType Front
B

BはBackの略。実行者の背面の画面端が基準点(0,0)になります。X軸の正数は基準点から実行者の方向・Y軸の負数は地面から上。

MUGEN PosType Back
L

LはLeftの略。画面左上が基準点(0,0)になります。X軸の正数は画面右方向・Y軸の正数は画面下方向。

MUGEN PosType Left
R

RはRightの略。画面右上が基準点(0,0)になります。X軸の負数は画面左方向・Y軸の正数は画面下方向。

MUGEN PosType Right
N

NはNoneの略。ステージ中央が基準点(0,0)になります。他のPosTypeと違い基準点は絶対に動きません。X軸は右方向が正数・左方向が負数。Y軸は上方向が負数・下方向が正数。

Version1.1から追加された値です。

MUGEN PosType None
省略時のデフォルト値: P1
Facing = ヘルパーの向き (整数)

ヘルパーの出現時の向きを指定。

タイプ 基準
1 PosTypeP1,F,Bの場合、実行者と同じ向き。P2の場合、実行者に1番近い敵と同じ向き。L,Rの場合、右。
-1 PosTypeP1,F,Bの場合、実行者と逆向き。P2の場合、実行者に1番近い敵と逆向き。L,Rの場合、左。
最小値: -1 , 最大値: 1
省略時のデフォルト値: 1
PauseMoveTime = Pause無視時間 (整数)

Pauseコントローラーの影響を無視する時間をフレーム単位で指定。

※60フレーム=1秒

最小値: 0 , 最大値: 2147483647
省略時のデフォルト値: 0
SuperMoveTime = SuperPause無視時間 (整数)

SuperPauseコントローラーの影響を無視する時間をフレーム単位で指定。

※60フレーム=1秒

最小値: 0 , 最大値: 2147483647
省略時のデフォルト値: 0
ReMapPal = dst_pal_grp, dst_pal_item (整数, 整数)

Forces a palette remap of the helper's indexed-color sprites to the specified palette. This parameter is used only if ownpal_flag is non-zero. If dst_pal_grp is -1, this parameter will be ignored.

省略時のデフォルト値: -1, 0
Persistent = HitPause無視時間 (整数)

Persistentの値をNに設定した場合、設定したステートコントローラーはNフレーム後にもう一度実行されます。0の場合、トリガーが成立しても1回しかステートコントローラーが実行されません。※トリガーは読み込みますが、パラメーターは完全に無視されます。

Persistentが管理されている配列が初期化される条件は、ステート処理開始(ChangeState,SelfState,TagOut,TagInなどでステート移動)でTime=0の場合に実行されます。また、初期化される個数が決まっており、10個のPersistentしか初期化されません。ですので、Persistentの多様やChangeStateでの使用は避けましょう。もし、特定のステートが実行されない場合は、この仕様を疑ったほうがいいかもしれません。

その他にも、var,fvar,sysvar変数は利用できない・常時ステート([StateDef -1],[StateDef -2],[StateDef -3])では、常にPersistent=1の状態・IgnoreHitPause=1が設定されていた場合、アドレスを書き換え(Alive偽装・Persistent偽装?など)・バージョンによる動作の違いなどバグが満載です。

結論、Persistentの値が0以外の場合は省略して、TriggerTimevarを使って管理した方がいいです。

最小値: 0 , 最大値: 128
省略時のデフォルト値: 1
IgnoreHitPause = HitPauseを無視フラグ (0か1)

IgnoreHitPauseの記述されたステートコントローラー処理がHitPause(ヒット停止時間)を無視して実行されます。基本的に1に設定しておくべきパラメーター。

パラメーター自身にvar,fvar,sysvar変数は利用できません。

攻撃を当てたり受けたりした時にVarSetしたり、Explodの演出をずれないようにしたり用途はさまざま。

最小値: 0 , 最大値: 1
省略時のデフォルト値: 0


省略した時のデフォルト値

  • [State ,Helper]
  • Type = Helper
  • Trigger1 = 1
  • HelperType = Normal
  • Name = "<ヘルパーを呼び出したキャラ名>"'s helper
  • OwnPal = 0
  • Size.XScale = ;親から継承
  • Size.YScale = ;親から継承
  • Size.Ground.Back = ;親から継承
  • Size.Ground.Front = ;親から継承
  • Size.Air.Back = ;親から継承
  • Size.Air.Front = ;親から継承
  • Size.Height = ;親から継承
  • Size.Proj.DoScale = ;親から継承
  • Size.Head.Pos = ;親から継承
  • Size.Mid.Pos = ;親から継承
  • Size.ShadowOffset = ;親から継承
  • StateNo = 0 ;通常モーション
  • KeyCtrl = 0
  • ID = 0
  • Pos = 0, 0
  • PosType = P1
  • Facing = 1
  • PauseMoveTime = 0
  • SuperMoveTime = 0
  • ReMapPal = -1, 0
  • Persistent = 1
  • IgnoreHitPause = 0


パラメーターの読み込み順

HelperType(?) => Name(?) => OwnPal(1) => Size.XScale(2) => Size.YScale(3) => Size.Ground.Back(4) => Size.Ground.Front(5) => Size.Air.Back(6) => Size.Air.Front(7) => Size.Height(8) => Size.Proj.DoScale(9) => Size.Head.Pos(10, 11) => Size.Mid.Pos(12, 13) => Size.ShadowOffset(14) => StateNo(15) => KeyCtrl((16->17)) => ID(18) => Pos(19, 20) => PosType(?) => Facing(21) => PauseMoveTime(22) => SuperMoveTime(23) => ReMapPal(?, ?) => Persistent(?) => IgnoreHitPause(?) =>


*バージョンや実行環境,パラーメーターの指定の仕方によって、読み込まれる順番が変わる可能性があります。参考程度なものだと思ってください。
 

コードサンプル

Helper分身バグ対策

コモンステートの[StateDef 0, 立ちステート]と[StateDef 5150, 死亡ステート]の最後に記述することで、分身したヘルパー自身が自分を消去します。

  • ; [StateDef 0]記述省略
  • [State 0]
  • Type = DestroySelf
  • Trigger1 = IsHelper
  • ; [StateDef 5150]記述省略
  • [State 5150]
  • Type = DestroySelf
  • Trigger1 = IsHelper


公開日:
最終更新日:
この記事は役に立ちましたか?
ご意見・ご要望はございますか?
記事を編集してみませんか?

問題点があればGithubTwittersuteadddayov@gmail.comにご報告下さい。また、ページ編集にご協力いただける方を募集しております。お気軽にご連絡下さい。Please report any problems to the Github · Twitter · suteadddayov@gmail.com. In addition, we are looking for the person who cooperate with page editing and translation. Please do not hesitate to contact me.