■NScripterにおける文字表示速度
NScripterでの「文字表示速度」とは「各一文字が表示されるまでの時間」を意味し、ミリ秒で指定されます。
例えば、設定速度が10ミリ秒で、画面に100文字流されるとしたら、
全部表示されるまで1000ミリ秒かかるわけです。
さて、この文字表示速度を変更するには、
!sや
textspeed命令を使いますが、
それはスクリプトを書く側の話です。
実際にゲームにする場合は、
「プレイヤー側が文字速度を変更する」ことを考慮しなければなりません。
NScripterでは、デフォルトの仕様として、「三段階の速度変更ができる」という仕様を用意しています。デフォルトのメニューバーの左から四番目、「文字速度」というものがそれです。
これを利用して、プレイヤーは好きな速度を三つの中から選ぶことができます。
■デフォルトの文字表示速度
では、三つの速度を選べるようにするには、その三つの速度をこちら側で用意しておかなければなりません。
そこで、define節で
defaultspeed命令を書くことでそれを決定します。
*define
defaultspeed 100,50,1
game
*start
|
数字の意味は、左から「低速」「普通」「高速」を選んだ時の文字表示速度です。
この場合、プレイヤーがメニューバーから「低速」を選ぶと文字表示速度が100ミリ秒になり、文字の表示がゆっくりになるわけです。
ちなみに、最初に起動したときは「普通」が選択されています。
また、この「三つの中からどれが選択されているか」という情報は、nscr.exeと同じフォルダに生成される「envdata」というファイルに記録されています。
一旦変更した後に終了し、また起動したときも同じものが選択されているのは、envdataが情報を保持したままだからです。
■プレイヤーが選んでいる文字表示速度
さて、これでプレイヤーが文字速度を選択することができるようになりました。
では、スクリプト側で演出の必要性から!sやtextspeedを使って文字表示速度を変更したときに、そこから元の「プレイヤーが選んでいる速度」に戻すにはどうしたらよいでしょうか。
三つあるため、どれを選んでいるかわかりませんから、!sやtextspeedでは元の速度に戻すことができません。
そこで、
!sdと
textspeeddefault命令を使います。
これらは「プレイヤーが選択している速度に戻す」という命令です。
テキストスピードを変えます。\
!s100
元に戻します。\
!sd
元に戻りました。\
|
例えば、メニューバーから「高速」を選択していて文字表示速度が1ミリ秒になっていたとすると、「!s100」の時点で100ミリ秒になり、「!sd」の時点でまた元の1ミリ秒に戻るというわけです。
■setwindowによる落とし穴
以上が、「とりあえず」の説明です。
なぜ「とりあえず」なのかというと、setwindow命令について、少し追加で説明しなければ実践的な説明にはならないからです。
setwindow命令は一度にたくさんの数値を指定しますが、実はその中に「デフォルトの文字表示速度」の指定があります。左から9番目の数値です。
ここで指定した数値は、define節でdefaultspeedを使って決めた表示速度とは別もので、しかも
「メニューバーの三つの速度の選択よりも優先する」という性質を持っています。
よって、setwindowを書くだけでdefaultspeedで決めたデフォルト速度の意味がなくなってしまい、プレイヤーも速度を選択できなくなってしまうのです。
これを回避するためには、次のような書き方をします。
setwindow 8,16,23,16,26,26,0,2,20,1,1,#999999,0,0,639,479
!sd
|
上記のように、setwindowを書くたびに!sdあるいはtextspeeddefaultを書きます。これでまたメニューバーからの選択が有効になりました。
(上に書いているsetwindowのパラメータは適当です。)
setwindowにはもう一つ問題があります。
それは、setwindowは自分で書かなくても既に暗黙的に設定されているため、
実は最初からメニューバーからの選択は無効になっているのです。
最初から設定されている「暗黙的なsetwindow」の内容は、マニュアルに書かれており、以下のようなパラメータです。
setwindow 8,16,23,16,26,26,0,2,20,1,1,#999999,0,0,639,479
|
左から9番目、つまりデフォルト表示速度は20ミリ秒に設定されています。
これも、さきほどと同じような手で回避することができます。
次のように書いてしまいましょう。
*start直後でいきなりtextspeeddefaultしてしまうのです。
(ここに書くのが嫌ならば、ゲーム本編に入る直前などがいいでしょう。)
ちなみに、!sdではテキストウィンドウが表示されてしまうのでオススメしません。
これは!sや!w・!dでも同じことが言えます。
特に意味がなければ、それに代わる命令を使う方がいいでしょう。
テキストウィンドウが表示されるということ以外は、全く違いが無いからです。
!sd → textspeeddefault
!s → textspeed
!w → wait
!d → delay
以上のことに気をつければ、正しくdefaultspeedが効いて、プレイヤーが三つの速度を選択できるようになります。
■システムカスタマイズでは
システムカスタマイズを行い、自分で文字表示速度の変数を管理し、プレイヤーがもっと細かい段階で文字表示速度を変更できるようなメニューを作った場合は、上記のようなことに気を配る必要はありません。
具体的に言えば、*start直後にtextspeeddefaultを書いたり、setwindow直後に!sdをしたりする必要はないということです。
ただし、setwindowでも文字速度が変更されるという点には気をつけてください。
要するに、setwindowも!sのようなものだと思えばいいでしょう。
よって、setwindow直後に自分が管理している文字表示速度用の変数を使ってtextspeed命令を置いておく、などの処置が必要になります。
自分のやり方としては、ゲーム本編開始時に一度だけsetwindowを使い、ゲーム中ではsetwindowは行わないようにしています。