■NScripterのシステム
NScripterでゲームを作った場合、みんながみんな全く同じになってしまう部分が一つあります。
それは、セーブやロードなどのいわゆるシステム面です。
普通ならば、セーブやロードの機能をゲームにつける場合には
「rmenu」命令を使って右クリックメニューとして作成します。
しかし、画面上にセーブやロードのボタンが常に配置されていたり、右クリックをしたらテキストウィンドウが消えるようになっていたりと、右クリックメニュー以外のシステムのインターフェースになっているゲームもあるでしょう。
そういったインターフェースのゲームにしたいと思っても、NScripterではなかなか難しい状況でした。
■システムカスタマイズ
そこで、NScripterにはシステムカスタマイズというアプローチが生まれました。
これは、システムカスタマイズ用に新しく用意された命令を組み合わせて、普段は一つの命令で済んでいるようなシステムの部分を自分で細かく作りあげるという手法です。
これによって、先述のようなインターフェースにしたり、rmenuで用意されたものではない独自の機能を取り付けることも可能になりました。
■割り込みによるシステム
システムカスタマイズは「割り込みによるシステム」と言えます。
例えば画面上にボタンが配置されていて、そこからシステムの機能を使いたいというのならば、ボタン待ちをしなければなりません。
しかし、テキストでクリック待ちや改ページ待ちをしている時(つまり、システムの機能を使うことができるタイミング)の全てにbtnwaitを入れるなどというのは、現実的に不可能です。
システムカスタマイズでは、これを割り込みによって実現します。
「textgosub」という命令を定義ブロックで宣言すると、ゲーム中でクリック待ちや改ページ待ちが発生した時に、指定されたラベルに自動的にサブルーチンジャンプしてくれるようになります。
そのサブルーチンジャンプ先のラベルにおいて、ボタン待ちを行います。
ここで、どのボタンでもないところをクリックしたのならば、テキストを先に進めるためにreturnで戻りますが、ボタンを押したならば対応する命令(セーブなどならsystemcall)を呼び出します。
このように、クリック待ちや改ページ待ちの時に割り込みがかかり、自分で決めた流れ(ルーチン)を実行することができるようになります。
この割り込みのルーチンの部分が、細かく作り上げる部分というわけですね。
これがシステムカスタマイズの主な仕組みです。
■情報のソース
システムカスタマイズに関しては、現在のところマニュアルにも更新テキストにも載っていません。
高橋直樹様によるサンプルスクリプトが一つあるだけです。
http://www2.osk.3web.ne.jp/~naokikun/nscrsmpl.lzh (242KB)
とりあえずこれが参考になる唯一の情報ではありますが、ここではこれを参照しなくてもわかるように書いていくつもりです。