Siege University 200

■講義201 テンプレート#1

<テンプレートとは>

 テンプレートとはレベルの最も基本となるもので,単なるグラフィックスやサウンドなどをゲーム内のオブジェクト(岩,木,剣,クリーチャーなど)として作り出してくれます。テンプレートはゲームのオブジェクトを言語にしたもののブロックからなっています。

どうしてテンプレートを作るのか
 MODを制作する際,たいていは最初からゲームに含まれているコンテンツを改変するか,まったく新しいコンテンツを加えるかのいずれか,あるいはその両方を組み合わせているはずです。テンプレートを作る必要性は,MOD制作者がコンテンツをゲームに加える時か,既存のコンテンツの機能性をまったく損なわずに新しい方法でそのコンテンツを使おうとする場合に発生します。
 具体的には,もしまったく新しいグラフィックスを持つ剣を作ろうとした時,あなたはその剣に関するテンプレートを新たに作ることになるのです。同じように,新しいステータスを持つだけの剣を作ろうとした場合でも,最初からゲームに含まれているすべての剣を保護するために,テンプレートを作ることになります(絶対ではありませんが)。

テンプレートってどんなもの?
 テンプレートはGASファイルに属し,4行程度のものから100行以上にのぼるものまで様々です。ひとつのGASファイルには1個から1000個までのテンプレートを含ませることができます(しかし1つのファイルには100個以下にとどめておくことをお奨めします)。
 下記のコードはダンジョン・シージをインストールした場所の"Resources"ディレクトリにある"Logic.dsres"に含まれるテンプレートの例です。


[t:template,n:blacksmith_hammer]
{
    specializes = base_misc_fs1;
    category_name = "other";
    doc = "blacksmith hammer";
    [aspect] { model=m_w_hmr_004; }
    [attack]
    {
        damage_max = 2;
        damage_min = 1;
    }
    [common]
    {
        screen_name = "Blacksmith Hammer";
    }
    [gui]
    {
        active_icon = b_gui_ig_i_ic_hmr_001;
        inventory_height = 2;
        inventory_icon = b_gui_ig_i_w_hmr_004;
        inventory_width = 1;
    }
} 
(world\contentdb\templates\regular\interactive\wpn_misc.gasより)

 ダンジョンシージの素晴らしいところのひとつは,大量のドキュメントがゲームファイルそのものに含まれていることです。これから説明していくものの多くは,後に述べる様々なファイルの中にも含まれています。この資料はファイルの冒頭のコメントの形態であるか,データファイル中に挿入されています。"template.gas"や"components.gas"(後述)などがその良い例となります。

 ひとつ忘れてはならないのは,これらファイルの中のいくつかの資料(テンプレート)は開発段階の機能やシステムのために書かれた古いものも含まれているということです。ダンジョン・シージの開発段階からリリースバージョンまでの間に,機能面での操作やシステムが変化したことはありえます。それゆえテンプレートに含まれている情報はこれらファイルの情報に関連して使用される必要があり,ここに含まれるデータはファイルの資料よりも優先されます。

<テンプレートの構造>

 テンプレートは以下の3タイプのデータで構成されています。

  • コンポーネント
  • フィールド
  • ブロック

 ここでは4つ挙げましたが,一番下の"ブロック"とは,その上3つ(コンポーネント,フィールド,値)の集合体のことです。

 テンプレートは「コンポーネント」,1つ以上のコンポーネントの「フィールド」,そしてそのフィールドの「値」の3つの要素からなる「ブロック」で構成されています。上記テンプレートの[common]ブロックを見てみましょう:

[common]
{
screen_name = "Blacksmith Hammer";
}

 このブロックには1つのフィールド(screen_nameとその値"Blacksmith Hammer")が含まれています。このブロックはコンポーネント(この場合[common])の宣言がなされていると見なされ,すべて大括弧({,})で括られています。ブロック内のフィールドラインはセミコロン(;)で終わります。C,C++,Javaなどといった言語に慣れている人なら,こういった構文的な慣習に見覚えがあると思いますが,こういった括りが無ければオブジェクトはゲームエンジンにロードされません。

 すべてのテンプレートは"world\contentdb\templates"にある"Logic.DSRES"のGASファイルで見ることができます。

 すべてのベーステンプレートは,\regularサブディレクトリにあるtemplate.gas(後述します)内にコア・テンプレートを含んでいます。\veteranと\eliteディレクトリにあるテンプレートは,他の2つのテンプレートからチューンされたものです。この文書を読んで,テンプレートとその構造に慣れたら,いかにしてゲームエンジンが難易度レベルを作成するためにテンプレートを使っているかということを学ぶためにも,\veteranと\eliteのファイルやテンプレートを見てみる事をお奨めします。
 基本的に\vetranと\eliteに含まれているテンプレートは\regularにあるもののステータスやパラメトライズド・コンテンツ(pcontent)の範囲を増長させたものです。パラメトライズド・コンテンツは値の範囲に基づいて直接的にコンテンツを設置するシステムです。パラメトライズド・コンテンツはこの文書で触れる範囲外であり,さらなる情報はcontents.gas(以下参照)にあります。

・コンポーネント
 コンポーネントはゲームオブジェクトの基本構築ブロックで,ゲームエンジンで特定のタスクの履行を定義します。テンプレートの中では,コンポーネントは角括弧([])で囲まれます。例えば,上記の[common]コンポーネントには1つのフィールド('screen_name'フィールド)があり,アイテムが拾い上げられたり,マウスオーバーされることによって,何をどう表示するかをゲームエンジンに伝えています。

 テンプレートを学ぶに最もふさわしいファイルは,Logic.DSRESファイルに含まれる,"world\contentdb\components\components.gas"でしょう。

 これはゲーム内のコンポーネントやそのフィールドを解読するための暗号解読書ともいえるものです。何らかのテンプレートを見る際,様々なコンポーネントやそれに含まれる無数のフィールドに慣れるためにも,このファイルを開いておくことをお勧めします。テンプレート内に新しいコンポーネントを発見した時にconponents.gasを参照すれば,それが何をするものなのかを見つけることができるでしょう。

・フィールド
仮にもしあなたが上記テンプレートの[common]コンポーネントの"screen_name"の目的が分からなければ,"components.gas"を開き,'screen_name'を検索してみてください。これによって[t:component,n:common]に以下の行が見つかると思います。


[screen_name] 
{  
    type = string; 
    flags = LOCALIZE; 
    doc = "Text seen in-game upon mouse over";  
}
 components.gasに含まれるすべてのフィールドの中で重要な部分は,"default="と"doc="です。それぞれのフィールドには"default"があり(このケースのように,例外もありますが),"doc"は(通常は)そのフィールドの目的が正確に記述されています。しかしこのcommonコンポーネントのフィールドには"default"が含まれていませんが,この事については次に述べる「特殊化」の項目でさらに詳しく述べましょう。

・値
値は単に自己説明です。テンプレートにあるコンポーネントブロック内のそれぞれのフィールドには必ず値が必要です。上記テンプレートの例では"screen_name"フィールドの値は"Blacksmith Hammer"ということになります。

次のページへ