bexecの挙動
http://sorejyadamedarou.sakura.ne.jp/nscripter/system_customize2.htm
これについて書いてあることの一部を、もっと噛み砕いて書いてみる。
bexec命令は、プレイヤーからの入力を待つための命令である。
実行すると、そこでスクリプトの処理が止まり、プレイヤーが何かの入力をするまでその状態になる。
ただし、いくつかの例外があって、プレイヤーの入力を待たずに次の行へ処理を渡す仕様になっている。
入力された内容、もしくは処理を終了させた理由は、bexec命令の引数に与えた変数に記録される。
引数の与え方
マニュアルでは、文字列変数でも数値変数でもよく、またどちらを与えてもいいようになっているが、実装的には、
- 文字列変数
- 数値変数
の順番で与えないと問題がある(そうだ)
なので、基本的に
bexec $0,%0
と、このように記述するのが一番問題がない。
プレイヤーからの入力以外の理由で入力待ちを終了する条件
その1:btime命令
bexec実行前、btime命令でミリ秒を与えておくと、bexec開始時からそのミリ秒が経過した時に自動的に入力待ちを終える。
この場合、文字列変数には"TIMEOUT"が与えられる。
無論、この経過時間前にプレイヤーからの入力があると、そちらが優先される。
また、btime命令の第二引数に1を指定すると、ボイス待ち状態になる。dwaveの0チャンネルを監視し、その演奏状態もチェックするようになる。主に、ボイスの再生終了待ちに使用される。
その2:オートモード
bexec実行時に、systemcall automodeなどでオートモードになっていると、0msでbexecを抜けてしまう。その場合、文字列変数には"AUTO"が与えられる。
従って、bexecをtextgosubなどを通じたクリック待ちに使用する場合は、オートモードに対する処理が必要になってくる。
具体的には、bexec中はオートモードをやめ、クリック待ち終了時に再度オートモードにするような仕組みだ。