● What's this?(これは、なに?) ● |
- SHIORI -
とは、テキストで記述した定義ファイルを読み込んで、その設定内容に従ってシューティングゲームを実行するためのプログラムです。 要するに、シューティングゲーム専用のインタプリタのようなものです。
最近、アドベンチャーゲーム用のスクリプトシステムといったものが沢山世に出てきましたが、それのシューティングゲーム版と思ってもらえればOKです。
- SHIORI - では、設定ファイルを読み込むために - HARUNA - というスクリプト読み込みエンジンを使用します。 - HARUNA - は、それ自体が変数や制御構文を使える、微妙に自由度の高い読み込みトエンジンです。
本来は読み込みエンジン自体のことを - HARUNA - と呼びますが、便宜上、記述した設定ファイルそのもの、もしくはその書式を指して - HARUNA - と呼称することもあります。 まぁそのあたりは、適当に。
- SHIORI - 概念図
(なお、アレとはなんの関係もありません。 実際、出生はこっちの方が何年も古いです。)
● ゲームのモデル化 ● |
シューティングゲームに限らず、ゲームというものは色々な構成要素を組み合わせて構成されます。 ここで言う構成要素とは、たとえば『ステージ』だったり『キャラクタ』だったりします。
具体的に例を挙げて言うと、たとえば『ゲーム全体』は『ステージ』の集合として理解できます。 つまり、『ゲーム』というもの全体は、『1面』とか『2面』とかいった『ステージ』が連続的に展開されることによって構成されると考えるワケです。
また、あるひとつの『ステージ』に注目すると、これは『自機』、『敵』、『敵弾』のような、いろいろな『オブジェクト』の集まりであると考えられます。
『ゲーム全体』の構成要素
『ステージ』の構成要素
- SHIORI - では、シューティングゲームを構成するにあたり、ゲーム全体を以下のような『構成要素』に分解して考えることにします。 そして、分割したこれらの構成要素に関する情報を定義することにより、ゲーム全体を構築していきます。
構成要素名 | 説明 |
ゲーム | ゲームそのものであり、全体を通して唯一のもので、『ステージ』の集まり。
最初は『オープニング』なり、『タイトル画面』なりの、なんらかの『ステージ』からスタートします。 |
ステージ | ゲームを構成する各ステージ。 具体的には『1面』とか『2面』とか。 『タイトル画面』や『ゲームオーバー画面』なども、ひとつの『ステージ』として取り扱います。 |
リソース | ひとつの『ステージ』を構成するための、画像や音の素材/材料。 具体的には、画像ファイルとか、wavファイルとか。 |
オブジェクト | ゲーム中に登場する『物』。 具体的には、『自機キャラ』や『敵弾』など。 『自機』や『敵』は、根本的には同じ『オブジェクト』で、ただ種類が違うだけであると考えます。 また、『背景』だとか、『スコア表示』なども、『オブジェクト』の一種として取り扱います。 『ステージ』がゲーム中に『オブジェクト』を出現させ、出現した『オブジェクト』が画面上で動くことにより、ゲームがゲームになります。 - SHIORI - で扱えるオブジェクトには、以下のようなものがあります。 -------------------------------------------------------------- 自機:プレイヤーが操作するキャラクタ 自機弾:プレイヤーが発射する弾 敵:敵キャラクタ 敵弾:敵が発射する弾 GRP:背景などの、グラフィック画面 爆発:爆発 破片:ダメージ時や爆発時にばらまかれる破片 ESP:Effect SPrite。演出用キャラクタ コマンドパレット:コマンドセット実行専用の論理的オブジェクト アイテム:アイテム 数値:スコアや残機数表示のための数値表示オブジェクト 英字文字列:文字列を表示するためのオブジェクト(英数字のみ) -------------------------------------------------------------- 各オブジェクトの種類に関する詳細は後述します。 |
オブジェクト特性 (特性) |
上で述べた『オブジェクト』が、画面上でどのような動きをするかを定義したものを『オブジェクト特性』と呼びます。 オブジェクト指向言語を知っている方は、『オブジェクト特性=クラス定義』、『オブジェクト=インスタンス』と思っていただければ、だいたい間違いありません。 『オブジェクト特性』では、出現させるオブジェクトに関して「このように動く」といったような、いわゆる「振る舞い」を定義します。 各ステージ中で、この『オブジェクト特性』に沿った動きをするような『オブジェクト』を出現させることによって、画面上にキャラクタを出現させます。 |
イベント処理 | ステージ中、もしくはオブジェクトの挙動中に、特定の条件で発生する特別処理です。 あるシーンまで進んだら背景のスクロールを止めるとか、キャラクタ同士が接触したらこの処理を行うだとか、そういった類の処理を定義します。 イベントの内容は、後述の『コマンドセット』を用いて記述します。 |
コマンドセット | コマンドセットは、その名前のとおり -
SHIORI - に対するコマンドの集合です。 コマンドセットを組み合わせてプログラミングし、それを駆動させることにより - SHIORI - に各種の命令を与え、処理を制御することができます。 |
ステージ構成要素の概念図
ゲームを作ろうというときには、まず『リソース』を用意します。
次に、『オブジェクト特性』を定義して、「こんなキャラクタを出したい」、という定義をします。
『オブジェクト特性』が定義できたら、『ステージ』の途中で、その『オブジェクト特性』に沿った動きをするような『オブジェクト』を登場させます。 登場した『オブジェクト』は、『オブジェクト特性』に沿った動きで動き回ります。
以上のような手順を踏むことによって、意図したキャラクタを画面上に登場させ、それを動かすことができるようになります。
● 定義ファイルの構成 ● |
前項『ゲームのモデル化』で述べた『構成要素』の項目は、すべてテキストで記述された定義ファイルで、その内容を定義します。
ひとつの『ステージ』定義には以下の6種類のファイルを使用します。
名前 | 内容 |
定義ファイル名定義ファイル | 『ステージ』の定義。以下の5つのファイルの所在を管理する。 |
リソース定義ファイル | 『リソース』の定義。 |
特性定義ファイル | 『オブジェクト特性』の定義 |
イベント定義ファイル | 『イベント』の定義 |
コマンドセット定義ファイル | 『コマンドセット』の定義。 |
敵配置マップ定義ファイル | 『敵オブジェクトの出現タイミングと位置』の定義 |
定義に使用するファイル
前項で、『ステージ』は『リソース』『オブジェクト特性』『オブジェクト』『イベント』『コマンドセット』を組み合わせて構成されると述べました。 ひとつの『ステージ』を構成するためのファイル群は、その関係とだいたい同じです。
各定義ファイルのファイル名を定義します。 このファイルに、他の設定ファイルへのパスを書いておきます。
このファイルは『ステージ』を記述するもので、その構成要素として、他の定義ファイルの内容を持っている、といった形です。
なお、このファイルは『ステージ』を定義するものなので、ファイル名定義以外にもいくつが機能がありますが、それは後に解説します。
ひとつのステージ内で使用する『リソース』を定義します。
この定義ファイルの内容に従って、- SHIORI -
はBMPファイルやWavファイルを読み込みます。
ステージ中にでてくる『オブジェクト』の『オブジェクト特性』を定義します。
登場した『オブジェクト』は、この特性定義ファイルで記述した内容に沿って動きます。
このファイルで記述するのは、キャラクタの「特性」であって、キャラクタそのものではありません。 あくまで、キャラクタがどのように動くか、その特性を定義するためのものです。
ステージ中に起こる『イベント』を定義します。
このファイルでは、イベントが発生するタイミングと、起こるイベントの種類を定義します。
イベントの内容そのものは、後述の『コマンドセット定義ファイル』に記述します。
ステージ中で使用する『コマンドセット』を定義します。
コマンドセットとは、プログラミング可能なコマンドセットの集まりのことであり、-
SHIORI -
を詳細に制御するためのインターフェイスとなるものです。 詳細は後に解説します。
敵配置マップを定義します。
ステージ中、どのタイミングトで、どのキャラクタが、どこの位置に、どれだけの速度,加速度で出現するかを羅列します。
このファイルに出現タイミングとポイントを書いておくことで、ゲーム中に敵キャラを出現させることができます。
● まとめ ● |
以上で説明したことをまとめます。
・- SHIORI - とは、スクリプトを読み込み、シューティングゲームを構築するためのプログラムである。
・- SHIORI - で読み込むスクリプトは - HARUNA - で記述する。
・- SHIORI -
は、以下の構成要素を処理することにより、ゲームを構成する。
1.リソース
2.ゲーム
3.ステージ
4.オブジェクト
5.イベント
6.コマンドセット
・- SHIORI - は、以下の6種類のファイルを定義ファイルとして取り扱う。
これらのファイルは、上で述べた6つの構成要素を定義するために用いられる。
1.ファイル名定義ファイル
2.リソース定義ファイル
3.特性定義ファイル
4.イベント定義ファイル
5.コマンドセット定義ファイル
6.敵配置マップ定義ファイル