システムカスタマイズ概要

システムカスタマイズとは何か、と言う問に、端的に回答してみます。

デフォルトのシステム

  1. 文章を受ける。
  2. 表示終了時改行フラグは立てておく。
  3. 受けた文章を順番に表示していく。オーバーフロー? 知らね。(a)
    1. \があったら?:デフォルトのクリック待ちルーチン。戻ってくるのを待つ。その後、テキストクリア
    2. @があったら?:デフォルトのクリック待ちルーチン。戻ってくるのを待つ。
    3. /があったら?:それが最終文字でなければエラー。最終文字ならば表示終了時改行フラグを折っておく。
    4. まだ表示していないテキストが残っていれば、(a)に戻る。
  4. 表示終了時改行フラグが立っていて、かつ画面上にテキストが存在するならば?:改行をする。オーバーフローは考慮しない。
  5. 処理終了

※デフォルトのクリック待ちルーチンは、クリックを取得すると終了しますが、右クリックでセーブ画面、上下でバックログなどの基本的な機能を持っています。

textgosubを使ってシステムカスタマイズした場合。

  1. 文章を受ける。
  2. 表示終了時改行フラグは立てておく。
  3. 受けた文章を順番に表示していく。オーバーフロー? 知らね。(a)
    1. texec2フラグが立っていれば、textclearを実行する。そして同フラグを折る。
    2. \があったら?:textgosubで定義したルーチンに飛ぶ。戻ってくるのを待つ。
    3. @があったら?:textgosubで定義したルーチンに飛ぶ。戻ってくるのを待つ。
    4. /があったら?:それが最終文字でなければエラー。最終文字ならば表示終了時改行フラグを折っておく。
    5. まだ表示していないテキストが残っていれば、(a)に戻る。
  4. 表示終了時改行フラグが立っていて、かつ画面上にテキストが存在するならば?:改行をする。オーバーフローは考慮しない。
  5. 処理終了

「表示文中に@か\があったらtextgosubで定義したラベルにgosubする」と考えておきましょう。そうすると、そのラベルの中にどういうスクリプトを書けばいいかがわかってきます。

ispage
このルーチンに来たのが単なるクリック待ちか改ページかを判別する。この値によって処理を変えるべき。
texec, texec2
恐らく、内部的的にispageを含む。前者は改ページだった場合、即座にtextclearに化ける。後者はフラグを立てておいて後で消す。
isskip
スキップモードを取得する。この値によってクリック待ちをするかどうかの処理を変えるべき。
getcursorpos
カーソル位置を取得する。クリック待ちアイコンを表示する際の位置決めに使える。
getcursorpos2
最後に表示した文字の左上位置を取得する。getcursorposの場合、文章が丁度テキストウィンドウの右端で終わった時、改行した位置が返ってくる。こちらならばその心配がない。

どのようにクリック待ちするかはプログラマにまかせられています。フルスクラッチしなければなりませんが、逆に言うとセーブ画面やコンフィグ画面、バックログもまた自由にデザインできます。
※セーブやコンフィグも可能なクリック待ち部分は、できれば別のルーチンに切り出して、選択肢命令と共用するのがいいでしょう。そうすると、NScripterの弱点の一つ「選択肢中にセーブができない」を克服することができます。

luacall textをした場合。

  1. 文章を受ける。
  2. 受けた文章をlua側に書かれた function NSCALL_text() に投げる。つまり、NSCALL_textの中で表示処理をしないと、表示すらされないで終わってしまう。
  3. 処理終了

もっとも自由度が高いですが、その分難易度はお高めです。