Suika2には WMS (Watermelon Script) と呼ばれる高度なスクリプトシステムが搭載されています。
WMSスクリプトは wms
フォルダに格納されます。
ファイルの拡張子はまだ決まっていませんので、ゲーム開発者は好きな拡張子を利用することができます。
こちらがサンプルスクリプトです。この内容をファイル htllo.txt
として保存してください。
func main() {
print("Hello, world!");
}
Suika2ScriptからWMSを呼び出すには、 @wms
コマンドを使用します。
@wms hello.txt
この節ではWMSの文法について記述します。
プログラムは main()
関数から開始します。
func main() {
// This is a comment.
print("Hello, world!");
}
関数は他の関数を呼び出すことができます。
func main() {
foo(0, 1 2);
}
func foo(a, b, c) {
return a + b + c;
}
文字列を使って間接的に関数を指定して呼び出すことも可能です。
func main() {
myfunc = "foo";
myfunc(0, 1 2);
}
func foo(a, b, c) {
return a + b + c;
}
func myfunc(a, b, c) {
// この関数は呼び出されません。foo()が呼び出されます。
}
プログラマは整数型、浮動小数点数型、文字列型、配列型の変数や値を操作できます。
func main() {
// Integer
a = 1;
if(isint(a)) {
print("a is int");
}
// Floating point
b = 1.0;
if(isfloat(b)) {
print("b is float");
}
// String
c = "string";
if(isstr(c)) {
print("c is string");
}
// Array (integer key)
d[0] = 0;
if(isarray(d)) {
print("d is array");
}
// Array (string key)
e["abc"] = 0;
if(isarray(e)) {
print("e is array");
}
// Array of array
f["key"] = e;
}
指定した回数だけ繰り返すには、次のようにします。
func main() {
for(i in 0..9) {
print(i);
}
}
配列の各要素について繰り返す場合は、次のようにします。
func main() {
a[0] = 0;
a[1] = 1;
a[2] = 2;
for(v in a) {
print(v);
}
}
配列の各キーと値のペアについて繰り返す場合は、次のようにします。
func main() {
a["key1"] = 0;
a["key2"] = 1;
a["key3"] = 2;
for(k, v in a) {
print(k + "=" + v);
}
}
通常の while
ループを作成する場合は、次のようにします。
func main() {
a = 10;
while (a > 0) {
print(a);
a = a - 1;
}
}
break
や continue
を for
や while
ループの中で使用することができます。
func main() {
for(i in 0..9) {
if(i == 2) {
continue;
}
if(i == 7) {
break;
}
print(i);
}
}
プログラムは if - else if - else
構文で分岐することが可能です。
func main() {
a = foo();
if(a > 10) {
print("a > 10");
} else if(a > 5) {
print("a > 5");
} else {
print("else");
}
}
func foo() {
return 6;
}
配列の要素はキーを持ち、キーは整数、浮動小数点数、文字列のいずれかです。 1つの配列の中で、整数、浮動小数点数、文字列のキーを混ぜて使うことが可能です。
配列を作成するには、[キー]
構文で値を代入します。
func main() {
a[0] = 0;
print(a);
}
配列の要素を削除するには、remove()
を使用してください。
func main() {
a[0] = 0;
remove(a, 0);
print(a);
}
配列のサイズを取得するには、size()
を使用してください。
func main() {
a[0] = 0;
print(size(a));
}
整数から文字列へ:
s = "" + 123;
小数から文字列へ:
s = "" + 1.23;
整数から小数へ:
f = 0.0 + 1.23;
文字列から整数へ:
i = 0 + "123";
文字列から小数へ:
f = 0.0 + "123";
Suika2エンジンは、エンジンを操作するための予め定義された関数を提供します。
これらの関数は名前の先頭に s2_
を持ちます。
ここで言う変数とは、シナリオの分岐に利用されるフラグのことです。
s2_get_variable()
は変数番号を受け取り、変数の値を返します。
value = s2_get_variable(100);
ここで言う変数とは、シナリオの分岐に利用されるフラグのことです。
s2_set_variable()
は変数番号と値を受け取ります。
この関数は変数の値を変更します。
s2_set_variable(100, 1);
次の関数はコンフィグを上書きします。
s2_set_config()
: 文字列のキーと、文字列の値を受け取ります。
場合によって、コンフィグの変更は即座には反映されません。
このとき、WMSコードは s2_reflect_*_config()
を呼び出す必要があります。
// これは即座に反映されます
s2_set_config("msgbox.x", "0");
s2_set_config("msgbox.speed", "20.0");
// これは即座には反映されません
s2_set_config("msgbox.bg.file", "msgbox-bg.png");
s2_reflect_msgbox_and_namebox_config()
はメッセージボックスと名前ボックスに関するコンフィグの変更を反映します。
s2_reflect_msgbox_and_namebox_config();