吉里吉里への道>「吉里吉里/KAG」実験室>タイプライターのような音を出す
タイプライターのような音を出すタイプライターのような音を出すスクリプトを書いてみました。
; first.ks ----------------------------------------------------------------- ; タイプライター ----------------------------------------------------------- @macro name=type @call target=*loop @endmacro ;--------------------------------------------------------------------------- @type text="This script was written by Taro." @s ;--------------------------------------------------------------------------- *loop @seopt volume=&intrandom(90,100) @playse storage=key cond="kag.skipMode<1&&mp.text[0]!=' '" @ch text=&mp.text[0] @wait time=&intrandom(0,500)*random+25 @eval exp="mp.text = mp.text.substr(1, mp.text.length-1)" @jump target=*loop cond=mp.text.length>0 @return ;--------------------------------------------------------------------------- 一応、順を追って説明してみましょう。まず、
; タイプライター ----------------------------------------------------------- @macro name=type @call target=*loop @endmacro ;--------------------------------------------------------------------------- の部分で、マクロを定義しています。このマクロは、*loop というラベルを呼び出すだけのマクロです。 次に、
@type text="This script was written by Taro." @s の部分では、先ほど定義した type マクロを呼び出しています。ここでは、type マクロに text 属性を指定して使用していますが、先ほどのマクロ内では、text という属性は使用していません。ここには注意が必要です。これはどういうことかというと次の部分で明らかになります。 さて、その次の部分というのは、
;--------------------------------------------------------------------------- *loop @seopt volume=&intrandom(90,100) @playse storage=key cond="kag.skipMode<1&&mp.text[0]!=' '" @ch text=&mp.text[0] @wait time=&intrandom(0,500)*random+25 @eval exp="mp.text = mp.text.substr(1, mp.text.length-1)" @jump target=*loop cond=mp.text.length>0 @return ;--------------------------------------------------------------------------- という部分です。これは、type マクロによって呼び出されるラベルの中身です。この中で、mp.text という変数を使用していますが、これが、本来マクロ内で使うはずの text 属性です。このように、マクロの中から、ラベルを呼び出した場合に限り、呼び出し先のラベルでは、マクロに対して指定した属性を使用することができます。これは、なかなかおいしい裏技です。 このラベルの中身も詳しく説明しておきましょう。まず、
@seopt volume=&intrandom(90,100)
の部分では、SE のボリュームを 90〜100の間でランダムに設定しています。良く分からないという人は、KAG3 ドキュメントのエンティティの部分と intrandom の部分を読んでみてください。 次の、
@playse storage=key cond="kag.skipMode<1&&mp.text[0]!=' '"
の部分では、key という音声ファイルを再生しています。ただし、スキップ中や、テキストが半角スペースの場合は、音が鳴らないようにしています。これは、KAG3 ドキュメントの cond 属性の部分を読んでみてください。 次の、
@ch text=&mp.text[0]
の部分では、テキストの内、最初の1文字を表示しています。これも、先ほどのエンティティを使っています。また、「mp.text[0]」としているのは、mp.text という文字列の1文字目という意味です。 次の、
@wait time=&intrandom(0,500)*random+25 の部分では、ランダムな時間でウェイトを取っています。なぜランダムにしたかというと、人間らしさを出すためです。「intrandom(0,500)*random+25」というのは、私が適当に調整した結果です。 次の、
@eval exp="mp.text = mp.text.substr(1, mp.text.length-1)" という部分では、テキストの最初の1文字以外を切り取っています。つまり、最初の1文字を削除しています。最初の1文字は、もう先ほど表示したので、必要がなくなったわけです。マクロの属性は、単なる変数なので、このように色々な操作をすることが可能です。substr という関数は、KAG3 ドキュメントの substring の部分に説明があります。 さて、次の、
@jump target=*loop cond=mp.text.length>0
という部分では、*loop ラベルに戻っています。ただし、表示する文字が無くなった場合は、ここは無視されて次に進みます。それで、
@return
で、マクロ内から「@call target=*loop」としてラベルを呼び出した部分に戻り、マクロが終了します。 以上で、説明は終了です。 このスクリプトは、シルクさんの管理されている吉里吉里サンプル&プラグインに置かせてもらっているので、ダウンロードしたい方は、そちらからどうぞ。 吉里吉里への道>「吉里吉里/KAG」実験室>タイプライターのような音を出す
|