スクリプト言語のマニュアル
このページでは、スクリプト言語の使い方を説明します。 関数リファレンスは以下から参照してください。
Rmakeでイベントの動作を記述するスクリプトは主に二種類あります。有効条件スクリプトとイベント実行内容スクリプトです。
有効条件スクリプトはイベントを表示するかどうか、イベント実行スクリプトを実行するかどうかを決定するスクリプトです。 イベント実行内容スクリプトはイベントにどのような動作をさせるかを記述するスクリプトです。
有効条件スクリプトについて
有効条件スクリプトはイベントの表示およびイベント内容を実行するかどうかの判定をおこなうスクリプトです。
スクリプトの最後の行を評価したときに真の値が返れば、イベントを表示し、開始方法に従ってイベントを実行します。
イベント実行内容スクリプトについて
イベント実行内容スクリプトはイベントの動作を記述するスクリプトです。 NPCに話しかけたときにメッセージを表示したり、プレーヤーキャラクターの位置を変えたり画像の表示をおこなうなど、さまざまな処理をおこなうことができます。
スクリプト入力支援について
基本的にスクリプトは自分で書かないといけないのですが、便利な入力支援機能があります。
スクリプトを入力する画面の右側には、「関数リスト」と書かれた場所があります。 ここには、スクリプト関数が機能カテゴリ別に配置されているのですが、使いたい命令をダブルクリックして、 画面上で必要な情報を入力すると、イベント実行内容にスクリプト命令が書き込まれます。
構文について
関数の呼び出し
メッセージの表示をおこなう場合など、何らかの処理をおこなうときは以下のように関数を呼び出します。
関数名(第1引数, 第2引数, ...)
たとえばメッセージ表示用の関数だと以下のような記述をします。
speak("おはようございます。")
引数である"おはようございます。"を受け取ってspeak関数が文章(文字列)を表示する処理をおこないます。
文字列
メッセージ表示の例にあるように、
speak("おはようございます。")
文字列はダブルクオーテーション(")で囲みます。 改行を含んだ文字列を書く場合は以下のように文字列の中に\nを加えます。
speak("おはようございます。\n昨日はどうもありがとうございました。")
\を表示したい場合は\\と書きます。
speak("\")
数値
たとえば数値を表示したい場合は以下のように書きます。
speak(123)
数値に対しては四則演算をおこなうことができます。
speak(123 + 4) speak(123 - 4) speak(123 * 4) speak(123 / 4)
剰余は以下のようにして計算することができます。
speak(123 % 4)
変数
変数は計算結果をあとで再利用したい場合などに使います。一度計算結果を変数に代入してから表示する例は以下のとおりです。
a = 123 + 4 speak(a);
if文
条件によって処理を分岐したい場合にif文を使うのがひとつの方法です。
aが5より大きい場合にメッセージを表示する例は以下のとおりです。
a = 10 if a > 5 speak("a > 5, a =", a) end
if a > 5 と書いているところでaが5より大きいかどうかの判定をおこない、それが真ならば文字列を表示しています。 a > 5のような条件判定をおこなう式を条件式と呼びます。
aが5より大きい場合とそうでない場合で表示するメッセージを変える例は以下のとおりです。
a = 1 if a > 5 speak("a > 5, a =", a) else speak("a <= 5, a =", a) end
ifにある式が真の場合はifのあとの処理を、偽の場合はelseより後の処理をおこないます。
aが5大きい場合は処理1を、aが-5より小さい場合は処理2を、それ以外の場合は処理3というようなことをしたい場合は以下のように書くことができます。
a = -8 if a > 5 speak("a > 5, a =", a) elsif a < -5 speak("a < -5, a =", a) else speak("-5 <= a <= 5, a =", a) end
elsifは前のifまたはelsifが評価されたときに条件式が偽ならば判定をおこない、処理をおこなうかどうか決定します。
条件式
数値の比較には以下のものがあります。
-
a > b
- aがbより大きい
-
a < b
- aがbより小さい
-
a >= b
- aはb以上
-
a <= b
- aはb以下
-
a == b
- aとbは等しい
-
a != b
- aとbは等しくない
また同時に複数の条件を判定する論理式があります。
-
a && b
- aが真でbも真のとき真
- それ以外のときは偽
-
a || b
- aが真かbが真のとき真
- それ以外のときは偽
条件の反転をおこなうこともできます。
-
!a
- aが真ならば偽
- aが偽ならば真
case文
ひとつの値がどの値を持っているかで別々の処理を行いたい場合があります。そのような場合case文を使うと簡単なときがあります。
a = 2 case a when 1 speak("case -> 1") when 2 speak("case -> 2") when 3 speak("case -> 3") end
caseのあとに判定したい値を設定すると、whenの値と一致するところの処理が実行されます。選択肢などを作るときに有用です。
while文
ある条件の間、繰り返し処理をおこなう場合は while文でおこなうことができます。
i = 3 while i > 0 speak("i = ", i) i = i - 1 end
これで以下のように出力されます。
3 2 1
と出力されます。
ユーザー定義関数
以下のように記述することでユーザー定義の関数を宣言することができます。
def f(a, b) return a + b end
この関数はaとbを引数にとり、aとbの足し算の結果を 関数の返り値とします。
たとえば以下のように記述すると
speak("関数テスト f(3, 5) = ", f(3, 5))
以下のように出力されます。
関数テスト f(3, 5) = 8
注意:関数の宣言は"開始スクリプト"の中でのみ書くことを推奨します。 イベントに書くと、起動の順番により必ずしも意図通りの動作をさせにくい場合があります。
返り値を返さない関数も宣言できます。
def g(a, b) setVariable("引き算の結果", a - b) end g(3, 5) speak("関数テスト g(3, 5), 引き算の結果 = ", getVariable("引き算の結果"))
返り値を返さない関数も宣言できます。
def h() setVariable("引き算の結果", 0) end h() speak("引き算の結果 = ", getVariable("引き算の結果"))
aからbまでの整数の総和をとる関数の例です。
def func(a, b) sum = 0 i = a while i <= b sum = sum + i i = i + 1 end return sum end speak("計算結果 = ", func(1, 10))
ヒアドキュメント
改行を含む文章を手軽に書く方法にヒアドキュメント機能があります。
str = <<EOS
改行を含んだ
文章を書きます。
EOS
speak(<<EOS)
改行を含んだ
文章を書きます。
EOS
ヒアドキュメントでは、"<<識別子"の次の行から"識別子"のある行の前までをそのまま文字列として扱います。 識別子は英語文字で始まって、そのあと英数字が0個以上続く文字列です。 改行は改行として扱われます。