最終更新日時: 2010年05月09日 (日) 11時06分39秒

GenericStructureContrib


建物総合コントリビューションとは


建物総合コントリビューションは、従来からあった「高さ固定建物」と「高さ可変建物」とを統合し、新たな機能を追加したコントリビューションを定義するものです。
これからは、「建物」プラグインはすべてこのGenericStructureコントリビューションで定義してください。

書式

建物を定義

 <contribution type="GenericStructure" id="{B99FA2F7-F138-46a1-9999-34AE23A157F6}-0">
   <name>中層雑居オフィスビル</name>
   <price>1600</price>
   <size>2,2</size>
   <height>3</height>
   <population>
       <class name="freetrain.contributions.population.OfficePopulation"/>
       <base>300</base>
   </population>
   <structure>
       <category  byname="貸事務所" / >
       <category  byname="一般飲食店" hide="true"/ >
   </structure>

   <spriteType  name="hueTransform">
       <map  from="*,0,0"  to="166,189,203"/>
   </spriteType>
 
   <sprite origin="0,0" offset="48">
       <picture ref="{B99FA2F7-F138-46a1-99F7-34AE23A157F6}"/>
   </sprite>
</contribution>
画像をspriteタグ内に直接指定することはできません。
pictureコントリビューションとして別に定義して、ref属性でidを参照するようにしてください。

コンピュータが建築できないようにする


<computerCannotBuild />タグを<contribution>タグ内に記述すると、コンピュータは建築することができなくなります。
<computerCannotBuild />

ランドマーク的な建物や、特殊な景色・ビジュアルを目的としていてコンピュータが自動発展で建てられては困るオブジェクトに指定します。

建物類別の指定

建物類別を指定すると、建物類別一覧ウィンドウで種類分けされて、目的の建物を探しやすくなります。
建物類別を指定しないと、「未分類」という項目が割り当てられます。
建物類別は<structure>タグの中に<category>タグを記述します。

色違いの画像の定義

色違いの画像は<spriteType>タグを列挙して定義します。
ただし、<spriteType>タグを記述する場所が従来と異なります。
<contribution type="GenericStructure" id="{B99FA2F7-F138-46a1-9999-34AE23A157F6}-0">
   <name>中層雑居オフィスビル</name>
   <price>1600</price>
   <size>2,2</size>
   <height>3</height>
   <population>
       <class name="freetrain.contributions.population.OfficePopulation"/>
       <base>300</base>
   </population>
   <spriteType  name="hueTransform">
       <map  from="*,0,0"  to="166,189,203"/>
   </spriteType>

   <spriteType  name="hueTransform">
       <map  from="*,0,0"  to="90,90,90"/>
   </spriteType>

   <spriteType  name="hueTransform">
       <map  from="*,0,0"  to="190,190,190"/>
   </spriteType>

   <spriteType  name="colorMapped">
       <map  from="137,0,0"  to="0,0,0"/>
       <map  from="209,0,0"  to="24,24,24"/>
       <map  from="255,0,0"  to="47,47,47"/>
       <map  from="255,151,151"  to="123,123,123"/>
       <map  from="255,96,96"  to="95,95,95"/>
   </spriteType>
   <sprite origin="0,0" offset="48">
       <picture ref="{B99FA2F7-F138-46a1-99F7-34AE23A157F6}"/>
   </sprite>
</contribution>
<spriteType>の内容は、hueTransformとcolorMappedは混在させることができます。
なお、<spriteType>タグが一つもない場合は、オリジナル画像そのままの色の建物として登録されます。

※従来のプラグインでは<sprite>タグの中に<spriteType>タグが記述されていますが、本拡張パックでは<sprite>タグの中に<spriteType>タグがあると、正しく色変換できません。

高さ可変の建物の場合もまったく同じです。
<spriteType name="XXX">の代わりに、<color type="XXX">と記述することもできます。
<color>の方が意味が分かりやすくてお勧めです。(※高さ固定の場合でも使えます。)
<contribution type="GenericStructure"  id="{615FF4AA-898E-466f-9999-1855F82C0002}">
   <name>貸しビル(A)</name>
   <price>3900</price>
   <size>2,3</size>
   <minHeight>2</minHeight>
   <maxHeight>10</maxHeight>
   <population>
       <class name="freetrain.contributions.population.OfficePopulation"/>
       <base>250</base>
   </population>
   <spriteType  name="hueTransform">
       <map  from="*,0,0"  to="166,189,203"/>
    </spriteType>

   <color  type="hueTransform">
       <map  from="*,0,0"  to="90,90,90"/>
   </color>
  <pictures>
       <top origin="80, 0" offset="16">
           <picture ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </top>
       <middle origin="80, 48" offset="16">
           <picture ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </middle>
       <bottom origin="80, 96" offset="16">
           <picture ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </bottom>
   </pictures>
</contribution>

方向違いの画像の定義

方向違いの画像は<sprite>タグ、または<pictures>タグを複数列挙することで定義します。
高さ固定の建物では<sprite>タグを使用します。
<contribution type="GenericStructure" id="{B99FA2F7-F138-46a1-9999-34AE23A157F6}-0">
   <name>中層雑居オフィスビル</name>
   <price>1600</price>
   <size>2,2</size>
   <height>3</height>
   <population>
       <class name="freetrain.contributions.population.OfficePopulation"/>
       <base>300</base>
   </population>
   <spriteType name="hueTransform">
       <map from="*,0,0" to="190,190,190"/>
   </spriteType>
   <sprite  origin="0,0"  offset="48">
       <picture  ref="{B99FA2F7-F138-46a1-99F7-34AE23A157F6}"/>
   </sprite>

   <sprite  origin="64,0"  offset="48" opposite="true">
       <picture  ref="{B99FA2F7-F138-46a1-99F7-34AE23A157F6}"/>
   </sprite>
</contribution>
2つ目の<sprite>タグにはopposite="true"という属性が定義されています。
これは、本拡張パック独自の拡張です。oppositeの意味は次の例で説明します。

高さ可変の建物の場合、<pictures>タグを列挙します。

<contribution type="GenericStructure"  id="{615FF4AA-898E-466f-9999-1855F82C0002}">
   <name>貸しビル(A)</name>
   <price>3900</price>
   <size>2,3</size>
   <minHeight>2</minHeight>
   <maxHeight>10</maxHeight>
   <population>
       <class name="freetrain.contributions.population.OfficePopulation"/>
       <base>250</base>
   </population>
   <spriteType name="hueTransform">
       <map from="*,0,0" to="166,189,203"/>
   </spriteType>
  <pictures  opposite="true">
       <top  origin="0, 0"  offset="24">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </top>
       <middle  origin="0, 48"  offset="24">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </middle>
       <bottom  origin="0, 96"  offset="24">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </bottom>
   </pictures>

   <pictures>
       <top  origin="80, 0"  offset="16">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </top>
       <middle  origin="80, 48"  offset="16">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </middle>
       <bottom  origin="80, 96"  offset="16">
           <picture  ref="{2E8E24AC-4242-4801-A4DD-2947A0800794}"/>
       </bottom>
   </pictures>
</contribution>
ここでも1つ目の<pictures>タグに、新規に追加されたopposite属性が指定されています。
opposite="true"と書くと、その向きの画像は<size>タグで指定したタグと縦横逆に読み込みます。
これは、縦横のボクセル数が異なる建物の方向違いを定義する際に重要です。
つまり、上の例では<size>2,3</size>と記述されていますが、
1つ目の<pictures>はopposite="true"なので、<size>3,2</size>の画像として読み込みます。
2つ目の<pictures>は特に指定がないので、<size>2,3</size>の画像として読み込みます。

建物の価格<price>

<price>タグで指定する建物の価格は非常に重要です。
プレイヤーが建設するときのゲームバランスも影響しますし、コンピュータが自動発展で建物を建てるときはこの<price>をもとにどの建物を建てようとするのか決めているので、不適切な<price>を設定するとおかしな街ができてしまったりします。

【V1】プラグインでは、この<price>に設定する数値は現実の建物価格の1/30000の値を記入します。
30000000の一戸建て住宅であれば、1000と記入します。

【V2】プラグインでは、この<price>に設定する数値は現実の建物価格の1/3の値を記入します。
60000000の木造アパートであれば、20000000と記入します。

説明

  • 複合的な要素を持つ建物は、<category>タグは複数列挙することができます。
  • byname属性で建物類別を指定します。 指定できる建物類別はjp.co.tripod.chiname.lib.generic\CategoryTree.xml に記述されているもののみです。
  • <category>タグを複数指定すると、デフォルトでは指定した全ての類別が建物類別一覧ウィンドウと 関連付けられます。
  • (つまり、その類別を選択すると、リストにその建物が現れる。)
  • しかしhide="true"とすると、類別一覧ウィンドウでその類別を選択しても、 リストに現れなくすることが出来ます。
  • categoryタグは現在は建物総合UIでしか使用していないので、hide="true"にするくらいなら、書かなければよいと思われるかもしれません。しかし、 将来この情報を発展アルゴリズムなどから 利用することも考えた上で、その建物が本来持っている主要な類別属性は列挙しておくのがよいと思います。
  • ※建物総合UIは、多くなりすぎた建物を分類して選びやすくしようという目的で作っています。同じ建物がアレを選んでもコレを選んでも出てくるようでは、意味がありません。その建物の最も重要な役割の類別1~2個以外は hide="true"にすることをお勧めします。