NScripterのボリューム関連のはまりやすい仕様について
たとえば、NScripterでセリフ付きのノベルゲームを作るとした時。
演出の一環としてキャラクターの声を小さくしたいと思ったことはないだろうか。(大きくすることはできない。したければ、最初から大きく声の素材を録音しておくしかない)
そのための命令は用意されており、dwaveに対してはchvolと言う命令が対応している。
chvol %チャンネル番号,%ボリューム
こういう書式になっており、チャンネル番号は0〜49、ボイスは基本的に0番を使い、ボリュームは0〜100でデフォルトは100になっている。
では喜び勇んで早速使ってみた。
chvol 0,50 dwave 0,"voice1.wav"
しかしこれを実際に実行してみると、どうも音が小さくなったようには聞こえない。試しにchvolを外して実行してみても全く同じ結果になってしまう。
「バグか!?」
まあ待ちたまえ、これでオフィシャルサイトのサポート掲示板に突進するのは早計に過ぎる。
実は、こうすれば確かに小さく聞こえるのだ。
dwave 0,"voice1.wav" chvol 0,50
dwave命令は、実行した時に自動的にボリュームを100に戻してしまうようなのだ。
「なんだそりゃ」と言いたいかも知れないが、そういう仕様なんだから仕方がない。
なので、ボリュームを小さくしたければ、dwaveの直後にchvolを記述するのが基本的な解法だ。(ちなみに、この性質はbgmにも共通している。解法も同じだ)
しかも恐るべきことに、このボリュームの設定はセーブで保存されないのである。
すると、こう返す人もいるだろう。
「じゃあ、ここは演出でずっと声が小さく聞こえる、なんて演出の時には、いちいちいちいちchvolを書かなきゃならないのか?」
「しかも、セーブロードを考えて、システムカスタマイズをしなければならないのか?」
確かにそれは面倒くさい。なので、む式ライブラリver.2 - 永字八法には、そのための機能を追加しておいた。
機能解説
ライブラリをそのまま使ったのでは、デフォルトの仕様のままです。
volume_mode_on
を実行して初めて追加機能が発揮され、サウンド関係、chvol, bgmvolなどが直観的な動作をするようになります。
chvol 0,50 dwave 0,"voice1.wav"
これが最初に期待したように動きますし、
chvol 0,50 dwave 0,"voice1.wav" (中略) dwave 0,"voice2.wav"
voice2.wavもまた、ちゃんと半分のボリュームになります。
デフォルトの動作に戻したい時は、volume_mode_off
を実行します。再度volume_mode_on
を実行した時、ボリュームの設定などはそのまま残っています。
また、何もしなくてもセーブ&ロードに対応します。特別なことは何も要りません。