特性定義ファイル 概要 ○ 特性定義ファイルで定義するもの  特性定義ファイルでは、オブジェクトの特性を定義します。  特性はオブジェクトの設計図であり、自機,敵などのオブジェクトは、構築時に この特性に基づいて初期化されます。 ○ オブジェクト  - SHIORI - で登場させることができ、動かすことができるキャラクタを 総称してオブジェクトと呼称します。  オブジェクトは、基本的に「自機」や「敵」といった、いわゆるキャラクタですが、 ものによっては「グラフィック画面」のように画面そのものであったり、あるいは 「コマンドパレット」のような、表示すら無いようなものもあります。  - SHIORI - でゲームを作ることを考えた場合、ユーザーがどのような オブジェクトを出現させたいかは、特定できません。  ゲームを作るときにどのようなオブジェクトを定義するかわからない以上、 - SHIORI - としては、なるべく多種多様なオブジェクトを定義できる キャパシティを持つ必要があります。  「多種多様な」オブジェクトを定義できるかどうかはイマイチ不明なところが ありますが、- SHIORI - では、オブジェクトというものを以下のように モデル化しました。 ・オブジェクトには、以下の種類のものがある。 自機,敵,自機弾,敵弾,爆発,破片,ESP グラフィック画面,コマンドパレット,アイテム,数値,英字文字列 ・オブジェクトは、それ自体は抽象的な(オールマイティだがそれ故に  何を意味するか特定できない)存在である。  オブジェクトは、その挙動を定義する「特性」と組になって、初めて  具体性を持って処理できる。 ・オブジェクトの「特性」には、以下のようなものを含む。 オブジェクトに関する属性の初期値 オブジェクトが共通で使うデータ  オブジェクトが、各個で独立に取り扱うようなデータ(シールド量など)  に関しては、オブジェクト構築時に個別のオブジェクトにコピーされる。  全てのオブジェクトが共有で使うようなデータは、特性を参照して使用  する。 ・オブジェクトの座標などは、全て「ベクタ」で取り扱う。  ベクタの次数は任意である。 ・オブジェクトは、全て「座標」「速度」「加速度」をもっている。  各オブジェクトは、毎フレーム、これらの値を参照して等加速度運動を続ける。  これを制御することにより、オブジェクトの移動を制御できる。 ・オブジェクトの移動や描画は、特性に定義された「配列」を参照して行うこともできる。  オブジェクトの特性には、以下のような配列がある。 移動情報配列 :移動量な速度などを定義した配列 パラメータ配列:その他の任意のデータを取り扱うための配列 描画配列   :描画パターンを定義する配列 ・オブジェクトは、配列の値を参照するために「配列ポインタ」というものを  持っている。  オブジェクトは、配列ポインタの位置により、どのデータを読むべきかを  特定し、そのデータに基づいて処理を行う。 ・オブジェクトが移動する際には、まず移動配列ポインタを参照し、  ポインタが指す位置からベクタをひとつ取得する。  取り出したベクタの内容を使って、オブジェクト無いの属性値に更新をかける。  描画も同様の手続きを踏む。  ※配列,配列ポインタについては、別項で詳細を示す。 ・キャラクタに対してイレギュラーな処理を組み込む場合は  コマンドセットを用いる。 ○ GRPオブジェクトに関して  GRPは、他のオブジェクトと取り扱いが少々違います。  通常のキャラクタは、その位置を特定するために「座標」を持っています。 このとき、 キャラクタの座標値はキャラクタの表示位置そのものです。  GRPも座標値を持っていますが、意味合いが異なります。 GRPにおける オブジェクトの座標値は、グラフィック画面におけるビューポートを表します。 取り扱い中のグラフィック画面における、ウィンドウをのぞく左上の点の位置が ビューポートとなります。 ○ コマンドパレットオブジェクトに関して  コマンドパレットオブジェクトは、コマンドセットを実行するためだけのオブジェクトです。  オブジェクトが存在したとしても、画面には何も表示されません。 座標管理も特性定義も 他のオブジェクトの特性とほぼすべて同様ですが、ゲーム中、描画関連の項目は 全て無視されます。 ○ 数値オブジェクトに関して  数値オブジェクトは、各パラメータの値を画面に表示するためのオブジェクトです。  オブジェクトの項目指定と、それに対する係数を用いて、値を表示できます。  数値オブジェクトを使用するには、「0」〜「9」までの画像を先頭のスプライトに  持ったビットマップ画像が必要です。  「先頭に」持っているということが重要です。 ○ 英字文字列オブジェクトに関して  英字文字列オブジェクトを使用することにより、画面に文字列を表示できます。  このオブジェクトを使用するには、ASCIIコード 0x20 〜 0x7F に対応した文字のスプライトを  先頭に持つようなビットマップ画像が必要です。  「先頭に」持っているということが重要です。 ○ 配列,配列ポインタについての詳細  敵キャラクタの挙動を定義する場合には、移動配列を使うことができます。 (使わないで定義することもできますが。)  各特性は、それぞれ任意の本数の「移動配列」「パラメータ配列」「描画配列」 を持つことができます。 各配列のひとつの要素は、任意次数のベクタです。  オブジェクトは、自分の座標や速度をベクタで持って処理していますので、配列に 移動量などを入れておけば、簡単に移動の処理を実現できます。 つまり、 配列からひとつのベクタを取り出して、そのままオブジェクトの座標値に足し込めば、 移動が実現できることになります。  オブジェクトが配列から値を取得するにあたっては、配列上のどの位置のベクタを 取得すれば良いかを管理する必要があります。 その情報を管理するのが「配列ポインタ」 です。 配列ポインタには、「移動配列ポインタ」「パラメータ配列ポインタ」 「描画配列ポインタ」の3種類があります。  各オブジェクトは、任意の個数の配列ポインタを持つことができます。  配列自体が「特性」に記述されている(全てのオブジェクトが共通で使う)のに対して、 配列ポインタは各個のオブジェクトがそれぞれ持っているという点に注意してください。 共通領域で定義された配列の上に、各個で持っているポインタを載せることによって、 各オブジェクトがどのベクタを取れば良いのかをバラバラに管理できます。  配列ポインタは、配列上の位置の他に、そのポインタが指す値が、結局何を意味するのか という情報も持っています。「移動量」を意味するポインタであった場合は、ポインタが 指す位置のベクタは「移動量」として認識されます。 同じ位置の同じベクタでも、 配列ポインタが「絶対位置」を表すポインタであれば、それは「絶対位置」を意味する ことになります。  オブジェクトは、移動する際に、まず移動配列ポインタの位置をチェックします。 どの配列上にいるか、どの位置にいるかが分かったら、特性の方からその位置のベクタを 取得します。  値を取得したら、配列ポインタを見て、とってきた値を結局どのように扱うかを 問い合わせます。(とってきたベクタの値は、絶対座標値なのか、相対移動量なのか、など) 問い合わせに対して答えが返ってきたら、その取り扱い方法で、オブジェクトの パラメータに更新をかけます。 ○ コマンドセット  オブジェクトに少々複雑なことをさせるには、コマンドセットを使用します。  詳細は、コマンドセットのテキストを参照してください。