●スクリプトを作ろう
RPGを作る場合シナリオが膨大になり、すべて
Visula Basic
などの開発言語で作ることに無理がでてきます.
プログラム内に簡単なプログラム言語を搭載し、シナリオの記述を簡単にする必要があります.
このプログラム言語をスクリプトといい、インタプリタ形式やコンパイラ形式で処理します.
オープニング画面のテロップ、会話画面、戦闘画面など各所に組み込まれます.
スクリプトをサポートする利点は、 『 プログラムとデータを分離できる(する) 』 です.
→ プログラム=シナリオから開放され、プログラム=プレイヤ(再生)の図式を構築できる
(シナリオの修正によるプログラムの修正を最小限に抑えられる)
→ プログラマとシナリオライタとが分業できる
→ プレイヤが自分オリジナルのゲームを作成、実行できる
.....
ということで、 ここでは、インタプリタ形式(解釈・実行)に挑戦.!
●RPGのプログラムデザイン
RPGは、「プログラム部分」と「スクリプト部分」とで構成されています.
スクリプト部分は、シナリオやストーリーの流れを記述します.
プログラム部分は、それを実行するものです.
これは、「音楽プレイヤー」と「音楽CD」との関係と同じです.
CDを掛け換えるといろんな曲が聞けますね、、、それです.
音楽プレイヤーは、プログラム部分で、音楽CDは、スクリプト部分です.
大雑把に言うと、アクションゲームのプログラムに、このスクリプトを実行する部分を付加すると
実現できます.

ゲームループの流れ
(通常)
@イベントを監視する(RPG画面)
(イベント処理中)
@発生したらスクリプトファイル内のイベントハンドラを見つける(アドベンチャー画面に切替える)
Aイベントハンドラ内に記述されたスクリプトを実行する(アドベンチャー画面)
Bすべて実行したら、元に戻る(RPG画面に戻す)
ここでは、
RPG画面は、「キャラクタがマップやフィールドを探索する画面」をいう.
アドベンチャー画面は、「顔、会話を表示する画面」をいう.
戦闘画面は、「戦闘シーンを表示する画面」をいう.
●スプリプト言語仕様
次に言語仕様を決めましょう. 詳細はこちらです.
●実現方式について
言語処理(インタプリタ、コンパイラ)の予備知識はこちらです.
●作成するサブルーチン一覧
以下の処理とそれを実現するモジュールを作成します.
(将来作成予定を含む)
変数テーブルの管理
「変数」を格納してソース上での変数参照を支援する
AddVariable - 変数登録
FindVariable - 変数参照
※テーブル検索には、ハッシュ関数が利用されます.
ラベルの管理
「ラベル」を格納してソース上でのラベル参照を支援する
1パス、2パス
AddLabel - ラベル登録
FindLabel - ラベル参照
テキストファイルの読込み
字句解析部が1行ごとの処理を行う.
GetString -
スクリプトファイルから1行の読込み
GetLineNo - 現在の行番号(LineNo)を得る
字句解析部
識別するトークン
IsNumber : 数値(0〜9)
IsString : 文字列
IsLabel : ラベル(文字列の先頭に”*”がある文字列)
IsMinus : マイナス符号
IsDelimitter :
デリミッター(上記以外の文字からなるトークン)
Lexer -
1文字ずつ文字の種別を判定しながらトークンテーブルに格納する
GetToken - 指定されたトークンを読込む
GetType -
指定されたトークンの種別を読み出す
NumToToken -
1行にトークンがいくつあったか返す
GetValue -
指定されたトークンを読み出し数値化する
メインプログラム
ReadScript -
スクリプトソースファイルから読込む(メイン)
ParserString - 1行の解析