## スクリプトを書く上で疑問に思われるであろうこと

### yaneuraoGameScript の機能は使えないのか？

csengine.dll の中身はほとんど yaneuraoGameScript から拝借したものなのですが、 使っているのはスクリプトを実行コードに変換するコンパイラと仮想マシンだけです。 よって PlayMIDI などの yaneuraoGameScript の関数は使えません。 本当は入れたかったのですが、yaneuraoGameScript が使っている yaneGameSDK は アプリケーション単位で資源を管理しており、私の技術力不足もあってうまくDLLに 組み込むことができませんでした。 LoadLibrary() などは便利そうなので入れたいところです。

### 文字列の扱い

yaneuraoGameScript のマニュアルの丸写しになってしまいますが、文字列はメモリのどこかに格納され、 その場所を指すポインタを使って取り扱います。 スクリプト中ではポインタも整数（long型）として扱っているので、

    str s;
    s = "文字列";

と書くのと

    long s;
    s = "文字列";

と書くのとは同じ意味になります。しかし一応文字列へのポインタ型として"str"というキーワードが使えるので、 本マニュアルでは文字列を指す変数の前に"str"と書いて区別しています。

スクリプト中で二重引用符で囲まれた部分は定数としての文字列になります。 これだけでは不十分なので変数としての文字列型が欲しいところですが、スクリプトでは事実上 変数の型が long しかないので、あらかじめ文字列を扱うための領域を用意しています。
この領域には string という名前の配列でアクセスします。配列には文字列領域へのポインタが入っています。
スクリプトでの文字列やポインタの扱いは、本物のＣ言語のように本格的なものではないので、 「具体的にはこういう記述をする」という例を示すにとどめます （むしろAKAHO自身もやねうらおさんのコードをそのまま使っているだけなので深くは分かっていない）。

文字列を扱う関数としては、strcpy(),strncpy(),strcat(),sprintf() があります。

    strcpy(string[0], "おはよう");    // 文字列"おはよう"を string[0] にコピーする。
    strcat(string[0], "ございます");  // string[0] に文字列"ございます"をくっつける。
    strncpy(string[1], string[0], 7); // string[0] の先頭から７文字を string[1] にコピーする。

    sprintf(string[2], "朝のあいさつ：%s", string[1]);  // string[2] の内容は"朝のあいさつ：おはようござい"になる。

これらの関数の機能は、Ｃ言語の同名関数と同じです。 Ｃ言語を扱ったことがない人は……インターネットで適当に調べてください(^^; ただし、strncpy で指定する文字数は、半角でも全角でも１文字と数えます。
string 配列の長さは 64 （string[0],string[1],..,string[63] が使用可能）です。 それぞれの文字列長は1024バイトです。

### 関数の引数で何が渡せるか

    整数：
    long型の整数を渡せます。
    long f(x)
    {
        return x*2;
    }

    void g()
    {
        long i;
        i = f(i);
    }

    文字列：
    文字列を指すポインタを（整数で）渡せます。
    void f(x)
    {
        window_msg_out(x);
    }

    void g()
    {
        str s = "moe";
        f(s);
    }

    配列：
    配列を指すポインタを渡せます。
    Ｃ言語と違って配列名に&を付ける必要があります。

    long f(*array)
    {
        return array[0] + array[1];
    }

    void g()
    {
        long list[10];
        f(&list);
    }

### 構造体を使いたい

構造体は無いので、まとまったデータを受け渡す時は配列を使います。 配列のサイズと、データの入っているインデックスはあらかじめ存在する変数を使ってアクセスします。 例えば ks_get_sidestatus() の説明を見てください。配列へのアクセスは数字ではなく、 SIDESTATUS_UNITCOUNT といった変数で指定して下さい。

### ｎ次元配列を使いたい

１次元の配列しかないので、

    long array[100*100];
    array[x*100+y] = 1;

という形で使うことになります。