●スクリプトを作ろう
 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行の解析