「File-/CMDファイル」の編集履歴(バックアップ)一覧に戻る

File-/CMDファイル - (2014/01/26 (日) 20:02:04) のソース

戻る→[[ファイルの一覧]]
----
:※解説修正情報※|
●&font(12,b){2014-01-26:コマンドの成立までの時間について再調査。細部違っていた模様。}
//●&font(12,b){日付:修正部分の概要}

----
*■Cmdファイル【Command定義ファイル】
[[T-/Command]]用の情報を設定するためのファイル。
ステートも読み込め、基本的に-1ステートはこの中に記述される。
[[-1ステート>常時監視ステート]]以外も読み込ませることはできる。
トリガーのCommandについては[[T-/Command]]のページを参照。

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

----
*Cmdファイルの中身

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

:[Remap] 対応ボタンの差し替え|
そのキャラで使うボタンの位置を変更するための設定。
基本的に制作者は使わず、省略も可能。
#aa(){
[Remap]
x = x
y = y
z = z
a = a
b = b
c = c
s = s

}
左側のボタンが右側のキーで反応するようになる。
:[Defaults] Command用パラメーターのデフォルト|
#aa(){
[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バイト文字を使わないこと''。
-記述例
#aa(){
[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
:指定のオプション|
-&font(b,18){「 , 」}カンマ
--次を指定。
--「''a,b''」なら、aを押した後bを押す。
-&font(b,18){「 / 」}スラッシュ
--キーを押しっぱなしにしているか。ホールド。
--「''/c''」なら、cを押しっぱなしにしている。hold。
-&font(b,18){「 ~ 」}チルダ
--キーを放す。
--「''~x''」なら、xを押した状態から放す。
-&font(b,18){「 $ 」}ドル記号
--方向キーで横の2方向を含む。
--「''$B''」なら、Bの他BD、BUでも良い。「''$UF''」ならU、Fを含む。
-&font(b,18){「 + 」}プラス
--同時に押す。(方向キーとは使用できない)
--「''y+z''」なら、yとzを同時に押す。
-&font(b,18){「 > 」}~より小さい不等号記号(グレーターザン)
--それ以外のキーを入力していない。Win版から。
--「○○'',>''○○」と合わせて使う。基本、同方向の連続入力に使う。
--具体例は下の気をつけたほうが良い点無内の例を参照。
-&font(b,18){「 ~xx$ 」}チルダ~数字~ドル記号
--方向キー専用のタメコマンドの記述
--「''~30$F''」なら「$Fの要素(F,DF,UF)」を30F押してから''放す''
--※単一の方向を指定するタメコマンドは作れない。工夫が必要になる。
:指定の注意点|
-「'',''」の無い単一の入力はTime=1に設定すること。
-「'',''」の中で一番最初の入力はTimeの制限を受けない。「'',''」が無い場合も同様。
--最初に「~30$B」と入力するCommandがTime=10でも入力が可能なのはそのため。
-「'',''」の数が多いのにTimeが短いと入力が難しくなり、短すぎると不可能になる。
--最中に「~30$D」などがあるコマンドでTimeが30+よりも短いと入力は不可能。
--なおKFMでは真空波動が20F設定、波動や昇龍他が15F設定。大体の目安に。
--複合できないオプション同士を同時に指定すると上手く処理されない。

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

:補足|
-''[Command]''の宣言は、&b(){[StateDef XXX]}と同レベルの扱い。
--なので、ステートの最中に[Command]の宣言を行うと、そのステートがそこまでとなる。
--反対にいうと影響はそれだけ。CMDファイル内なら実はステート記述の後にも[Command]は並べても良い。
--[[-1ステート>常時監視ステート]]の編集をしばらく行う場合は、&br()[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、入力から推定35F目に成立する。
--遅延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目|
|~|-|-|-|-|-|-|-|-||
----
*■Lv2~Lv3-複合処理による解決方法

#region(''■Lv2-PauseTime中のキー放しなどを反映させる方法'')
**■Lv2-PauseTime中のキー放しを反映させる方法
PauseTime中はCommand成立が持続してしまうため、
''holddownを入れた状態で屈み攻撃を当て、立ち攻撃につなごうとすると''
''ヒットポーズ中はholddownが残ってしまい屈み攻撃が暴発する''問題への対処について。
「屈み→立ち」に限らず「後ろ特殊→前特殊」などにも当てはまる。

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

:方向キー入れボタンコマンド追加方式|
屈みコマンドの場合、コマンド定義で
#aa(){
[Command]
Name = "2a"
Command = /$D,a

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

:方向キー放しボタンコマンド追加方式|
やや遠回りな指定方法。
#aa(){
[Command]
Name = "_a"
Command = ~$D,a
Time = 5

}
こうした放しコマンドを作成し屈み攻撃のCommand条件を
#aa(){
TriggerAll = Command = "a" && Command = "holddown" && Command != "_a"

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

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

#endregion
#region(''■Lv3-ステップダッシュ反転など、Command反転の抑制方法'')
**■Lv3-Command反転の抑制方法
Keyctrl=1に設定したHelperを発射してFacingを1に固定し、Commandの条件を
#aa(){
TriggerAll=(Helper(xxx),Command="*右向き時*"&&Facing=1||Facing=-1&&Helper(xxx),Command="*左向き時*");

}
という風に向きを固定したHelperを介して判定するとCommandの反転を防ぐことができる。
、-1ステートを読み込むことについては-1ステートの最初にIsHelperでのChangeStateを置けばいい。
#endregion
#region(''■Lv3-HelperにCommandを認識させたい場合'')
**■Lv3-HelperにCommandを認識させたい場合
[[リダイレクト]]Root,を用いて参照させようとすると、
本体の[[ステートが奪われている状態>ステート奪取]]で本来のコマンド以外が暴発する危険が高い。
その為、Commandを必要とするHelperはKeyCtrl=1で管理した方が良い。
[[-1ステート>常時監視ステート]]を読み込むことついて、
もし[[T-/Time]]が不要・^[[Var]]で代用できる、かつステートが固定なら、
#aa(){
[State -1, ishelper]
Type = changestate
Trigger1 = Ishelper(引数) ;引数に対応するHelperIDを入れる
VAlue = 指定 ;Helperに対応するステートを記入する。
Ignorehitpause = 1

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

#endregion
#region(''■Lv3-先行入力のためのシステム・素案'')
**■Lv3-先行入力のためのシステム 素案
+Varを2個用意し、コマンドに合わせてStateNoと猶予時間を入力
+猶予時間はVaraddで減算していき、0になったらStateNoのVarもリセット
+-1ステートの記述の、Commandの条件の横に同じStateNoのVarを確認する。
//DHQ氏の解説が一番分かりやすい、かな
//記述が長くなりそうなら[[先行入力システム]]で新規ページを作る。

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

#endregion
----