※解説修正情報※
2015-01-28:入力記号について調査・方向キー連続入力について調査
2014-10-01:☓Recovery→○recovery 標記の誤りを修正。大文字小文字を区別するため要注意。
2014-01-26:コマンドの成立までの時間について再調査。細部違っていた模様。


■Cmdファイル【Command定義ファイル】

T-/Command用の情報を設定するためのファイル。
ステートも読み込め、基本的に-1ステートはこの中に記述される。
-1ステート以外も読み込ませることはできる。
トリガーのCommandについてはT-/Commandのページを参照。
File-/Stateファイルの一種としても扱われているためステート記述が1つも無いとエラーで落ちる。
※他のステートを用意しておけば-1ステートをこのファイルには書かず別のStateファイルに記述しても良い。

  • 参考:KFMのCMDファイル説明
※フォントの関係上、~などの表示がブラウザ上とメモ帳では異なる場合がある。


Cmdファイルの中身


Command定義

便宜上-1ステートより先に記述されるが、-1ステートの後でも良い。

[Remap] 対応ボタンの差し替え
そのキャラで使うボタンの位置を変更するための設定。
基本的に制作者は使わず、省略も可能。

[Remap]
x = x
y = y
z = z
a = a
b = b
c = c
s = s

左側のボタンが右側のキーで反応するようになる。
[Defaults] Command用パラメーターのデフォルト

[Defaults]
command.time = 15
command.buffer.time = 1

  • CommandにおけるTimeは「入力の猶予時間(F)」のこと。
    • Commandの複雑さに合わせること。
    • 長すぎると暴発しやすくなり、短すぎると入力が厳しくなる。
  • ComamndのBuffer.Timeは「入力後の持続時間(F)」のこと、最大30。
    • いわゆる先行入力の猶予だが基本1で良い。というより、1が良い。
    • 2以上にするとステート奪取の後に不具合が起きる可能性が高い。
[Command] Commandの設定
  • 設定できる[Command]は「128種類のName」まで
    • [Command]のNameの種類が上限に達しなければ[Command]は無制限。
    • 一つのNameに対して、複数のCommandを設定することも可能。
    • 大文字小文字を別々の文字として扱うため、大文字小文字を揃えること。
    • もちろんnameには2バイト文字/マルチバイト文字を使わないこと
  • 記述例

[Command]
name = "2424a"
command = ~D ,B ,D ,B , a
time = 25


不可欠なCommand

  • 必ず用意しておかないといけないCommand
    • "FF"
    • "BB"
    • "recovery" 空中受身のCommand、Commonステートにて使用
    • "holdfwd" 方向キー後ろ押しっぱなし
    • "holdback" 方向キー前押しっぱなし
    • "holdup" 方向キー上押しっぱなし
    • "holddown" 方向キー下押しっぱなし
      • 方向キーはCommonステートでも多数使われている。
  • なお単一のabcxyzsDUBFについては必須とはされていない。


■Lv1-[Command]のCommandの指定方法。

  • Command = ~で指定する内容

指定するキーの種類
  • 方向キー
    • B, DB, D, DF, F, UF, U, UB
      • BはBack、DはDown、FはForward、UはUpの略字でその組み合わせ。
      • 斜めは「上下・左右」の記述順。
  • ボタンキー
    • a, b, c, x, y, z, s
指定のオプション
  • 「 , 」カンマ
    • 次を指定。
    • a,b」なら、aを押した後bを押す。
      • 特殊な記号が付いていなければ放す必要はない。a押したままbでも良い。
  • 「 / 」スラッシュ
    • キーを押しっぱなしにしているか。ホールド。
    • /c」なら、cを押しっぱなしにしている。hold。
      • なお「/F,x」などは「押しっぱなしにしたまま最後のボタンを押す」という扱い。
  • 「 ~ 」チルダ
    • キーを放す。
    • ~x」なら、xを押した状態から放す。
  • 「 $ 」ドル記号
    • 方向キーで横の2方向を含む。
    • $B」なら、Bの他BD、BUでも良い。「$UF」ならU、Fを含む。
  • 「 + 」プラス
    • 同時に押す。(方向キーとは使用できない)
    • y+z」なら、yとzを同時に押す。
  • 「 > 」~より小さい不等号記号(グレーターザン)
    • それ以外のキーを入力していない。Win版から。
    • 「○○,>○○」と合わせて使う。基本、同方向の連続入力に使う。
    • 具体例は下の気をつけたほうが良い点の例を参照。
  • 「 ~xx 」チルダ~数字
    • 方向キー専用のタメコマンドの記述。$記号と併用可能。
    • ~30$F」なら「$Fの要素(F,DF,UF)」を30F押してから放す
    • ~30DB」なら「DB、またはB」を30F押してから、DBから放す(※Win版で確認)
      • ※隣の要素を含んだ状態でもタメや放しが成立することがある。
        • ~30Dなら、DF押しDB放しでも反応する。
      • ※単一の方向のみで反応するタメコマンドは作れない。工夫が必要になる。
指定の注意点
  • ,」の無い単一の入力はTime=1に設定すること。
  • ,」の中で一番最初の入力はTimeの制限を受けない。「,」が無い場合も同様。
    • 最初に「~30$B」と入力するCommandがTime=10でも入力が可能なのはそのため。
  • ,」の数が多いのにTimeが短いと入力が難しくなり、短すぎると不可能になる。
    • 最中に「~30$D」などがあるコマンドでTimeが30+よりも短いと入力は不可能。
    • なおKFMでは真空波動が20F設定、波動や昇龍他が15F設定。大体の目安に。
    • 複合できないオプション同士を同時に指定すると上手く処理されない。
  • /」のついたキーは順番に関係なく最後の入力時に押しっぱなしとして扱われる。
    • 「/x,/y,D,z」といった場合、「D→xy押しっぱなし+z」でも反応する。
      • /を順番通りに・最初から押しっぱなしにする必要はないが、
        最後のキーを押す時には押していなければならない
      • なおxy押しっぱなしのままD→z入力で反応したりしなかったりと不安定。コマンドを分けよう。

方向キーの連打設定について
  • 「方向,同じ方向」という指定はその間に他の入力・放しがあってはらない設定になる。
    • 「F,F」では「F→F」だと反応が「F→x→F」や「F→D→F」など、合間に他の入力があると反応しない
    • 制限は「ボタンを放す」も含まれ「(a押しっぱなし)F→a放し→F」なども反応しない
      • ボタンを押しっぱなしにしている、だけであればこの制限には引っかからない。
    • 一連の入力の合間であっても同じ扱いで「x,F,F,x」の場合、「x→F→B→F→x」では反応しない
  • 制限を受けるのは「F,F」「B,B」「U,U」「D,D」の4種類。
    • 斜め入力の連打はそもそも反応せず、使うことができないみたいである。
    • 異なる方向の繋がりや同じボタンの連打ではこうした制限はなく、合間に何があっても反応する。
  • この仕様はおそらく「F→ずらしDF→F」によって反応しないように、
    自動で「F,>F」扱いになっているものと思われる。
    • 合間にキーを許容させる場合「F,~F,F」とすることになるが、
      その場合「F→ずらしDF→F」で反応するようになる。

気をつけたほうが良い点
  • 基本的にの方向キーコマンドは「~」チルダ指定から始めるが
    同方向2回押しの場合は気をつけた方が良い。
    • 「~D, D」の指定の場合「↓押しっぱなし>ずらし斜め↓>↓で」成立してしまう。
    • 「D, D」の指定の場合なら「下以外>↓>放し>↓」で入力する必要がある。
    • なお~冒頭でも「~D,>D」と「>」をはさめば「↓>放し>↓」と入力する形式にできる。
  • キャラが振り向いても途中まで入力したCommandの入力向きは変化しない。
    • 自動振り向きでもSC-/Turnによる振り向きでも途中まで入力した分は変化しない。
      • 検証不足※途中まで入力してから振り向き、更に方向キーを入れた場合の処理は未確認。
    • 例えば、振り向く前に波動コマンドの方向キーを入れ終わったとして、
      その後、振り向いた後ボタンをおしても波動コマンドが効く。
    • 極端な例では振り向きによって入力方向とは反対へダッシュをしてしまうこともある。
  • 方向キー+攻撃についての記述方法は2~3種類ある。
    1. Command = /F,a 押しっぱなし+ボタン
    2. Command = ~F.a 放し+ボタン(1のコマンドと併用する)
    3. 新たなCommandを作らず、Command="holdfwd" && Command = "a"と条件を記述する。
    4. 3に加えてCommand!="holdup"&&Command!="holddown"と余計な方向がない条件を加える。
      • /F、~Fについては、/$F、~$Fにしてもよい。
      • 想定したい入力範囲に合わせて選ぼう。

補足
  • [Command]の宣言は、[StateDef XXX]と同レベルの扱い。
    • なので、ステートの最中に[Command]の宣言を行うと、そのステートがそこまでとなる。
    • 反対にいうと影響はそれだけ。CMDファイル内なら実はステート記述の後にも[Command]は並べても良い。
    • -1ステートの編集をしばらく行う場合は、
      [Command]の記述全てを一度下側へ移しておくと開いた後が楽になる。
  • ステート奪取の際は必須以外?同じ個数目のコマンドが反応するとのこと。
    • 奪った側でbuffer.timeが2以上だと、予期せぬコマンドが暴発する危険がある。
  • SC-/HelperはKeyCtrl=1にしないとCommand条件が反応しない。
    • 通常キーの入力は本体と同期する。MUGENのAI起動中は基本の単一キーに限り異なる。

補足・成立までの時間について
※押してからの時間に関する調査は不十分かもしれません※
  • 基準:1F遅れ=押してから推定2F目
    • mugen上で確認できたのは/ホールドを最速と仮定したタイミングのみ
  • /ホールド」は成立まで最も早い。ただし、最低でも1F遅れが生じている。
    • 成立前にボタンを放せば、/ホールドが成立せずに単体・~放しが成立する。かなり短く推定1F。
    • デバッグキーのポーズなどでゲームが停止した状態からボタンを押し続けている場合/ホールドは成立しない。
      • その状態からボタンを放した場合、~放しだけは成立する。
  • ~放し」は基本/ホールドが成立していた次Fで成立する。ただし特定条件で遅延する。
    • /ホールドが成立しない押し方でも/ホールド成立タイミングの次Fで~放しは成立する。
    • 遅延A:複数のボタンを同時に~放した場合同じフレームで複数の放しは成立せず、1F1個ずつ成立する
    • 遅延B:下記参照。
  • 単体」は基本/ホールド成立の次F(推定3F目)で成立するが、特定条件で遅延が発生する。
    • 例外的にそのラウンドでそのキャラが初めて押すボタンだけは/ホールドと同時を底として成立する
    • 遅延B:押してから単体が成立する前に別のボタンが押された場合追加で押された数×+1F遅延する
      • これによる遅延は放しにも適応される。
      • この遅延処理と調整によって単体の成立タイミングの同時になる。
      • 3つボタンをほぼ同時に押した場合は+2F、入力から推定5F目に成立する。
    • 遅延C:押してから単体が成立する前にそのボタンを含む~放しが成立すると+1F遅れる
      • 放しは同時処理されないため、複数同時に放されればその分単体の成立も遅れる。
ケース1:押しっぱなしにした場合 ── ケース2:1Fのみで放した場合
F数 単体 Hold 放し 備考 F数 単体 Hold 放し 備考
?F 推定1F目 ?F 推定1F目
+1F +1F
+2F 推定3F目 +2F 推定3F目
+3F +3F 推定4F目
放したタイミング +4F
~F
ケース3:同時押し+放し
F数 a押 b押 a単 b単 /a /b a放し b放し 備考
?F 推定1F目
+1F
+2F
+3F 推定4F目※、同時押し遅延により放しの成立がズレる。
+4F 推定5F目
  • なお同時押しや放しによる遅延は成立前なら何度でも発生する模様。
    • 連射ソフトなどでボタンを連打し続ければ連射中ずっと単体が成立しない。
    • そこからボタンを放すと30F程度経ってから単体が成立することも。


■Lv2~Lv3-複合処理による解決方法


+ ■Lv2-PauseTime中のキー放しなどを反映させる方法

■Lv2-PauseTime中のキー放しを反映させる方法

PauseTime中はCommand成立が持続してしまうため、
holddownを入れた状態で屈み攻撃を当て、立ち攻撃につなごうとすると
ヒットポーズ中はholddownが残ってしまい屈み攻撃が暴発する問題への対処について。
「屈み→立ち」に限らず「後ろ特殊→前特殊」などにも当てはまる。

対処法は簡単で単独hold系のCommandを使わなければ良い
持続するのはCommandの成立だけであって、内部処理はしっかり途切れる。

方向キー入れボタンコマンド追加方式
屈みコマンドの場合、コマンド定義で

[Command]
Name = "2a"
Command = /$D,a

という感じの屈みコマンドを作成し屈みコマンドとして使えば良い。
前なら「/F,a」、後ろなら「/B,a」という具合。立ち攻撃は通常のaなどだけを指定。
ChangeStateステコンの配置は方向キー入れ攻撃→立ち攻撃の前後になる。
こうすればhold持続による暴発を防ぐことができる。

方向キー放しボタンコマンド追加方式
やや遠回りな指定方法。

[Command]
Name = "_a"
Command = ~$D,a
Time = 5

こうした放しコマンドを作成し屈み攻撃のCommand条件を

TriggerAll = Command = "a" && Command = "holddown" && Command != "_a"

といった感じにしても屈み→立ちの暴発を防げる。
ただしTime設定の利用が微妙なのでおすすめできない。

Helper型
KeyCtrl=1のSC-/Helperをコマンド入力補助用として配置し、
hold系をHelper(x),Command="hold####"で判別するという方式。
少々面倒だがコマンド定義を新しく増やせない、もしくは
元々Helper型の先行入力装置などを用意している場合に有効。

+ ■Lv3-ステップダッシュ反転など、Command反転の抑制方法

■Lv3-Command反転の抑制方法

Keyctrl=1に設定したHelperを発射してFacingを1に固定し、Commandの条件を

TriggerAll=(Helper(xxx),Command="*右向き時*"&&Facing=1||Facing=-1&&Helper(xxx),Command="*左向き時*");

という風に向きを固定したHelperを介して判定するとCommandの反転を防ぐことができる。
、-1ステートを読み込むことについては-1ステートの最初にIsHelperでのChangeStateを置けばいい。
+ ■Lv3-HelperにCommandを認識させたい場合

■Lv3-HelperにCommandを認識させたい場合

リダイレクトRoot,を用いて参照させようとすると、
本体のステートが奪われている状態で本来のコマンド以外が暴発する危険が高い。
その為、Commandを必要とするHelperはKeyCtrl=1で管理した方が良い。
-1ステートを読み込むことついて、
もしT-/Timeが不要・^Varで代用できる、かつステートが固定なら、

[State -1, ishelper]
Type = changestate
Trigger1 = Ishelper(引数) ;引数に対応するHelperIDを入れる
VAlue = 指定 ;Helperに対応するステートを記入する。
Ignorehitpause = 1

といった記述を-1ステートの冒頭に置いておけば、後を読みこませずに済む。
もしこうした処理をしてはいけない場合は、してもよいKeyCtrl=1にしたHelperを別に出しておき、
Helper(),リダイレクトからCommandを認識させると良い。
もちろん常駐するKeyCtrl=1のヘルパーがいればそれを利用、常駐する必要がなければ、
必要になる旅に射出し、不要になった時点でSC-/DestroySelfして消去すると良い。

+ ■Lv3-先行入力のためのシステム・素案

■Lv3-先行入力のためのシステム 素案

  1. Varを2個用意し、コマンドに合わせてStateNoと猶予時間を入力
  2. 猶予時間はVaraddで減算していき、0になったらStateNoのVarもリセット
  3. -1ステートの記述の、Commandの条件の横に同じStateNoのVarを確認する。

+ ■Lv3-先行入力システムCNS-bit・紹介

■Lv3-先行入力システムCNS-bit

ADIのMUGENメモにて「先行入力用ヘルパー・bit演算型 改良版」が公開されている。
非常に複雑な記述のため参考ページ一覧から氏のサイトを参照
細かくコマンドを認識して判定が可能なCNS。
タメコマンドや自由な1~3回転コマンド用のコマンドの代替記述も備わっている。
ただしHelperを一個ほぼ完全に使い切る。


最終更新:2015年09月28日 16:55