※解説修正情報※
2017-03-25:P2getP1Stateの処理について
2016-05-13:OffSetはFloat型の数値をそのまま入れるとエラーで落ちる。ただし例外有り?
2015-11-07:Proj***Bound系について追記
2014-10-18:ProjPriorityとProjHitsの関係性・相殺打ち消し計算が判明
2014-10-18:ProjPriorityについて検証。またProj相殺処理はProjくらい判定同士で発生する模様
2014-10-13:Scale処理について間違っていた。
2014-10-11:PauseTime設定やProjHits・ProjMissTimeに関して。・HitDefとの性質の違いについて
2013-06-20:P2getP1Stateの処理について


※検証の足りない部分が多々ありますので、使用する際は検証しつつ使いましょう

■Projectile【飛び道具を発射する】

▼概要
飛び道具「Projectile」の射出を行う。「Proj」と略される。
SC-/HitDefとほぼ同様の攻撃定義を持ったアニメを発射する。
射出後はパラメーターに従って残存・消失する。
アニメを用意すれば基本HitDefの定義へProj用のパラメータを入れるだけで使える。
なお本体のT-/MoveTypeは影響しないが、、基本的にMovetype=Aでなければならない。
上限数
またProjはキャラ毎の総数に上限があり、それを超えると射出できなくなる。
限数はmugen.cfgで設定。
SC-/ExplodSC-/Helperと異なりプレイヤー毎の総数?
Proj関連
個数:T-/NumProjT-/NumProjID()
命中:T-/ProjContactT-/ProjHitT-/ProjGuarded
命中後時間:T-/ProjContactTime()T-/ProjHitTime()T-/ProjGuardedTime()
相殺後時間:T-/ProjCancelTime()

▼必須記述
  • パラメーター指定がなくてもエラー無し。
  • ただし攻撃用に使用する場合はSC-/HitDefと同じ指定は必要。

▼オプション
  • 攻撃定義:SC-/HitDefとほぼ同じ方式で記述する。
    • PauseTimeの自分側は本体に影響を与えず、Projのみが停止するため0が望ましい。
      • 停止中は「複数ヒットの処理」が停止される。アニメ処理や消滅処理は停止中でも行われる。
    • Juggle値はAir.Juggleで指定する。本体のJuggle値設定は無関係?
    • なおSC-/HitDef同様、実行時点のパラメータのみが有効。
    • AffectTeamで味方に当たる設定でも、管理キャラ自体には命中しない
    • Hitonce(単一ヒット設定)は機能しない?
ProjID = (Int型);Proj系トリガー情報に用いるID。HitIDとは異なる。
射出位置
PosType = (文字列);表示の基準点。Offset=0,0とする場所。
  • P1:実行するキャラの座標。 省略時P1
  • P2:P2相手の座標。(P2相手についてはリダイレクト参照)
  • F:Front:キャラの前の画面端,地面。
  • B:Back:キャラの後ろの画面端,地面。
  • L:Left:画面自体の左端,地面。
  • R:Right:画面自体の右端,地面。
    • Front,Back,Left,Rightは頭文字だけで識別?スペルミスしていても動く。
    • F,B,L,Rは全て地上の高さを基準として設定している
    • 向きは常にキャラの向きが基準となる。
Offset = (X座標Float型), (Y座標Float型);発射座標 省略時0,0
  • 座標指定パラメータはPosではなくOffset。間違えないように。
  • Float型の数値をそのまま入れるとエラー落ちする模様。数値入力ではInt型望ましいかも。
    • ※記述を工夫すると例外的にFloat型を使うことができるみたい?
      • 「Int型+Float型」など数式にして、数式の最初の数値をInt型にする。(例:10+0.13)
      • Flaot型のトリガー情報を記述する。([FVar()]を含む)
        • 以上の書式にするとFloat型を使ってもエラーで落ちることも、エラーが流れる事も無い模様?
移動速度
Velocity = (X速度Float型), (Y速度Float型);速度 省略時0,0(静止)
Accel = (X加速度Float型), (Y加速度Float型);加速度 省略時0,0(無変化)
VelMul = (X速倍率Float型), (Y速倍率Float型);速度倍率 省略時1,1(無変化)
  • 速度の基準の向きはPosTypeの基準と同じ(向き基準)
  • 速度がアニメの向きを制御し常に左右の進行方向へ向く
    • ただしAccelの値は射出時点の基準の向きで処理をする。
  • Proj自体の移動速度。出現時点から移動する?
    • Accelは出現時点ではかからない?
    • 攻撃判定は動いた跡に行われる。フレーム処理参照
RemVlocity = (X速度Float型), (Y速度Float型);Remove時点の速度
  • 消失時点で上書き設定される速度 省略時0,0(停止)
アニメ系
ProjAnim = (Int型);基本アニメ 省略時0
  • くらい判定がある場合、ProjやHitFlag=Pによる相殺が可能になる。
    • Proj同士の相殺はくらい判定同士の重なりで発生する。攻撃判定は不要。
      • ※Projのくらい判定はCtrl+Cでは表示されないため確認には注意。
      • 攻撃処理とは別でAttrにP属性を指定しなくてもProj同士である場合は相殺・打ち消しは発生する。
    • HitDefによる打ち消しはHitDefの攻撃判定→Projのくらい判定によって成立する。
      • ただし同時にProj攻撃判定がhtidef側へ命中する場合、Proj命中が優先され打ち消しが起きない
ProjHitAnim = (Int型);ヒット消滅時アニメ 省略時-1(無)
ProjRemAnim = (Int型);条件消失時アニメ 省略時HitAnimと同一
ProjCancelAnim = (Int型);相殺時アニメ 省略時RemAnimと同一
  • 複数ヒットする設定の場合、消滅するヒットの時のみProjHitAnimに変化する
  • 「RemAnim」の条件はProjRemoveTimeやBound系の適応消失時。
    • ちなみにRemAnimに攻撃判定があると基本同様ヒットするらしい?
ProjScale = (X縮尺Flaot型), (Y縮尺Float型);表示スプライトの縮尺指定。省略時1,1
  • この設定では判定枠の大きさは変化しない
  • File-/CNSファイルのサイズ設定、Proj.DoScale設定を基準とした倍率を指定する。
    • 親サイズが2,2でもProj.DoScaleが0の場合は1,1を基準とし、ProjScale=2,2なら通常から2倍の表示。
    • 親サイズが2,2でProj.DoScaleが1だと2,2を基準とし、ProjScale=2,2なら通常から2☓2の4倍の表示に。
    • SC-/Helperが親の場合、Helperの設定を基準とする。(省略時、その親と同じ)
ProjSprPriority = (Int型);アニメ表示優先度 省略時:3
特殊効果
ProjShadow = (赤Int型), (緑Int型), (青Int型);影設定 省略時0,0,0(影無し)
  • -1設定でステージ依存、255,255,255で真っ黒に。
消失関係
ProjRemove = (bool型);ヒット時の消失フラグ 省略時:1(ヒットで消失)
  • 1の場合はProjHitsの残り回数が0になると消失する。
ProjRemoveTime = (Int型);消失までの時間
ProjHits = (Int型);ヒットする数 省略時:1
  • ヒットカウント数ではなく、連続ヒットする回数
    • ヒットカウント数はSC-/Hitdef同様NumHitsを使う。
    • ヒットカウントではなくヒット回数での管理のため、複数相手でも指定回数ヒット。
    • 複数の相手に同時に命中すればProjHitsの数値より多いヒットカウントになるが、
      個別に命中した場合は合計で設定値の回数分しか命中しない。
  • ヒット回数の他、ProjPriorityの打ち消し・相殺の処理にも関係する。
ProjMissTime = (Int型);連続ヒット制限 省略時:1?(毎フレーム)
  • ProjHitsの数が2以上の場合、ヒット毎の間隔を指定する。
    • 10とすれば一度命中した後、10F後2回目が命中する。
    • Pausetimeの自分側が設定されているなら自身のPausetime停止が終わった後から数える
      • Pausetimeが10,xでProjMisstimeが5とした場合、命中してから15F後に命中する。
      • 相手が複数居ても待ち時間は変わらない。当てた相手に当たるようになるまで他には当たらない。
  • ステコン一覧では省略時0(一度に全ヒット)とあるが少なくともWin版は1扱い。
ProjPriority = (Int型);飛び道具の強度・優先度 省略時:1
  • Proj同士での相殺の耐性値B。ProjHitsも耐久値に関わる。
    • SC-/HitDefでのProjへの攻撃はProjPriorityに関係なくProj命中かProj打ち消しとなる。
    • 詳しい打ち消し処理については後述
消失関係・範囲
ProjEdgeBound = (Int型);画面外射程 省略時:40
  • 表示している画面の端からさらに指定値分外にでると消滅する。
    • 画面端の広さ設定は考慮しない。表示のまま。
ProjHeightBound = (上空Int型),(地面Int型);画面上下射程
  • 省略時:-240,1 (空中-240、地面下1まで)
    • 指定範囲の外側へ向けた速度があり、指定範囲の外側に居ると消滅する。
      • つまり上側の範囲外では上向きの速度がある場合、
        下側範囲外なら下向き速度がある場合に消滅する。
      • 範囲外でも上側の範囲外で下向きの速度、下の範囲外で上向き速度では消えない。
ProjStageBound = (Int型);ステージ外射程 省略時:40
  • 外向きの速度をもって、カメラの動ける端からさらに指定値分外側に出ると消滅する。
    • ステージの外側にいても、速度がステージ内側へ向いてるなら消滅しない。
    • 画面端の広さ設定は考慮しない。ほぼ表示のまま。
  • 座標について詳しくは該当ページを参照。
  • ※ProjEdgeBound(カメラ外)は速度に関係なく、外側へ出た時に消滅する。
  • ※ProjHeightBound (ステージ上下)、ProjStageBound (ステージ左右)は
    外側に出ていてかつ外側へ向けた速度がある場合に消滅する。
Pause無視系・MoveTime
SuperMoveTime = (Int型);SC-/SuperPauseを始動から指定フレーム中だけ無視
PauseMoveTime = (Int型);SC-/Pauseを始動から指定フレーム中だけ無視
  • いずれも省略時は0、一切無視をしない。
    • 親キャラ(本体)にMoveTimeが無い場合、MoveTimeが有っても動けない
  • ただし射出時点のフレームはMoveTimeに関わらず動く。※MoveTimeの分とは別計算?
  • MoveTimeの影響時間はPause中の経過でなく射出からの時間
    • SuperMoveTime=120の場合、射出から約2秒間のみ影響を受けない。
    • 120設定なら射出から2秒以上経っている場合は影響を受ける。
その他
SC-/AfterImageパラメータの全て ステコン一覧には書かれていないが指定可能。
AfterImage.Time = (Int型);AfterImageのTIme値 省略時:0
AfterImage.#### = ####;AfterImageの####値。
  • AfterImage.####でSC-/AfterImageの設定項目を指定するとAftarimage(残像)を表示できる。
  • SC-/AfterImageのPalBright値なら、AfterImage.PalBright=XX,XX,XXという感じ。
    • なお、残像はProjが存在している間のみ有効。消失すると残像も全て即時消滅する。
    • 消滅時に表示消しつつ残像を一定時間残したい場合は、消滅アニメに無表示アニメを指定すると良い。


■Lv1-記述例・補足・注意点

記述例
[State 1200, Projectile]
Type = Projectile ;HitDef
Trigger1 = AnimElem = 4
;HitDef用のパラメータを記述する。
;以下、Proj用に最低限必要な記述
ProjID = 1200 ;ProjID
Offset = 20, -50 ;射出位置
Velocity = 3, 0 ;発射速度
ProjAnim = 1201 ;射出アニメ
  • 必要最小限の設定
  • 必要なら細かいパラメーターを追加すること。

補足

ProjStageBound
  • ProjStageBoundはステージ幅自体を基準とした数少ない処理の1つ。
    • 自由に使える処理としては唯一と言って良い。
  • これを利用することで、ステージの幅を認識する手段が存在する。
    • 詳しくは座標のページの下Lv3の欄を参照。

HitDefとの違い
SC-/HitDefとは一部、攻撃判定として処理に違いがある。
  • Pausetimeの自分側はProj自身にかかる。本体には影響しない。
  • HitOnceが機能しない。複数の相手が重なっている場合Porjは同時にヒットする。
    • Projのヒット回数はProjHitsで設定されるため、
      時間差で当たっていない相手にだけ当てることはできない。
  • ステート奪取設定(P2GetP1State)をした場合にSC-/HitOverrideが起動する場合にも通常ヒットはする。
    ;HitDefのステート奪取設定ではそもそも命中自体しない。Projではステート奪取設定が無い攻撃として命中する。
※ただし処理の関係上、そもそもP2StateNo・P2GetP1Stateの設定は使うべきでない
  • それ以外にも細かい違いがある、はず。

Helperとの違い
飛び道具自体はHelperでも可能だが、それぞれに欠点がある。
  • Helperの場合
    • ステートを作成する要領で作成することができる。
    • 細かい記述を入れれば細かい制御もできる。
    • リダイレクトを用いれば細かい確認もできる。
    • ただし上限数があるため闇雲に使うことができない。
    • 制御を誤ると分身の発生する危険がある。
      • SC-/HitDefを使う場合SC-/ReversalDefの危険も。
        • ただしMoveTime(Pause中作動)を永続にするなら危険は減らせる。
  • Projの場合
    • 記述は単純だが、細かい制御が一切できない。(更新Proj型で多少対応可能)
      • 攻撃力の更新などは更新Proj型のみ可能。
    • 個数確認とヒット確認以外の情報を確認できない。
    • SC-/Pauseなどの停止で本体が停止した場合、動かない。
    • SC-/ReversalDefの対象外。
    • Win版では?:常にSC-/PalFXの影響を受ける。
    • Pause中は本体が動けなければ動けない。
  • 更新Proj型については該当ページを参照。
    • 簡単に言うと「Projを更新していく方式」で細かい制御を行える。
    • ただしその分、記述が面倒になりがち。
    • Projの欠点としてPause中は本体が動けなければ動けない。
  • なお更新Proj型の方式など使うとHitDef代替のProj型攻撃も可能。
    • SC-/HitDefでないためSC-/ReversalDefに関与されない。
    • 欠点として本体へ自動でのPauseTimeを付加させることができない。

注意点
  • 射出する際は必ずT-/MovetypeをAにすること。
  • Projは射出時点のパラメータのみが有効で補正値の更新は
    Projを更新していく方式でなければ不可。
  • Projを参照するトリガーは個数確認とヒット確認しか存在しない。
    • そのため、細かい状況を把握するには特殊な調査が必要になる。
  • ProjはSC-/Helperから実行しても本体の管理になる。
    • HelperからProjを出しても個数を確認する場合は本体の情報を参照する。
    • 「Root,NumProj」という具合。
  • ProjRemoveTimeは影響・表示フレーム数で、残存時間は+1フレーム長い。
    • SC-/Explodと同様に消滅するフレームでは存在が消えていない。
    • 1では「射出時点F(表示)→次Fの終了時点(消滅)」まで残る。
    • 詳しくはフレーム処理のページを参照。
    • なお攻撃がヒットした場合はその時点で消滅している。
  • ただしSC-/Pauseなどで本体が動けない場合はProjは動かない
    • PauseMoveTime,SuperMoveTimeは本体に対応MoveTimeがある場合のみ有効
    • なお、射出したフレーム時点ではPauseに関わらず処理を行う。
      • ProjRemoveTime=1で本体停止中・MoveTime有りの場合、
        アニメ表示が行われない(判定はあり命中もする)
  • Win版では、OwnPalが機能せず本体のSC-/PalFXの影響を受ける。
P2GetP1State(ステート奪取)、P1StateNoについて
Projではステート変更のオプションを使用しないほうがよい
  • もしステートを奪われた状態でProjが命中すると
    • ステートは奪われたままP1StateNoの指定番号の相手側ステートを読み込む
    • P2GetP1State(P2StateNo)については本体ステートの主ステートを読み込む
      • ステートを奪われている場合ステートを奪っている犯人のステートを読みこませる
      • 場合によってはステート奪取された状態で自身のステートを読み込むこともある。
なお常に本体管理になる関係上SC-/HelperからProjでは危険度が跳ね上がる。
  • 後述

Pause中の親のMoveTimeについて
SC-/PauseSC-/SuperPauseでの停止中、
Projは本体のMoveTimeが存在しない場合、ProjのMoveTimeが有っても動かない。
基本的に本体以外の停止で停止するというものだが、
例外的に攻撃が命中した際にもMoveTimeは発生する。
  • そのため自分以外の時間停止中に攻撃を受けると、
    停止していたProjが動くという現象が起きうる。

Proj相殺・打ち消しの処理
Proj同士の相殺はProjのくらい判定同士が重なることによって発生する。
  • AttrのP属性はHitDef用で、Projはくらい判定が互いにあればP属性が無くとも発生する。
Proj相殺はProjHitsとProjPriorityの合計値を比較して処理をする。
  • PH+PPの合計値が同一である場合、相殺して互いに消滅する。
  • PH+PPの合計値の同一でない場合、多い方を残し、少ない方は打ち消される。
    • 残った側は(自分PH+PP)-(相手PH+PP)の数値まで、PH+PPが減少する。
      単なる相手PH+PPの合計値ではない。
      • 減少はProjPriority側から。減少値がProjPriority値を上回ったの分ProjHitsが減少する。
      • ProjPriorityが命中前に0だった場合、ProjHitsの減少処理の後ProjPriorityが-1される。
      • ProjPriorityがマイナスの場合、次の減算処理で更に自分PPのマイナス分ProjHitsが減少する。
        • ProjPriorityがマイナスでも、マイナスなだけでは消滅しない。
  • 計算例
    • PH10,PP0のProjは、PH1,PP0のProjに4回目で相殺となる。
      • 一回目10-1で残りProjHitsは9、PPが0だったため-1され合計値はPH9+PP-1の8。(攻撃は9回分)
      • 二回目8-1で残りProjHitsは7に、PPが更に-1されるため、合計値はPH7+PP-2の5。(攻撃は7回分)
      • 三回目5-1で残りProjHitsは4に、PPが更に-1で計-3、合計値はPH4+PP-3の1。(攻撃は4回分)
      • 四回目は1対1と同一値のため相殺が発生する。
    • PH5,PP5のProjは、PH1,PP0のProjに7回目まで耐え、8回目で打ち消される。
      • 一回目~五回目:PPが-1ずつ減っていき5回目でPPが0になるがProjHitsは5のまま維持される。
      • 六回目:5-1でProjHitsが-1され、PPが0のため-1され合計値はPH4+PP-1の3(攻撃は4回分)
      • 七回目:3-1でProjHistは2に、PPが更に-1され合計値はPH2+PP-2の0(攻撃は2回分)
      • 八回目:0対1のため自分側が打ち消され、相手側が残る。



■Lv-4-バグ応用

+■Lv4-ProjP1StateNo利用ステート奪取(通称:OTHキラー・トムキラー)

ProjP1StateNo利用ステート奪取の仕組み

※凶悪系技術※ 通常のキャラでは絶対に使いません。
筆者は詳しくは知らないので多分の推測混じり。凶悪系では入門レベル。
以下、基本的な原理
  • 対象:SC-/HitDefを有するSC-/Helperを使用する相手
  • SC-/ReversalDefで相手の該当Helperをステート奪取
  • 該当HelperからP1StateNo(自分側変更)指定したProjを射出する。
    • P1StateNoの番号は該当Helperが読み込んでいたステート番号など。
    • Projは常に本体管理のためステート変更するのは相手本体
  • そのProjを適当なくらい判定へ命中させ、相手のステートを変更させる。
    • なお進まず・戻らず場合の回避手段として
      別に通常ステートへ飛ばすProjを用意する場合も。
  • 相手本体に(元々飛び道具用だった)SC-/HitDefを実行させる。
  • 自分側のSC-/ReversalDefで相手本体のTargetを取得する。
  • あとは好きな様に料理する。
    • 最低限、相手がHitDefを持ったHelper飛び道具を使い、
      攻撃判定のある相手アニメ、攻撃の通る相手ステートを知る必要がある。
    • 対策されSC-/HitDefが実行されない場合SC-/ReversalDefが当たらない。
応用としては
  • 相手に読み込ませるステートを対象飛び道具のではなく、
    くらい判定が有効な適当なステートにし通常の攻撃判定を当てる方法もある?
  • 相手側が持っている殺害ステートを読み込ませて自殺させる手法もある。
  • またHelper自体のステート奪取の方法は混線バグでも可。

由来などについてはニコニコMUGENwikiが詳しい。
メモリ変更を用いない手法としては基本であり究極の特殊殺害法。