- SHIORI - 概要 ○ - SHIORI - とは  - SHIORI - とは、テキストで記述した定義ファイルをもとに、その設定内容に 従って、シューティングゲームを実行するという、いわばシューティングゲーム専用の インタプリタのようなものです。 ○ - HARUNA - とは  - SHIORI - では、設定ファイルを読み込むために - HARUNA - という スクリプト読み込みエンジンを使用します。 - HARUNA - は、それ自体が 変数や制御構文を使える、微妙に自由度の高い設定記述スクリプトエンジンです。  便宜上、読み込みエンジン自体のことを - HARUNA - と呼ぶこともありますが、 記述した設定ファイルそのもの、もしくはその書式を指して - HARUNA - と呼称することもあります。 ○ ゲームのモデル化  シューティングゲームに限らず、ゲームというものは、いろいろな構成要素を組み合わせて 構成されます。  たとえば、ゲーム全体は「ステージ」の集合として理解できます。ステージが連続的に 展開されることによって、ゲーム全体が構成されます。  また、あるひとつのステージに注目すると、ステージ内には、「自機」、「敵」、「敵弾」 のような、いろいろなオブジェクトの集まりであると考えられます。  - SHIORI - では、シューティングゲームを構成するにあたり、ゲーム全体を 以下のようにモデル化し、処理します。 リソース :ゲームを構成するためのリソース。 画像とか、wavファイルとか。 ゲーム :ゲーム全体が持つ各種プロパティと、「ステージ」の集合。  ゲームそのものであり、全体を通して唯一のもの。  ゲームは、最初は「オープニング」なり、「タイトル画面」なりの、  なんらかの「ステージ」からスタートします。開始した「ステージ」は、  なんらかの条件により「ステージ1」などの別のステージに  リンクしていきます。  ゲーム全体は、ステージのリンクを繰り返していくことにより構成されます。 ステージ :ステージ自体が持つ各種プロパティと、ゲーム中に登場する  「オブジェクト」の集合。  あるステージは、ステージ中に登場するキャラクタ等の集合として処理  されます。  一般的には、「自機」「自機弾」「敵」「敵弾」「背景」くらいあれば  それなりにゲームっぽく見えます。 オブジェクト:オブジェクトは、一言で言えば、- SHIORI - で扱う  各種キャラクタそのものです。  - SHIORI - で扱えるオブジェクトには、以下のようなものがあります。 ・自機 プレイヤーが操作するキャラクタ ・自機弾 プレイヤーが発射する弾 ・敵 敵キャラクタ ・敵弾 敵が発射する弾 ・GRP 背景などの、グラフィック画面 ・爆発 爆発 ・破片 ダメージ時や爆発時にばらまかれる破片 ・ESP Effect SPrite。演出用キャラクタ ・コマンドパレット コマンドセット実行用パレットオブジェクト ・アイテム アイテム ・数値 スコアや残機数表示のための数値表示オブジェクト ・英字文字列 文字列を表示するためのオブジェクト(英数字のみ)  詳細は、後述しますが、それぞれのオブジェクトは、種類として殆ど  違いがありません。 自機だろうと、敵だろうと、画面上を動くキャラクタで  あって、処理自体に差異は殆どないからです。 一部のオブジェクトに  独特の処理がある程度です。 イベント処理:特定の条件で発生する特別処理です。  ステージ中、あるシーンまで進んだらスクロールを止めるとか、  キャラクタ同士が接触したら、この処理を行うだとか、そういった類の、  ゲームの流れ上イレギュラーな処理です。  イベントの内容は、「コマンドセット」の集合として記述します。 コマンドセット:コマンドセットは、その名前のとおり、コマンドの集合です。  コマンドをコマンドセットとして駆動させることにより、  - SHIORI - に命令を与えることができます。  ひとつのコマンドは、いわゆるフローチャートのひとつのブロックのように、  「処理の内容」と「次に実行するコマンドへのリンク」で構成されます。  「次へのリンク」は、ひとつのコマンドあたりに必ずひとつとは限りません。  たとえば、条件分岐をするようなコマンドだった場合、条件が  真の場合と偽の場合で、2本のリンクを持つことになります。  真の場合と偽の場合に別々のコマンドをリンクすることにより、条件によって  異なる動作を実現することができます。 ○ GRPオブジェクトに関して  GRPは、他のオブジェクトと取り扱いが少々違います。  通常のキャラクタは、その位置を特定するために「座標」を持っています。 このとき、 キャラクタの座標値はキャラクタの表示位置そのものです。  GRPも座標値を持っていますが、意味合いが異なります。 GRPにおける オブジェクトの座標値は、グラフィック画面におけるビューポートを表します。 取り扱い中のグラフィック画面における、ウィンドウをのぞく左上の点の位置が ビューポートとなります。 ○ コマンドパレットオブジェクトに関して  コマンドパレットオブジェクトは、コマンドセットを実行するためだけのオブジェクトです。  オブジェクトが存在したとしても、画面には何も表示されません。 座標管理も特性定義も 他のオブジェクトの特性とほぼすべて同様ですが、ゲーム中、描画関連の項目は 全て無視されます。 ○ 数値オブジェクトに関して  数値オブジェクトは、各パラメータの値を画面に表示するためのオブジェクトです。  オブジェクトの項目指定と、それに対する係数を用いて、値を表示できます。  数値オブジェクトを使用するには、「0」〜「9」までの画像を先頭のスプライトに  持ったビットマップ画像が必要です。  「先頭に」持っているということが重要です。 ○ 英字文字列オブジェクトに関して  英字文字列オブジェクトを使用することにより、画面に文字列を表示できます。  このオブジェクトを使用するには、ASCIIコード 0x20 〜 0x7F に対応した文字のスプライトを  先頭に持つようなビットマップ画像が必要です。  「先頭に」持っているということが重要です。 ○ 定義ファイルの構成  「ゲームのモデル化」で述べた項目は、すべてテキストで記述された定義ファイルで その特性を定義します。 その際に使用するファイルは、以下の6種類です。 ・定義ファイル名定義ファイル 各定義ファイルのファイル名を定義します。 最初に読み込まれるファイルは shiori.cfg です。 最初に読み込むファイルのファイル名のみ固定になっていますが、それ以降の ステージのファイル名に関しては、自由に定義できるようになっています。 このファイルの中では、以下で述べる「リソース定義ファイル」「特性定義ファイル」 「イベント定義ファイル」「敵配置マップ定義ファイル」「コマンドセット定義ファイル」 の、5つのファイルのファイル名を定義します。 また、このファイルでは、ステージをまたいで使用するシステム変数の値を設定 することができます。 慣習として、「ステージ名.cfg」 というファイル名をつけるのが普通です。 なんとなく、前述の「ゲーム」を定義する感じです。 なお、定義ファイルにおいて、このファイルだけは - HARUNA - による 記述ではありません。 また、定義ファイル名定義ファイルでは、ゲーム全体を通して使用する変数 (システム変数と言います)の定義と値の設定も行います。 ・リソース定義ファイル ひとつのステージ内で使用するリソースを定義します。 この定義ファイルの内容に従って、BMPファイルやWavファイルを読み込みます。 慣習として、「???_config.hrn」というファイル名をつけます。 前述の「リソース」を定義する部分です。 ・特性定義ファイル ステージ中にでてくるキャラクタの挙動を定義します。 このファイルで記述するのは、キャラクタの「特性」であって、キャラクタそのもの ではない点に注意してください。 オブジェクト指向言語における「クラス」を 定義するのと似ています。 慣習として、「???_prop.hrn」というファイル名をつけるのが普通です。 なんとなく、前述の「オブジェクト」を記述する感じです。ちょっと違うけど。 ・イベント定義ファイル ステージ中に起こりうるイベントを定義します。 定義は、ステージにコマンドセットを登録するという形でおこないます。 慣習として、「???_event.hrn」というファイル名をつけるのが普通です。 前述の「イベント」を定義すると考えて、だいたい間違いありません。 ・コマンドセット定義ファイル ステージ中で使用するコマンドセットを定義します。 慣習として、「???_comset.hrn」というファイル名をつけるのが普通です。 前述の「コマンドセット」を記述する部分です。 ・敵配置マップ定義ファイル 敵配置マップを定義します。 ステージ中、どのカウントで、どのキャラクタが、どこの位置に、どれだけの 速度,加速度で出現するかを延々と羅列します。 慣習として、「???_enemap.hrn」というファイル名をつけるのが普通です。 各定義ファイルは、ファイル名定義ファイル以外は全て - HARUNA - で 記述しますが、使えるコマンドがそれぞれ全く異なりますので注意してください。 正しくないファイルに正しい記述をしても、正しく動作はしません。 ○ 座標に関して  - SHIORI - で使用するオブジェクトは、基本的に何次元のオブジェクトでも 取り扱えます。まぁ2次元意外にする必要性もないでしょうが。  座標は、基本的に全て固定小数点を用いて表現します。 固定小数点の小数点以下 ビット数は6ビットです。 座標を指定するときも、速度や加速度を指定するときも、 基本的に画面上でのピクセル単位の挙動に対して、64倍のスケーリングをかけた 値で指定します。  旧 - SHIORI - では、座標指定のみピクセル単位の座標系を用いていましたが 現バージョンから、リソース定義以外は全て固定小数点表記することになりましたので 注意してください。 ○ まとめ  以上で説明したことをまとめます。 ・- SHIORI - は、スクリプトを読み込み、シューティングゲームを構築する。 ・- SHIORI - で読み込むスクリプトは - HARUNA - で記述する。 ・- SHIORI - は、以下の要素を処理することにより、ゲームを構成する。 1.リソース 2.ゲーム 3.ステージ 4.オブジェクト 5.イベント 6.コマンドセット ・- SHIORI - は、以下の6種類のファイルを定義ファイルとして取り扱う。 1.ファイル名定義ファイル 2.リソース定義ファイル 3.特性定義ファイル 4.イベント定義ファイル 5.コマンドセット定義ファイル 6.敵配置マップ定義ファイル ・座標は固定小数点で表記する。小数点以下のビット数は6ビットなので  64倍した値を書けば良い。