Cannon Macro Language ver0.20
Cannon Macro Language (CML) 簡易リファレンスです

【コマンドリファレンス】
【全て開く】 【インデックスまで開く】 【全て閉じる】

書式について
コメント文や数式の記述についてです.

コメント (// , /* ~ */)

// コメント
/* コメント */
' コメント '
コメント文を記述します.
"//" に続く1行,"/* ~ */" で括られた内部はコメントとして扱われ,読み飛ばされます.
また '...'(シングルクォーテーション)で括られた内部もコメントとして扱われますが,
コメント内容は保存されるため,ユーザー定義コマンドと併用することでプログラム内部から参照することが出来ます.

シーケンス ( {...} )

{[定数] , [定数] , ... (一連のコマンド列) }
シーケンス(一連のコマンド列)を記述します.
シーケンスとは,オブジェクトの動きを,一連のコマンド列によって表現したものです.
CMLでは,一連のコマンド列を中括弧"{ }"で括る事で,一つのシーケンスを定義します.
シーケンスは,&(シーケンス呼出), @*(ファイバ起動), n*/f* (オブジェクト生成) コマンドの直後で使用できます.
また,"@0" の省略が可能のため,上記コマンドを指定せずにシーケンスのみ記述した場合,ファイバを起動します.

"{"の直後に数値を置く事で,プログラム内からこの数値を参照できます.
例えば "f{1 hoa0.1} f{2 hoa0.1}" と指定した場合,fコマンドにより CMLObject.fireObject() が呼び出される際,その引数で定数"1"/"2"を参照する事が出来ます.
これにより,fコマンドで生成されるオブジェクトをプログラム内で選択する事が可能となります.
ただし,この数値は定数のみしか指定できず計算式を含める事は出来ません.

数式(演算子)

+ , - , * , / , %, ( , )
四則演算します.% は余剰計算です.
== , != , >= , <= , < , >
比較演算します.演算結果は 1(true) または 0(false) です.
!
単項演算子で論理反転します.0→1,非0→0 という非可逆演算を行います.
$sin, $cos, $tan, $asn, $acs, $atn, $sqr, $int and $abs
単項演算子で正弦,余弦,正接,逆正弦,逆余弦,逆正接,平方根,切捨て,絶対値を計算します.
$i?, $i??
整数乱数を返します."$i?(n)"が返す範囲は0~(n-1),"$i??(n)"は(-n+1)~(n-1)です.
引数には通常の四則演算と比較演算を利用することが出来ます.数値には小数と16進数が使えます.数値項で"0x"で始まる値を16進数として扱います.
論理和と論理積はありません.それぞれ,加算,乗算で代用してください.

数式(変数)

$?, $??
(random) 乱数を返します.範囲は $?;0<=n<1,$??;-1<=n<1 です.実装上は CMLObject.funcRand によって返される値です.
$r
(Rank) ゲーム難易度値を返します.範囲は実装依存です.実装上は CMLObject.globalRank または CMLObject.rank() によって返される値です.
$i
(Iiterval) i(変遷時間)コマンドで現在指定されている値を返します.
$l, $l1, $l2, $l3, ... $l9
(Loop counter) 繰り返し実行コマンドのカウンタを返します.
$lを指定すると,繰り返し実行1回目で0が返り,以降繰り返した回数インクリメントされた値が返ります.
また,入れ子状の繰り返し実行において,"$l1" により1階層上のループカウンタを参照出来ます.最大9階層上まで参照できます.
$1, $2, $3,... $9
(variable) 各変数に代入された値を返します.また,ラベル呼出で指定した引数を返します.
cmlでは,各シーケンスは$1~$9で示される9個の変数を持っており,その値の参照を行います.
これらの変数は,代入によって格納された値を保持しています.
また,ラベル呼出で指定した引数はこれら変数に順番に格納されます.
例えば,"#A{p$1,$2} &A 10,20" と記述した場合,$1=10, $2=20 を返し,位置を10,20に設定します.
また,ラベル定義していないシーケンス"{(sequence)}"に対しても引数を使用することが出来ます.
例えば,"&{p$1,$2}10,20" と記述した場合,$1=10, $2=20 を返し,位置を10,20に設定します.
$x, $y
(position X/Y) オブジェクトのx,y座標値を返します.
$sx, $sy
(Sign of position X/Y) オブジェクトのx,y座標値の符号を返します.$x<0 なら $sx=-1,$x>=0 なら $sx=1です.
$v
(Velocity) オブジェクトの速度を返します.
$vx, $vy
(Velocity X/Y) オブジェクト速度のx,y成分を返します.
$ho
(Head angle of Object) オブジェクトの角度を返します.
$td
(Target Distance) オブジェクトからターゲットオブジェクトまでの距離を返します.
$o, $o1, $o2,... $o9
(Object count) nコマンドでオブジェクト生成時にID指定した子オブジェクトの数を返します.
"$o1~$o9" は各IDを持った子オブジェクトの数を返し,"$o" はID指定した子オブジェクトの総数を返します.
例えば,"n{}n1{}n1{}n2{}"と子オブジェクト4個生成した場合(3個はID指定),$o1=2,$o2=1, $o=3 を返します.
$p.x, $p.y, $p.sx, $p.sy, $p.v, $p.vx, $p.vy, $p.ho, $p.td, $p.o, $p.o1, ... $p.o9
(Parent) 親オブジェクトの各パラメータを参照します.
"$"の後に"p."を入れることで親オブジェクトの各パラメータを参照できます.
$t.x, $t.y, $t.sx, $t.sy, $t.v, $t.vx, $t.vy, $t.ho, $t.td, $t.o, $t.o1, ... $t.o9
(Target) ターゲットオブジェクトの各パラメータを参照します."$t.td" は常に0を返します.
"$"の後に"t."を入れることでターゲットオブジェクトの各パラメータを参照できます.

数式(変数代入) (l)

l$r=, l$1=, l$2=, l$3=,... l$9 [代入値]
(Let) 変数に値を代入します.
$1~$9で指定される9個の変数,及び難易度 $r へ値の代入を行います.
これらの変数は,シーケンス内で後から参照する事ができます.
l$1+=, l$1-=, l$1*=, l$1/= [計算値]
(Let) 四則計算結果を代入します.
$1~$9で指定される9個の変数,及び難易度 $r へ値について演算結果の代入を行います.
例えば,"l$1=0[p$1l$1+=10w5]"では,位置0からスタートして,5フレーム毎に10ピクセルずつ右に動いていきます.
なお,これらの代入コマンドを,値のパラメータとして使用する事はできません.
つまり,上記の例を"l$1=0[pl$1+=10w5]"のように書く事はできません.

実行制御コマンド
シーケンスの流れを制御するコマンド群です.待機,繰り返し,条件分岐,シーケンス呼出,ファイバ起動などがあります.

待機 (w)

w [待機フレーム数]
(Wait) 引数で指定したフレーム数,待機します.
【初期値】
  • w1
引数省略時,前回待機したフレーム数と同じだけ待機します.引数=0 の場合,永久待機します.
~
(wait interval) i(変遷時間指定)コマンドで指定したフレーム数,待機します.
引数はありません.i コマンドで指定したフレーム数,待機します.i コマンド指定値が 0 の場合,このコマンドは無視されます.
i コマンド指定値と ~ コマンド待機時間は一致していますが,変遷時間と ~ コマンド待機時間は g*(引力指定) を行った場合一致していません.
これは,g*(引力指定) を行った場合,変遷時間=0 になるためです.
w? [式]
(Wait if) 引数で指定した [式] が 0 になるまで,待機します.
引数で指定した [式] が 0 になるまで,待機します.

繰り返し ([...])

[ [ループ回数] (sequence) ]
(loop) 引数で指定した回数,[...]内を繰り返し実行します.
ループ回数はループ内に入った時点で設定され,ループ内部で変化したとしても反映されません.

条件分岐 ([?...], [s?...])

[? [式] (sequence) : (sequence) ]
(if ... else ...) 引数で指定した条件式により分岐します.
[式]が非0なら ":"コマンド以前,0なら ":"コマンド以降が実行されます.
[s? [式] (sequence) : [条件] (sequence) : [条件] (sequence) ... ]
(Select if ... grater than or equal to ...) 引数で指定した式により分岐します.
":"コマンドの引数以上,次の ":"コマンドの引数未満の場合,その間が実行されます.":"コマンドは低い値を先に記述する必要があります.
例えば,"[s?$r seqA :0.3 seqB :0.6 seqC]" では,$r<0.3 で seqA,0.3=<$r<0.6 で seqB,0.6=<$r で seqC が実行されます.

シーケンス呼出 (&)

& ({(sequence)}|ラベル)
(call) シーケンスを呼出します.
({(sequence)}|ラベル) の内容がそこに記載されているものとして実行されます.
補助コマンドのパラメータは引き継がれます.例えば,"f4w3&{f}" と "#A{f} f4w3&A" は同じでfコマンドの弾速が引き継がれるため,速度4の弾を2回射出します.
^& ({(sequence)}|ラベル)
(fake call) シーケンスを実行せずに,"&{.}"で呼び出されるシーケンスを差し替えます.
"&{.}" で呼び出されるシーケンスを差し替えます.このコマンドで呼出しても実際に実行はされません.

ファイバ起動 (@*)

@ [排他実行ID] ({(sequence)}|ラベル)
(execute) 新規ファイバを起動します.
({(sequence)}|ラベル) の内容を実行するファイバを起動します.ファイバとは他言語におけるスレッドのような概念で,記述内容は並走して実行されます.
例えば,"&{[5f4w3]}a0.1" は弾を5連射後に加速するのに対し, "@{[5f4w3]}a0.1" では弾を5連射しながら加速します.

また "@0" は省略可能です.つまり f*, n*, &, @* コマンドを指定せずに{...}またはラベルを記述した場合,"@0"が指定されたものとして実行されます.

引数で[排他実行ID]>=1を指定した場合,同IDを持つファイバを停止して起動します.[排他実行ID]=0(デフォルト)の場合,他ファイバを停止しません.

{(sequence)} 形式で記述した場合,補助コマンドのパラメータは引き継がれます.
ラベル 形式の場合,補助コマンドのパラメータは初期値にリセットされます.
例えば,"f4w3@{f}" は,速度4の弾を2回射出しますが,"#A{f} f4w3@A" は,速度4と1の弾を1回づつ射出します.
@o [オブジェクトID] (, [オブジェクトID] , ...) ({(sequence)}|ラベル)
(execute Object) n,f コマンドで生成時に指定した[オブジェクトID]を持つ子オブジェクトに対して,新規ファイバを起動します.
n,nc,f,fc コマンドで[オブジェクトID]を指定して生成した場合,指定[オブジェクトID]を持つ子オブジェクトに対して新規ファイバを起動します.
引数で複数[オブジェクトID]を指定した場合,孫オブジェクトに対してファイバを起動します.例えば,"@o1,2{...}"は"@o1{@o2{...}}"と同等です.
@oコマンドでは,補助コマンドのパラメータは常にリセットされます.また,[排他実行ID]の指定は出来ません.
@ko [終了ステータス] ({(sequence)}|ラベル)
(execute when Kill Object) 指定した[終了ステータス]でオブジェクトが破棄された場合,新規ファイバを起動します.
オブジェクトが破棄された瞬間に起動するファイバを指定できます.ファイバは[終了ステータス]毎に指定できます. [終了ステータス]は koコマンド または CMLObject.destroy() の引数で指定した値で,実装依存です.
実行は1フレームのみ行われ,"w*", "~" のような時間指定コマンドは実行されず,それ以降のシーケンスは無視されます. また,@koで指定したシーケンス内で ko を呼び出しても,シーケンスは循環しません.
^@ ({(sequence)}|ラベル)
(fake execute) シーケンスを実行せずに,"@*{.}"で呼び出されるシーケンスを差し替えます.
"@*{.}" で呼び出されるシーケンスを差し替えます.このコマンドで呼び出しても実際に実行はされません.

その他

{.}
前回呼び出したシーケンスを再度呼び出します.
&, @*, f*, n* の後置シーケンスで有効です.前回呼び出したシーケンスが再度呼び出されます.
呼び出されたシーケンスは,&, @*, f*, n* の各コマンド毎にファイバが保持しています.
例えば "n{seqA} f{seqB} n{.} f{.}" では,"n{.}","f{.}" は それぞれ seqA, seqB が呼び出されます.
また,"f{seqC} @{f{.}}" では,ファイバのパラメータとして呼出シーケンスも引き継がれるため,"f{.}"では seqC が呼び出されます.
kf
(Kill all Fibers) 現在起動している全子ファイバを強制終了します.
そのファイバから並走起動した全てのファイバを強制的に終了します.
操作対象オブジェクトは関係有りません.@o で起動したファイバも強制終了します.
特定の排他実行IDを持つファイバのみを終了させたい場合は,"@1{}" のように空のシーケンスで上書きしてください.
排他実行ID=0 で起動したファイバを外部から終了させる手段は kf コマンドのみです.

補助コマンド
他コマンドと併せて使用するコマンド群です.値は他コマンドで参照され,補助コマンド単体での表面上の変化は有りません.

変遷時間の指定 (i)

i [フレーム数]
(Interval) オブジェクトパラメータの変更にかかる時間を指定します.
【被参照コマンド】 【初期値】
  • i0

位置の指定 (q*)

q [x座標] , [y座標]
(creating point) 位置を指定します.引数省略で 0 が設定されます.
qx [x座標]
(creating point X) x座標を指定します.y座標値は前回指定値から変化しません.
qy [y座標]
(creating point Y) y座標を指定します.x座標値は前回指定値から変化しません.
【被参照コマンド】 【初期値】
  • q0,0
指定値はオブジェクトからの相対位置です.
オブジェクトを原点としてオブジェクト角度により回転した位置がスクリーン上の位置となります.

角度の指定 (h*)

複数オブジェクト生成コマンドの設定 (b*)

bm [弾数] , [扇中心角] , [速度範囲] , [連射間隔]
(Barrage setting Multiple) f コマンドの同時射出について扇状弾中心角/多重弾速度幅/連射間隔で指定します.
bs [弾数] , [変化増減値] , [速度増減値] , [連射間隔]
(Barrage setting Sequencial) f コマンドの同時射出について角度増減値/速度増減値/連射間隔で指定します.
br [弾数] , [角度範囲] , [速度範囲] , [連射間隔]
(Barrage setting Random) f コマンドの同時射出について乱数弾角度範囲/乱数弾速度範囲/連射間隔で指定します.
【被参照コマンド】 【初期値】
  • bs1,0,0,0
このコマンドを指定後,一回の f コマンドで,扇状弾/多重弾/連射弾/乱数弾を一度に射出するようになります.
bm コマンドで [扇中心角]=-360/+360を指定した場合,特例的に全方位弾として計算されます.
bs/br コマンドで [弾数]=0を指定し[連射間隔]>0の場合,kf(全子ファイバ破棄)コマンドを用いるかオブジェクトが破壊されるまで連射します.

bm/bs/br コマンドは連続して記述することで,階層的に弾幕を設定する事が可能です.
例えば "bm3,30bm5,0,2" と記述した場合,一回の f コマンドで,速度幅2の多重弾5発が,中心角30度で3方向に射出されます.
"br5,90,0,10bm4,10" と記述した場合,一回の f コマンドで,中心角10度の扇状弾4発が,90度の範囲でランダムに10フレ間隔で5連射されます.
bv [速度増減値]
(sequencial setting of Bullet Velocity) 連続射出速度を指定します.
【被参照コマンド】 【初期値】
  • bv0
bs コマンドの第三引数のみ取り出した原始的コマンドで,ループコマンドなどと組み合わせる事でより細かい動作が可能です.
速度指定せずに f コマンドを呼び出した場合,前回射出速度から[速度増減値]を加算した速度で射出します.
bm/bs/br コマンドのように連続記述により,階層的弾幕を表現することは出来ません

ターゲットオブジェクトの指定 (t*)

td
(set Target to Default) ターゲットオブジェクトをデフォルトターゲット(実装依存;通常プレイヤー)に変更します.
tp
(set Target to Parent) ターゲットオブジェクトを親オブジェクトに変更します.
to [object_id]
(set Target to another Object) ターゲットオブジェクトを指定idを持った子オブジェクトに変更します.
【被参照コマンド】 【初期値】
  • td

反転動作の指定 (m)

m [反転方向]
(Mirror) シーケンス上の次コマンドの動作を反転します.
【被参照コマンド】 【初期値】
  • 指定無し
このコマンドは,他の補助コマンドと異なり,シーケンス上の次コマンドのみに作用します.
引数は,0;スクロール方向軸で反転,1;スクロール方向の垂直軸で反転,2;原点対称反転です.
&(シーケンス呼出), @*(ファイバ生成), n*/f*(オブジェクト生成)に対して使用すると,シーケンス内のコマンド全てが反転します.
反転させるコマンドは必ず次に記述する必要があります.例えば,条件分岐などで "[?$x<0 m]n..." のように記述する事は出来ません.

オブジェクト生成コマンド
新規オブジェクトを生成するコマンド群です.単数オブジェクト生成と複数オブジェクト一括生成の二種類のコマンドがあります.

単体オブジェクトの生成 (n*)

n [オブジェクトID] ({(sequence)}|ラベル)
(New) オブジェクトIDを指定して,単体の子オブジェクトを生成します.
単体のオブジェクトを,q コマンドで指定した相対位置に,初速度0で,生成します.
引数 [オブジェクトID] は,@o(ファイバ生成) コマンドや to(ターゲット指定), $co*(オブジェクト数の参照) で特定オブジェクトを参照するために指定します.
[オブジェクトID]>=1 を指定する事で,上記コマンドによるオブジェクトの参照が可能となります.

このコマンドは,実装上 CMLObject.newObject() を呼び出してオブジェクトを生成します.
nc [オブジェクトID] ({(sequence)}|ラベル)
(New Child) オブジェクトIDを指定して,相対位置に配置される単体の子オブジェクトを生成します.
単体のオブジェクトを,q コマンドで指定した相対位置に,初速度0で,生成します.
このコマンドで生成されたオブジェクトは,常に親オブジェクトの相対位置に配置されます.
引数 [オブジェクトID] は,@o(ファイバ生成) コマンドや to(ターゲット指定), $co*(オブジェクト数の参照) で特定オブジェクトを参照するために指定します.
[オブジェクトID]>=1 を指定する事で,上記コマンドによるオブジェクトの参照が可能となります.

このコマンドは,実装上 CMLObject.newObject() を呼び出してオブジェクトを生成します.
^n ({(sequence)}|ラベル)
(fake New) オブジェクトを生成せずに,"{.}"で呼び出されるシーケンスを差し替えます.
"n*{.}" で呼び出されるシーケンスを差し替えます.オブジェクトは生成しません.

複数オブジェクトの生成 (f*)

f [速度] , [オブジェクトID] ({(sequence)}|ラベル)
(Fire) 初速度を指定して,単体/複数の子オブジェクトを生成します.
fc [速度] , [オブジェクトID] ({(sequence)}|ラベル)
(Fire Child) 初速度を指定して,相対位置に配置される,単体/複数の子オブジェクトを生成します.
n*(オブジェクト生成)コマンドと同様,オブジェクトを生成しますが,
  • 初速度を指定する点
  • b*(複数射出指定)コマンドに従い複数オブジェクトを同時に生成する点
  • 後続の{...}/ラベルを省略できる点
  • 実装上は CMLObject.fireObject() を呼び出してオブジェクトを生成する点
が異なります.
後続の{...}/ラベルを省略した場合は,再呼び出し"{.}"を省略したものとみなします.
^f [速度] ({(sequence)}|ラベル)
(fake Fire) オブジェクトを生成せずに,"{.}"で呼び出されるシーケンスを差し替え,bv,ba,hs による指定を一回分進行させます.
"{.}"で呼び出されるシーケンスを差し替えて,bv,hs による指定を一回分進行させます.実際にオブジェクトは生成しません.

オブジェクト制御コマンド
オブジェクトを動かすコマンド群です.位置,速度,加速度,速度変化,方向転換,引力,旋回,破棄などのコマンドがあります.

オブジェクト位置の指定 (p*)

p [x座標] , [y座標]
(Position) オブジェクトの位置を指定します.引数省略で 0 が設定されます.
px [x座標]
(Position X) オブジェクトのx座標を指定します.y座標値は変化しません.
py [y座標]
(Position Y) オブジェクトのy座標を指定します.x座標値は変化しません.
pd [指定角度方向距離] , [指定角度垂直方向距離]
(Position for head Direction) h*(角度指定)方向へのオブジェクトの位置を設定します.
座標値は nc/fc コマンドで生成したオブジェクトが操作対象の場合,親オブジェクトの相対位置となります.
それ以外の場合,スクリーン上の絶対位置(実装依存)となります.
i(変遷時間指定)コマンドにより位置変遷時間を指定します.i0 の場合,即時変更します.
変遷時間が指定されている場合は,3次スプラインにより補間されます.
このコマンドに続いて v*(速度指定) が指定された場合,3次スプライン補間の終点速度として計算されます.

オブジェクト速度の指定 (v*)

v [x成分] , [y成分]
(Velocity) オブジェクトの速度を指定します.引数省略で 0 が設定されます.
vx [x成分]
(Velocity X) オブジェクト速度のx成分を指定します.y成分値は変化しません.
vy [y成分]
(Velocity Y) オブジェクト速度のy成分を指定します.x成分値は変化しません.
vd [指定角度方向速度] , [指定角度垂直方向速度]
(Velocity for head Direction) h*(角度指定)方向へのオブジェクトの速度を設定します.
i(変遷時間指定)コマンドにより速度変遷時間を指定します.i0 の場合,即時変更します.
変遷時間が0で無く,同フレーム内で既に p コマンドを実行していた場合,3次スプライン補間の終了速度として扱われます.
変遷時間が0で無く,同フレーム内で p コマンドを実行していない場合,指定時間での速度変化(加減速)として扱われます.

オブジェクト加速度の指定 (a*)

a [x成分] , [y成分]
(Accelaration) オブジェクトの加速度を指定します.引数省略で 0 が設定されます.
ax [x成分]
(Accelaration X) オブジェクト加速度のx成分を指定します.y成分値は変化しません.
ay [y成分]
(Accelaration Y) オブジェクト加速度のy成分を指定します.x成分値は変化しません.
ad [指定角度方向加速度] , [指定角度垂直方向加速度]
(Accelaration for head Direction) h*(角度指定)方向へのオブジェクトの加速度を設定します.
i(変遷時間指定)コマンドによる加速時間の指定は出来ません
加速を停止させるには,加速=0を指定するか,cd(方向転換), cs*(速度変化), gp(引力),変遷時間を指定した p*(位置)/v*(速度) を指定する必要があります.
【参照】

方向転換(bulletML の changeDirection 互換) (cd)

cd [1フレーム辺りの最大旋回角]
(Change Direction) h*コマンドで指定した方向に旋回します.(bulletMLの<changeDirection>タグ相当)
進行方向とオブジェクト角度を同時に変更します(r*コマンドはオブジェクト角度のみ変更します). このコマンドを指定した時点でのオブジェクト角度が初期移動方向となります.
このコマンド以降,r*(旋回)コマンドなどでオブジェクト角度を変化させても,進行方向が変化するようになります(BMLモーションモード).
このモードを解除したい場合,p*(位置), v*(速度), a*(加速度),gp(引力)を指定する必要があります.

h*(角度指定)コマンドにより基準方向と角度(bulletMLの<direction>タグとtype属性に相当)を指定します.
ha(絶対値指定), ho(オブジェクト角相対値指定),ht(ターゲット方向相対値指定),hs(連続指定)がそれぞれ,
<changeDirection> タグの type="absolute", type="relative", type="aim", type="sequence" に相当します.
i(変遷時間指定)コマンドにより旋回時間(bulletMLの<term>タグに相当)を指定します.i0 の場合,即時変更します.
引数で1フレーム辺りの最大旋回角度を指定します.引数=0の場合,最大旋回角度は無視され,この場合の挙動は <changeDirection> と同等です.

速度変化(bulletML の changeSpeed 互換) (cs*)

csa [speed]
(Change Speed Absolute) 指定した速度に変化させます.(bulletMLの<changeSpeed type="Absolute">相当)
csr [speed]
(Change Speed Relative) 現在の速度の相対値で指定し,速度変化させます.(bulletMLの<changeSpeed type="Relative">相当)
css [speed]
(Change Speed Sequence) 指定値で1フレーム辺り加速(減速)します.(bulletMLの<changeSpeed type="Sequence">相当)
オブジェクト角方向に速度を変化させます.このコマンドを指定した時点でのオブジェクト角度が初期移動方向となります.
このコマンド以降,r コマンドなどでオブジェクト角度を変化させると,進行方向も変化するようになります(BMLモーションモード).
このモードを解除したい場合,p*(位置), v*(速度), a*(加速度),g*(引力)を指定する必要があります.

i(変遷時間指定)コマンドにより加減速時間(bulletML <term>)を指定します.i0 の場合,即時変更します.
引数で速度(bulletML <speed>)を指定します.
【参照】

引力指定 (gp)

gp [引力] , [摩擦係数]
(Gravity at Position) 指定位置からの引力を指定します.
このコマンド以降,p(位置)コマンドで指定した位置にからの引力によりオブジェクトが移動します(引力モーションモード).このモードでは下記計算式が適用されます.

[加速度] = [指定位置までの距離] * [引力の強さ] / 100 - [速度] * [摩擦係数] / 100

このモードを解除したい場合,"gp0,0"を指定するか,v*(速度), a*(加速度),cd(方向転換), cs*(速度変化),i(変遷時間)指定後にp*(位置) を指定する必要があります.
また,このコマンドを実行すると 変遷時間指定=0 にセットされます.ただし"~"コマンドによる待機時間はそのままです.
【参照】

オブジェクト旋回の指定 (r*)

r [開始速度] , [終了速度]
(Rotate) オブジェクトをh* commandで指定した角度まで旋回させます.
i(変遷時間指定)で旋回にかかる時間を指定し,h*(角度指定)で旋回角度を指定します.i0 の場合,即時変更します.
旋回角度は開始/終了速度を元に3次スプライン補間により計算されます.
[開始速度] / [終了速度] は,等速回転した場合の回転速度を1とした相対値で指定します.

r0,0 の場合,回転は加速→中央で最高速回転→減速し,開始/終了回転速度は 0 となるように補間されます.
r1,1 の場合,等速回転をします.
r2,0(r0,2) の場合,等加速(減速)回転をします.
r-1,0 の場合,最初反対方向に回転後,加速→減速し,終了回転速度は 0 となるように補間されます.
rc [1フレーム辺りの最大旋回角]
(Rotate Constant) オブジェクト角度を指定角度まで等速旋回させます.
i(変遷時間指定)で旋回にかかる時間を指定し,h*(角度指定)で旋回角度を指定します.i0 の場合,即時変更します.
引数で1フレーム辺りの最大旋回角度を指定できます.
引数=0の場合,最大旋回角度は無視されます.この場合の挙動は r1,1 と同じになります.

オブジェクトの破棄 (ko)

ko [終了ステータス]
(Kill Object) オブジェクトを破棄します.
オブジェクトが破棄され,ファイバが終了します.このコマンド以降のシーケンスは実行されません.
指定した[終了ステータス]は,@koコマンド,CMLObject.onDestroy()で参照されます.

ラベル定義/呼出
シーケンスにラベルを付け,後からラベル指定でそのシーケンスを呼び出せるようにします.

ラベル定義

#NAME {(sequence)} (NAME = [A-Z_][A-Z0-9_]*)
シーケンスにラベルを付けます.
シーケンスにラベルを付け,あとから参照する事が出来ます.
ラベルには,頭文字に英大文字/アンダーバー(_),それ以外の文字に英大文字/数字/アンダーバー(_)が使用できます.

ラベル定義したシーケンス内でラベル定義を行った場合,外側ラベルの名前空間内のラベルとして扱われます.
例えば,"#A{#C{seqA} &C} #B{#C{seqB} &C}" という記述では,ラベル A 内で C と記述した場合 seqA が呼び出され,
ラベル B 内で C と記述した場合 seqB が呼び出されます.

ラベル呼出

NAME[.NAME]* [引数] , [引数] ... (NAME = [A-Z_][A-Z0-9_]*)
ラベル定義したシーケンスを呼び出します.
ラベル定義した名前をシーケンス内で直接指定すると,そのシーケンスが呼び出されます.
ラベルは,&(シーケンス呼出), @*(ファイバ起動), n*/f* (オブジェクト生成) コマンドの直後で使用できます.
また,"@0" の省略が可能のため,上記コマンドを指定せずにラベルのみ記述した場合,ファイバを起動します.
またラベル呼出時に引数を指定でき,シーケンス内部で"$1,$2..."として参照することが出来ます.
ただし,数値はラベル名として認識してしまうため,引数とラベルの間に空白文字を入れるか,第一引数を括弧で囲う必要があります.

アクセス演算子 "." を用いることで名前空間を指定してラベルを呼び出せます.
また,呼出と同じ名前空間にそのラベルの定義がない場合,上位の名前空間から検索します.
例えば,"#A{&B.C &C} #B{#C{seqB} &C} #C{seqC}" という記述では,ラベル A 内で "B.C" と記述すると seqB が呼び出されます.
また,ラベル A 内で C と記述した場合 seqC が呼び出され,ラベル B 内で C と記述した場合 seqB が呼び出されます.

ユーザー定義コマンド
実装依存のコマンド群です.

&[a-z]+
実装依存のコマンドです.
プログラム内で CMLSequence.registerUserCommand() により関数を登録する事で,CML内から任意タイミングで呼び出せます.
また,コマンド名に "_" (アンダーバー) は使えません