スクリプトシステムとは
まずはこの「猫の手」スクリプトシステムがどういうものなのかを見てみますsample00 変数を定義して演算、結果を表示
最初のサンプル sample00
を実行するには sample/sample/exec00.bat
を実行します
↑は分かりやすくエラー表示処理などは省略しています
このバッチはサンプルスクリプト sample00.mlc
をスクリプトコンパイルして sample00.bin を作成し、解析サンプル analyzer.exe に渡して実行します。
実行結果
PRINT の後に 5 という結果が出力されました
実行結果はスクリプトに指定してある
変数a に 2 |
変数b に 3 |
sample01 if文による条件分岐
章締
2つのサンプルスクリプトを実行してみましたがこれだけでは
結局これが何なの?
という感じかもしれません。
よく分からないシステムを導入するよりC言語で直接書いたほうが早い
という意見もある事と思います。
スクリプトは簡易言語とも言われ、主に生産性を高める目的で大昔から導入されてきたものです。
例えばアドベンチャーゲーム(ADV)を作る時、最初は
台詞1を表示するプログラム
台詞2を表示するプログラム
選択肢を表示するプログラム
選択された項目にあった箇所へ処理を移行する
というプログラムを全ての場面で作っていました。
しかし、これではすぐに大変になってしまいます。
そこで文章をデータベース化するようになります。
プログラムでやらなくてはならない事はほぼ決まっていますからね。
ID, 文章, 選択肢1, 選択肢1が選ばれた時の飛び先ID, 選択肢2, 選択肢2が選ばれた時の飛び先ID, 選択肢3,
選択肢3が選ばれた時の飛び先ID
というデータベースを作ります。
選択肢でない場面では選択肢の項目を空にしておきます。
しかし、文章表示と選択肢表示がある、という単純なシステムでも
選択肢がある場面は全体の1割にも満たないのにデータ的には決まった容量を取っておかなくてはならず効率的ではありません。
これにキャラクターを表示する、背景を表示する、高度な演出を入れるとなると効率化を図るためにちょっとデータ構造を捻らなくてはならず、
構造が複雑になってデータベースを使っているメリットが半減です。
※近年はマシンパワーやメモリ容量の増大で本格的なADVでないものに上記のようなデータベースを採用するタイトルは見られます。
そこで効率よく汎用性を高めるために文章を羅列したシナリオファイルをベースにしたインタープリターが採用されます。
シナリオ文章の中に決まった単語または記号を判定して特定の処理を行うというものです。
文章の中に
*4
という記号と文字があれば次に続く文は選択肢であると解釈します。
続く 4 は選択肢4項目がその下4行にわたって記述されている事をアプリケーションに知らせています。
★キャラクターの名前
のように★記号はキャラクター表示の意味を持たせたりします。
そうすればどんな仕様が追加されようとも対応が可能です。
機能が多くなったり、記号では意味が分かりにくくなると命令語を解析させるようにします。
SELECT(選択肢1, 選択肢1が選ばれた時の飛び先ラベル, 選択肢2,
選択肢2が選ばれた時の飛び先ラベル)
CHAR(キャラクターの名前)
飛び先のラベルは
:選択肢1が選ばれた時の飛び先ラベル
のように:の後に続く文字列をラベルと解釈させて飛び先の制御をさせます。:が先頭にあるのはインタープリターで解析するのに簡単なため
この方法は発売されている多くのタイトルで採用されています。
しかし、この方法も命令語の解析に処理負荷がかかる、命令語はデータベースで持たせるのか等の問題、命令追加の手間も大きい、などのデメリットもあります。
最大の問題は記述ミスがあっても実行してみるまで分からない事です。
複雑なフラグ分岐を持つADVでは全てのパターンを通してみないと単純ミスも検出できず、
出るはずの絵が出ないという不具合があってもシナリオを書いた人にしか分からない為発売まで気づかれなかったという例も少なくありません。
そこで命令語を単純なコードに変換するコンバータが作成されます。
記述ミスなどはコンバートの段階で発見でき、解析ルーチンの負荷も軽減されます。
条件式などのサポートしたコンバータを作成する場合は、特に判定が正しく動作するかが重要になってきます。
コンバータはスクリプトをコンバートするプログラムと解析するプログラムの両方が完成して初めて意味を成すものです。
インタープリターのデメリットは改善されますが、専用のコンバータを作成する手間を惜しんでインタープリター止まりのタイトルも少なくないのです。
あるいはシューティングゲーム(STG)の敵キャラのアルゴリズムでも同様です。
多くのSTGシステムではデータベースを採用していますが
やはり無駄なデータが増えたり、自キャラの位置によって行動パターンを変えるようなアルゴリズムはシステムに組み込まれていなくてはなりません。
ADVの複雑なパラメータの判定もSTGのアルゴリズムに応用できるはず、
基本システムを共通化して簡単にADVやSTGに流用できる汎用的なスクリプトコンバートのシステムを作れないものか
という肯定で作成されたのがスクリプトシステム「猫の手」です。
新たな命令語を簡単に追加出来、条件判定などは多くのタイトルで使用されている信頼性のあるものです。
次章ではサンプルプログラム analyzer00.exe に命令語を追加する手順を実践します。